From c8680b1e7780a59e1332bf3edb930acd8f88ec5a Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Tue, 12 Dec 2017 09:38:20 +0100 Subject: [PATCH] More smarter temp locals --- src/compiler.ts | 15 +- tests/compiler/logical.wast | 72 ++-- tests/compiler/memcpy.optimized.wast | 583 ++++++++++++++------------- tests/compiler/memcpy.wast | 562 +++++++++++--------------- tests/compiler/unary.wast | 108 +++-- 5 files changed, 631 insertions(+), 709 deletions(-) diff --git a/src/compiler.ts b/src/compiler.ts index 87906c1f..d36d3ac1 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -858,12 +858,12 @@ export class Compiler extends DiagnosticEmitter { this.disallowContinue = true; // introduce a local for evaluating the condition (exactly once) - const local: Local = this.currentFunction.addLocal(Type.i32); + const tempLocal: Local = this.currentFunction.getTempLocal(Type.i32); let i: i32, k: i32 = statement.cases.length; // prepend initializer to inner block const breaks: ExpressionRef[] = new Array(1 + k); - breaks[0] = this.module.createSetLocal(local.index, this.compileExpression(statement.expression, Type.i32)); // initializer + breaks[0] = this.module.createSetLocal(tempLocal.index, this.compileExpression(statement.expression, Type.i32)); // initializer // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible) let breakIndex: i32 = 1; @@ -873,7 +873,7 @@ export class Compiler extends DiagnosticEmitter { if (case_.label) { breaks[breakIndex++] = this.module.createBreak("case" + i.toString(10) + "|" + context, this.module.createBinary(BinaryOp.EqI32, - this.module.createGetLocal(local.index, NativeType.I32), + this.module.createGetLocal(tempLocal.index, NativeType.I32), this.compileExpression(case_.label, Type.i32) ) ); @@ -881,6 +881,8 @@ export class Compiler extends DiagnosticEmitter { defaultIndex = i; } + this.currentFunction.freeTempLocal(tempLocal); + // otherwise br to default respectively out of the switch if there is no default case breaks[breakIndex] = this.module.createBreak((defaultIndex >= 0 ? "case" + defaultIndex.toString(10) @@ -1495,7 +1497,7 @@ export class Compiler extends DiagnosticEmitter { // ); // otherwise use a temporary local for the intermediate value - tempLocal = this.currentFunction.addLocal(this.currentType); + tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType); condition = this.module.createTeeLocal(tempLocal.index, left); return this.module.createIf( this.currentType.isLongInteger @@ -1528,7 +1530,7 @@ export class Compiler extends DiagnosticEmitter { // ); // otherwise use a temporary local for the intermediate value - tempLocal = this.currentFunction.addLocal(this.currentType); + tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType); condition = this.module.createTeeLocal(tempLocal.index, left); return this.module.createIf( this.currentType.isLongInteger @@ -1848,7 +1850,7 @@ export class Compiler extends DiagnosticEmitter { const getValue: ExpressionRef = this.compileExpression(expression.expression, contextualType, contextualType == Type.void ? ConversionKind.NONE : ConversionKind.IMPLICIT); // use a temp local for the intermediate value - const tempLocal: Local = this.currentFunction.addLocal(this.currentType); + const tempLocal: Local = this.currentFunction.getTempLocal(this.currentType); let op: BinaryOp; let nativeType: NativeType; @@ -1886,6 +1888,7 @@ export class Compiler extends DiagnosticEmitter { // NOTE: can't preemptively tee_local the return value on the stack because binaryen expects // this to be well-formed. becomes a tee_local when optimizing, though. this.currentType = tempLocal.type; + this.currentFunction.freeTempLocal(tempLocal); return this.module.createBlock(null, [ this.module.createSetLocal(tempLocal.index, getValue), // +++ this.module.createTeeLocal(tempLocal.index, getValue), setValue, diff --git a/tests/compiler/logical.wast b/tests/compiler/logical.wast index 813531b4..50de4022 100644 --- a/tests/compiler/logical.wast +++ b/tests/compiler/logical.wast @@ -11,20 +11,8 @@ (func $start (; 0 ;) (type $v) (local $0 i32) (local $1 f64) - (local $2 i32) - (local $3 f64) - (local $4 i32) - (local $5 i32) - (local $6 f64) - (local $7 f64) - (local $8 i32) - (local $9 i32) - (local $10 i64) - (local $11 i64) - (local $12 f32) - (local $13 f32) - (local $14 f64) - (local $15 f64) + (local $2 i64) + (local $3 f32) (drop (if (result i32) (tee_local $0 @@ -48,68 +36,68 @@ ) (drop (if (result i32) - (tee_local $2 + (tee_local $0 (i32.const 1) ) - (get_local $2) + (get_local $0) (unreachable) ) ) (drop (if (result f64) (f64.ne - (tee_local $3 + (tee_local $1 (f64.const 1) ) (f64.const 0) ) - (get_local $3) + (get_local $1) (unreachable) ) ) (drop (if (result i32) - (tee_local $5 + (tee_local $0 (if (result i32) - (tee_local $4 + (tee_local $0 (i32.const 1) ) (i32.const 2) - (get_local $4) + (get_local $0) ) ) - (get_local $5) + (get_local $0) (unreachable) ) ) (drop (if (result f64) (f64.ne - (tee_local $7 + (tee_local $1 (if (result f64) (f64.ne - (tee_local $6 + (tee_local $1 (f64.const 1) ) (f64.const 0) ) (f64.const 2) - (get_local $6) + (get_local $1) ) ) (f64.const 0) ) - (get_local $7) + (get_local $1) (unreachable) ) ) (set_global $logical/i (if (result i32) - (tee_local $8 + (tee_local $0 (i32.const 1) ) (i32.const 2) - (get_local $8) + (get_local $0) ) ) (if @@ -123,10 +111,10 @@ ) (set_global $logical/i (if (result i32) - (tee_local $9 + (tee_local $0 (i32.const 0) ) - (get_local $9) + (get_local $0) (i32.const 1) ) ) @@ -142,13 +130,13 @@ (set_global $logical/I (if (result i64) (i64.ne - (tee_local $10 + (tee_local $2 (i64.const 1) ) (i64.const 0) ) (i64.const 2) - (get_local $10) + (get_local $2) ) ) (if @@ -163,12 +151,12 @@ (set_global $logical/I (if (result i64) (i64.ne - (tee_local $11 + (tee_local $2 (i64.const 0) ) (i64.const 0) ) - (get_local $11) + (get_local $2) (i64.const 1) ) ) @@ -184,13 +172,13 @@ (set_global $logical/f (if (result f32) (f32.ne - (tee_local $12 + (tee_local $3 (f32.const 1) ) (f32.const 0) ) (f32.const 2) - (get_local $12) + (get_local $3) ) ) (if @@ -205,12 +193,12 @@ (set_global $logical/f (if (result f32) (f32.ne - (tee_local $13 + (tee_local $3 (f32.const 0) ) (f32.const 0) ) - (get_local $13) + (get_local $3) (f32.const 1) ) ) @@ -226,13 +214,13 @@ (set_global $logical/F (if (result f64) (f64.ne - (tee_local $14 + (tee_local $1 (f64.const 1) ) (f64.const 0) ) (f64.const 2) - (get_local $14) + (get_local $1) ) ) (if @@ -247,12 +235,12 @@ (set_global $logical/F (if (result f64) (f64.ne - (tee_local $15 + (tee_local $1 (f64.const 0) ) (f64.const 0) ) - (get_local $15) + (get_local $1) (f64.const 1) ) ) diff --git a/tests/compiler/memcpy.optimized.wast b/tests/compiler/memcpy.optimized.wast index 549bd57e..71a580d4 100644 --- a/tests/compiler/memcpy.optimized.wast +++ b/tests/compiler/memcpy.optimized.wast @@ -13,40 +13,43 @@ (set_local $4 (get_local $0) ) + (set_local $3 + (get_local $1) + ) (loop $continue|0 (if (if (result i32) - (tee_local $3 + (tee_local $1 (get_local $2) ) (i32.rem_u - (get_local $1) + (get_local $3) (i32.const 4) ) - (get_local $3) + (get_local $1) ) (block (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) @@ -78,7 +81,7 @@ (i32.store (get_local $4) (i32.load - (get_local $1) + (get_local $3) ) ) (i32.store @@ -88,7 +91,7 @@ ) (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 4) ) ) @@ -100,7 +103,7 @@ ) (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 8) ) ) @@ -112,14 +115,14 @@ ) (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 12) ) ) ) - (set_local $1 + (set_local $3 (i32.add - (get_local $1) + (get_local $3) (i32.const 16) ) ) @@ -148,7 +151,7 @@ (i32.store (get_local $4) (i32.load - (get_local $1) + (get_local $3) ) ) (i32.store @@ -158,7 +161,7 @@ ) (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 4) ) ) @@ -169,9 +172,9 @@ (i32.const 8) ) ) - (set_local $1 + (set_local $3 (i32.add - (get_local $1) + (get_local $3) (i32.const 8) ) ) @@ -186,7 +189,7 @@ (i32.store (get_local $4) (i32.load - (get_local $1) + (get_local $3) ) ) (set_local $4 @@ -195,9 +198,9 @@ (i32.const 4) ) ) - (set_local $1 + (set_local $3 (i32.add - (get_local $1) + (get_local $3) (i32.const 4) ) ) @@ -212,7 +215,7 @@ (i32.store16 (get_local $4) (i32.load16_u - (get_local $1) + (get_local $3) ) ) (set_local $4 @@ -221,9 +224,9 @@ (i32.const 2) ) ) - (set_local $1 + (set_local $3 (i32.add - (get_local $1) + (get_local $3) (i32.const 2) ) ) @@ -234,10 +237,20 @@ (get_local $2) (i32.const 1) ) - (i32.store8 - (get_local $4) - (i32.load8_u + (block + (set_local $1 + (get_local $4) + ) + (i32.store8 (get_local $1) + (block (result i32) + (set_local $1 + (get_local $3) + ) + (i32.load8_u + (get_local $1) + ) + ) ) ) ) @@ -270,78 +283,78 @@ ) (set_local $5 (i32.load - (get_local $1) + (get_local $3) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) @@ -366,10 +379,10 @@ (i32.const 24) ) (i32.shl - (tee_local $3 + (tee_local $1 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 1) ) ) @@ -385,14 +398,14 @@ ) (i32.or (i32.shr_u - (get_local $3) + (get_local $1) (i32.const 24) ) (i32.shl (tee_local $5 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 5) ) ) @@ -412,10 +425,10 @@ (i32.const 24) ) (i32.shl - (tee_local $3 + (tee_local $1 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 9) ) ) @@ -431,14 +444,14 @@ ) (i32.or (i32.shr_u - (get_local $3) + (get_local $1) (i32.const 24) ) (i32.shl (tee_local $5 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 13) ) ) @@ -447,9 +460,9 @@ ) ) ) - (set_local $1 + (set_local $3 (i32.add - (get_local $1) + (get_local $3) (i32.const 16) ) ) @@ -473,54 +486,54 @@ ) (set_local $5 (i32.load - (get_local $1) + (get_local $3) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) @@ -545,10 +558,10 @@ (i32.const 16) ) (i32.shl - (tee_local $3 + (tee_local $1 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 2) ) ) @@ -564,14 +577,14 @@ ) (i32.or (i32.shr_u - (get_local $3) + (get_local $1) (i32.const 16) ) (i32.shl (tee_local $5 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 6) ) ) @@ -591,10 +604,10 @@ (i32.const 16) ) (i32.shl - (tee_local $3 + (tee_local $1 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 10) ) ) @@ -610,14 +623,14 @@ ) (i32.or (i32.shr_u - (get_local $3) + (get_local $1) (i32.const 16) ) (i32.shl (tee_local $5 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 14) ) ) @@ -626,9 +639,9 @@ ) ) ) - (set_local $1 + (set_local $3 (i32.add - (get_local $1) + (get_local $3) (i32.const 16) ) ) @@ -652,30 +665,30 @@ ) (set_local $5 (i32.load - (get_local $1) + (get_local $3) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) @@ -700,10 +713,10 @@ (i32.const 8) ) (i32.shl - (tee_local $3 + (tee_local $1 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 3) ) ) @@ -719,14 +732,14 @@ ) (i32.or (i32.shr_u - (get_local $3) + (get_local $1) (i32.const 8) ) (i32.shl (tee_local $5 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 7) ) ) @@ -746,10 +759,10 @@ (i32.const 8) ) (i32.shl - (tee_local $3 + (tee_local $1 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 11) ) ) @@ -765,14 +778,14 @@ ) (i32.or (i32.shr_u - (get_local $3) + (get_local $1) (i32.const 8) ) (i32.shl (tee_local $5 (i32.load (i32.add - (get_local $1) + (get_local $3) (i32.const 15) ) ) @@ -781,9 +794,9 @@ ) ) ) - (set_local $1 + (set_local $3 (i32.add - (get_local $1) + (get_local $3) (i32.const 16) ) ) @@ -813,385 +826,385 @@ (block (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) @@ -1205,193 +1218,193 @@ (block (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) @@ -1405,97 +1418,97 @@ (block (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) @@ -1509,49 +1522,49 @@ (block (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) (set_local $4 (i32.add - (tee_local $3 + (tee_local $1 (get_local $4) ) (i32.const 1) ) ) (i32.store8 - (get_local $3) + (get_local $1) (block (result i32) - (set_local $1 + (set_local $3 (i32.add - (tee_local $3 - (get_local $1) + (tee_local $1 + (get_local $3) ) (i32.const 1) ) ) (i32.load8_u - (get_local $3) + (get_local $1) ) ) ) @@ -1562,10 +1575,20 @@ (get_local $2) (i32.const 1) ) - (i32.store8 - (get_local $4) - (i32.load8_u + (block + (set_local $1 + (get_local $4) + ) + (i32.store8 (get_local $1) + (block (result i32) + (set_local $1 + (get_local $3) + ) + (i32.load8_u + (get_local $1) + ) + ) ) ) ) diff --git a/tests/compiler/memcpy.wast b/tests/compiler/memcpy.wast index 61e17427..e34d9d70 100644 --- a/tests/compiler/memcpy.wast +++ b/tests/compiler/memcpy.wast @@ -14,86 +14,6 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) - (local $9 i32) - (local $10 i32) - (local $11 i32) - (local $12 i32) - (local $13 i32) - (local $14 i32) - (local $15 i32) - (local $16 i32) - (local $17 i32) - (local $18 i32) - (local $19 i32) - (local $20 i32) - (local $21 i32) - (local $22 i32) - (local $23 i32) - (local $24 i32) - (local $25 i32) - (local $26 i32) - (local $27 i32) - (local $28 i32) - (local $29 i32) - (local $30 i32) - (local $31 i32) - (local $32 i32) - (local $33 i32) - (local $34 i32) - (local $35 i32) - (local $36 i32) - (local $37 i32) - (local $38 i32) - (local $39 i32) - (local $40 i32) - (local $41 i32) - (local $42 i32) - (local $43 i32) - (local $44 i32) - (local $45 i32) - (local $46 i32) - (local $47 i32) - (local $48 i32) - (local $49 i32) - (local $50 i32) - (local $51 i32) - (local $52 i32) - (local $53 i32) - (local $54 i32) - (local $55 i32) - (local $56 i32) - (local $57 i32) - (local $58 i32) - (local $59 i32) - (local $60 i32) - (local $61 i32) - (local $62 i32) - (local $63 i32) - (local $64 i32) - (local $65 i32) - (local $66 i32) - (local $67 i32) - (local $68 i32) - (local $69 i32) - (local $70 i32) - (local $71 i32) - (local $72 i32) - (local $73 i32) - (local $74 i32) - (local $75 i32) - (local $76 i32) - (local $77 i32) - (local $78 i32) - (local $79 i32) - (local $80 i32) - (local $81 i32) - (local $82 i32) - (local $83 i32) - (local $84 i32) - (local $85 i32) - (local $86 i32) - (local $87 i32) (block (set_local $3 (get_local $0) @@ -120,44 +40,44 @@ (block (i32.store8 (block (result i32) - (set_local $8 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $8) + (get_local $7) (i32.const 1) ) ) - (get_local $8) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $9 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $9) + (get_local $7) (i32.const 1) ) ) - (get_local $9) + (get_local $7) ) ) ) (drop (block (result i32) - (set_local $10 + (set_local $7 (get_local $2) ) (set_local $2 (i32.sub - (get_local $10) + (get_local $7) (i32.const 1) ) ) - (get_local $10) + (get_local $7) ) ) ) @@ -347,29 +267,29 @@ ) (i32.store8 (block (result i32) - (set_local $11 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $11) + (get_local $7) (i32.const 1) ) ) - (get_local $11) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $12 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $12) + (get_local $7) (i32.const 1) ) ) - (get_local $12) + (get_local $7) ) ) ) @@ -388,7 +308,7 @@ (block $case2|2 (block $case1|2 (block $case0|2 - (set_local $13 + (set_local $7 (i32.rem_u (get_local $3) (i32.const 4) @@ -396,19 +316,19 @@ ) (br_if $case0|2 (i32.eq - (get_local $13) + (get_local $7) (i32.const 1) ) ) (br_if $case1|2 (i32.eq - (get_local $13) + (get_local $7) (i32.const 2) ) ) (br_if $case2|2 (i32.eq - (get_local $13) + (get_local $7) (i32.const 3) ) ) @@ -421,85 +341,85 @@ ) (i32.store8 (block (result i32) - (set_local $14 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $14) + (get_local $7) (i32.const 1) ) ) - (get_local $14) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $15 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $15) + (get_local $7) (i32.const 1) ) ) - (get_local $15) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $16 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $16) + (get_local $7) (i32.const 1) ) ) - (get_local $16) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $17 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $17) + (get_local $7) (i32.const 1) ) ) - (get_local $17) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $18 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $18) + (get_local $7) (i32.const 1) ) ) - (get_local $18) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $19 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $19) + (get_local $7) (i32.const 1) ) ) - (get_local $19) + (get_local $7) ) ) ) @@ -644,57 +564,57 @@ ) (i32.store8 (block (result i32) - (set_local $20 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $20) + (get_local $7) (i32.const 1) ) ) - (get_local $20) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $21 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $21) + (get_local $7) (i32.const 1) ) ) - (get_local $21) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $22 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $22) + (get_local $7) (i32.const 1) ) ) - (get_local $22) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $23 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $23) + (get_local $7) (i32.const 1) ) ) - (get_local $23) + (get_local $7) ) ) ) @@ -839,29 +759,29 @@ ) (i32.store8 (block (result i32) - (set_local $24 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $24) + (get_local $7) (i32.const 1) ) ) - (get_local $24) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $25 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $25) + (get_local $7) (i32.const 1) ) ) - (get_local $25) + (get_local $7) ) ) ) @@ -1008,449 +928,449 @@ (block (i32.store8 (block (result i32) - (set_local $26 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $26) + (get_local $7) (i32.const 1) ) ) - (get_local $26) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $27 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $27) + (get_local $7) (i32.const 1) ) ) - (get_local $27) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $28 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $28) + (get_local $7) (i32.const 1) ) ) - (get_local $28) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $29 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $29) + (get_local $7) (i32.const 1) ) ) - (get_local $29) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $30 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $30) + (get_local $7) (i32.const 1) ) ) - (get_local $30) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $31 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $31) + (get_local $7) (i32.const 1) ) ) - (get_local $31) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $32 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $32) + (get_local $7) (i32.const 1) ) ) - (get_local $32) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $33 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $33) + (get_local $7) (i32.const 1) ) ) - (get_local $33) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $34 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $34) + (get_local $7) (i32.const 1) ) ) - (get_local $34) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $35 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $35) + (get_local $7) (i32.const 1) ) ) - (get_local $35) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $36 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $36) + (get_local $7) (i32.const 1) ) ) - (get_local $36) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $37 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $37) + (get_local $7) (i32.const 1) ) ) - (get_local $37) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $38 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $38) + (get_local $7) (i32.const 1) ) ) - (get_local $38) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $39 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $39) + (get_local $7) (i32.const 1) ) ) - (get_local $39) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $40 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $40) + (get_local $7) (i32.const 1) ) ) - (get_local $40) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $41 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $41) + (get_local $7) (i32.const 1) ) ) - (get_local $41) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $42 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $42) + (get_local $7) (i32.const 1) ) ) - (get_local $42) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $43 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $43) + (get_local $7) (i32.const 1) ) ) - (get_local $43) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $44 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $44) + (get_local $7) (i32.const 1) ) ) - (get_local $44) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $45 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $45) + (get_local $7) (i32.const 1) ) ) - (get_local $45) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $46 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $46) + (get_local $7) (i32.const 1) ) ) - (get_local $46) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $47 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $47) + (get_local $7) (i32.const 1) ) ) - (get_local $47) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $48 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $48) + (get_local $7) (i32.const 1) ) ) - (get_local $48) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $49 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $49) + (get_local $7) (i32.const 1) ) ) - (get_local $49) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $50 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $50) + (get_local $7) (i32.const 1) ) ) - (get_local $50) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $51 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $51) + (get_local $7) (i32.const 1) ) ) - (get_local $51) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $52 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $52) + (get_local $7) (i32.const 1) ) ) - (get_local $52) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $53 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $53) + (get_local $7) (i32.const 1) ) ) - (get_local $53) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $54 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $54) + (get_local $7) (i32.const 1) ) ) - (get_local $54) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $55 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $55) + (get_local $7) (i32.const 1) ) ) - (get_local $55) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $56 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $56) + (get_local $7) (i32.const 1) ) ) - (get_local $56) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $57 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $57) + (get_local $7) (i32.const 1) ) ) - (get_local $57) + (get_local $7) ) ) ) @@ -1464,225 +1384,225 @@ (block (i32.store8 (block (result i32) - (set_local $58 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $58) + (get_local $7) (i32.const 1) ) ) - (get_local $58) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $59 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $59) + (get_local $7) (i32.const 1) ) ) - (get_local $59) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $60 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $60) + (get_local $7) (i32.const 1) ) ) - (get_local $60) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $61 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $61) + (get_local $7) (i32.const 1) ) ) - (get_local $61) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $62 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $62) + (get_local $7) (i32.const 1) ) ) - (get_local $62) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $63 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $63) + (get_local $7) (i32.const 1) ) ) - (get_local $63) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $64 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $64) + (get_local $7) (i32.const 1) ) ) - (get_local $64) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $65 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $65) + (get_local $7) (i32.const 1) ) ) - (get_local $65) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $66 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $66) + (get_local $7) (i32.const 1) ) ) - (get_local $66) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $67 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $67) + (get_local $7) (i32.const 1) ) ) - (get_local $67) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $68 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $68) + (get_local $7) (i32.const 1) ) ) - (get_local $68) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $69 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $69) + (get_local $7) (i32.const 1) ) ) - (get_local $69) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $70 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $70) + (get_local $7) (i32.const 1) ) ) - (get_local $70) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $71 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $71) + (get_local $7) (i32.const 1) ) ) - (get_local $71) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $72 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $72) + (get_local $7) (i32.const 1) ) ) - (get_local $72) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $73 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $73) + (get_local $7) (i32.const 1) ) ) - (get_local $73) + (get_local $7) ) ) ) @@ -1696,113 +1616,113 @@ (block (i32.store8 (block (result i32) - (set_local $74 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $74) + (get_local $7) (i32.const 1) ) ) - (get_local $74) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $75 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $75) + (get_local $7) (i32.const 1) ) ) - (get_local $75) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $76 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $76) + (get_local $7) (i32.const 1) ) ) - (get_local $76) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $77 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $77) + (get_local $7) (i32.const 1) ) ) - (get_local $77) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $78 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $78) + (get_local $7) (i32.const 1) ) ) - (get_local $78) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $79 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $79) + (get_local $7) (i32.const 1) ) ) - (get_local $79) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $80 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $80) + (get_local $7) (i32.const 1) ) ) - (get_local $80) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $81 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $81) + (get_local $7) (i32.const 1) ) ) - (get_local $81) + (get_local $7) ) ) ) @@ -1816,57 +1736,57 @@ (block (i32.store8 (block (result i32) - (set_local $82 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $82) + (get_local $7) (i32.const 1) ) ) - (get_local $82) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $83 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $83) + (get_local $7) (i32.const 1) ) ) - (get_local $83) + (get_local $7) ) ) ) (i32.store8 (block (result i32) - (set_local $84 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $84) + (get_local $7) (i32.const 1) ) ) - (get_local $84) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $85 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $85) + (get_local $7) (i32.const 1) ) ) - (get_local $85) + (get_local $7) ) ) ) @@ -1879,29 +1799,29 @@ ) (i32.store8 (block (result i32) - (set_local $86 + (set_local $7 (get_local $3) ) (set_local $3 (i32.add - (get_local $86) + (get_local $7) (i32.const 1) ) ) - (get_local $86) + (get_local $7) ) (i32.load8_u (block (result i32) - (set_local $87 + (set_local $7 (get_local $4) ) (set_local $4 (i32.add - (get_local $87) + (get_local $7) (i32.const 1) ) ) - (get_local $87) + (get_local $7) ) ) ) diff --git a/tests/compiler/unary.wast b/tests/compiler/unary.wast index 6695638a..11ffdc7b 100644 --- a/tests/compiler/unary.wast +++ b/tests/compiler/unary.wast @@ -10,21 +10,9 @@ (start $start) (func $start (; 0 ;) (type $v) (local $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i64) - (local $5 i64) - (local $6 i64) - (local $7 i64) - (local $8 f32) - (local $9 f32) - (local $10 f32) - (local $11 f32) - (local $12 f64) - (local $13 f64) - (local $14 f64) - (local $15 f64) + (local $1 i64) + (local $2 f32) + (local $3 f64) (drop (i32.const 1) ) @@ -107,16 +95,16 @@ ) (drop (block (result i32) - (set_local $1 + (set_local $0 (get_global $unary/i) ) (set_global $unary/i (i32.sub - (get_local $1) + (get_local $0) (i32.const 1) ) ) - (get_local $1) + (get_local $0) ) ) (set_global $unary/i @@ -183,30 +171,30 @@ ) (set_global $unary/i (block (result i32) - (set_local $2 + (set_local $0 (get_global $unary/i) ) (set_global $unary/i (i32.add - (get_local $2) + (get_local $0) (i32.const 1) ) ) - (get_local $2) + (get_local $0) ) ) (set_global $unary/i (block (result i32) - (set_local $3 + (set_local $0 (get_global $unary/i) ) (set_global $unary/i (i32.sub - (get_local $3) + (get_local $0) (i32.const 1) ) ) - (get_local $3) + (get_local $0) ) ) (drop @@ -243,30 +231,30 @@ ) (drop (block (result i64) - (set_local $4 + (set_local $1 (get_global $unary/I) ) (set_global $unary/I (i64.add - (get_local $4) + (get_local $1) (i64.const 1) ) ) - (get_local $4) + (get_local $1) ) ) (drop (block (result i64) - (set_local $5 + (set_local $1 (get_global $unary/I) ) (set_global $unary/I (i64.sub - (get_local $5) + (get_local $1) (i64.const 1) ) ) - (get_local $5) + (get_local $1) ) ) (set_global $unary/I @@ -337,30 +325,30 @@ ) (set_global $unary/I (block (result i64) - (set_local $6 + (set_local $1 (get_global $unary/I) ) (set_global $unary/I (i64.add - (get_local $6) + (get_local $1) (i64.const 1) ) ) - (get_local $6) + (get_local $1) ) ) (set_global $unary/I (block (result i64) - (set_local $7 + (set_local $1 (get_global $unary/I) ) (set_global $unary/I (i64.sub - (get_local $7) + (get_local $1) (i64.const 1) ) ) - (get_local $7) + (get_local $1) ) ) (drop @@ -391,30 +379,30 @@ ) (drop (block (result f32) - (set_local $8 + (set_local $2 (get_global $unary/f) ) (set_global $unary/f (f32.add - (get_local $8) + (get_local $2) (f32.const 1) ) ) - (get_local $8) + (get_local $2) ) ) (drop (block (result f32) - (set_local $9 + (set_local $2 (get_global $unary/f) ) (set_global $unary/f (f32.sub - (get_local $9) + (get_local $2) (f32.const 1) ) ) - (get_local $9) + (get_local $2) ) ) (set_global $unary/f @@ -469,30 +457,30 @@ ) (set_global $unary/f (block (result f32) - (set_local $10 + (set_local $2 (get_global $unary/f) ) (set_global $unary/f (f32.add - (get_local $10) + (get_local $2) (f32.const 1) ) ) - (get_local $10) + (get_local $2) ) ) (set_global $unary/f (block (result f32) - (set_local $11 + (set_local $2 (get_global $unary/f) ) (set_global $unary/f (f32.sub - (get_local $11) + (get_local $2) (f32.const 1) ) ) - (get_local $11) + (get_local $2) ) ) (drop @@ -523,30 +511,30 @@ ) (drop (block (result f64) - (set_local $12 + (set_local $3 (get_global $unary/F) ) (set_global $unary/F (f64.add - (get_local $12) + (get_local $3) (f64.const 1) ) ) - (get_local $12) + (get_local $3) ) ) (drop (block (result f64) - (set_local $13 + (set_local $3 (get_global $unary/F) ) (set_global $unary/F (f64.sub - (get_local $13) + (get_local $3) (f64.const 1) ) ) - (get_local $13) + (get_local $3) ) ) (set_global $unary/F @@ -605,30 +593,30 @@ ) (set_global $unary/F (block (result f64) - (set_local $14 + (set_local $3 (get_global $unary/F) ) (set_global $unary/F (f64.add - (get_local $14) + (get_local $3) (f64.const 1) ) ) - (get_local $14) + (get_local $3) ) ) (set_global $unary/F (block (result f64) - (set_local $15 + (set_local $3 (get_global $unary/F) ) (set_global $unary/F (f64.sub - (get_local $15) + (get_local $3) (f64.const 1) ) ) - (get_local $15) + (get_local $3) ) ) )