diff options
-rw-r--r-- | src/passes/I64ToI32Lowering.cpp | 120 | ||||
-rw-r--r-- | src/wasm2js.h | 50 | ||||
-rw-r--r-- | test/passes/flatten_i64-to-i32-lowering.txt | 2 | ||||
-rw-r--r-- | test/wasm2js/block.2asm.js | 24 | ||||
-rw-r--r-- | test/wasm2js/br.2asm.js | 25 | ||||
-rw-r--r-- | test/wasm2js/br_if.2asm.js | 83 | ||||
-rw-r--r-- | test/wasm2js/br_table.2asm.js | 63 | ||||
-rw-r--r-- | test/wasm2js/br_table_temp.2asm.js | 63 | ||||
-rw-r--r-- | test/wasm2js/f32.2asm.js | 2 | ||||
-rw-r--r-- | test/wasm2js/f64.2asm.js | 2 | ||||
-rw-r--r-- | test/wasm2js/fac.2asm.js | 4 | ||||
-rw-r--r-- | test/wasm2js/float_misc.2asm.js | 4 | ||||
-rw-r--r-- | test/wasm2js/func.2asm.js | 6 | ||||
-rw-r--r-- | test/wasm2js/labels.2asm.js | 110 | ||||
-rw-r--r-- | test/wasm2js/loop.2asm.js | 310 | ||||
-rw-r--r-- | test/wasm2js/stack-modified.2asm.js | 10 | ||||
-rw-r--r-- | test/wasm2js/unreachable.2asm.js | 28 |
17 files changed, 269 insertions, 637 deletions
diff --git a/src/passes/I64ToI32Lowering.cpp b/src/passes/I64ToI32Lowering.cpp index f16003745..731b42d3a 100644 --- a/src/passes/I64ToI32Lowering.cpp +++ b/src/passes/I64ToI32Lowering.cpp @@ -160,7 +160,6 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> { if (!builder) builder = make_unique<Builder>(*getModule()); indexMap.clear(); highBitVars.clear(); - labelHighBitVars.clear(); freeTemps.clear(); Module temp; auto* oldFunc = ModuleUtils::copyFunction(func, temp); @@ -221,124 +220,6 @@ struct I64ToI32Lowering : public WalkerPass<PostWalker<I64ToI32Lowering>> { } } - void visitBlock(Block* curr) { - if (curr->list.size() == 0) return; - if (handleUnreachable(curr)) return; - if (curr->type == i64) curr->type = i32; - auto highBitsIt = labelHighBitVars.find(curr->name); - if (!hasOutParam(curr->list.back())) { - if (highBitsIt != labelHighBitVars.end()) { - setOutParam(curr, std::move(highBitsIt->second)); - } - return; - } - TempVar lastHighBits = fetchOutParam(curr->list.back()); - if (highBitsIt == labelHighBitVars.end() || - highBitsIt->second == lastHighBits) { - setOutParam(curr, std::move(lastHighBits)); - if (highBitsIt != labelHighBitVars.end()) { - labelHighBitVars.erase(highBitsIt); - } - return; - } - TempVar highBits = std::move(highBitsIt->second); - TempVar tmp = getTemp(); - labelHighBitVars.erase(highBitsIt); - SetLocal* setLow = builder->makeSetLocal(tmp, curr->list.back()); - SetLocal* setHigh = builder->makeSetLocal( - highBits, - builder->makeGetLocal(lastHighBits, i32) - ); - GetLocal* getLow = builder->makeGetLocal(tmp, i32); - curr->list.back() = builder->blockify(setLow, setHigh, getLow); - setOutParam(curr, std::move(highBits)); - } - - void visitIf(If* curr) { - if (!hasOutParam(curr->ifTrue)) return; - assert(curr->ifFalse != nullptr && "Nullable ifFalse found"); - TempVar highBits = fetchOutParam(curr->ifTrue); - TempVar falseBits = fetchOutParam(curr->ifFalse); - TempVar tmp = getTemp(); - curr->type = i32; - curr->ifFalse = builder->blockify( - builder->makeSetLocal(tmp, curr->ifFalse), - builder->makeSetLocal( - highBits, - builder->makeGetLocal(falseBits, i32) - ), - builder->makeGetLocal(tmp, i32) - ); - setOutParam(curr, std::move(highBits)); - } - - void visitLoop(Loop* curr) { - // TODO: in flat IR, no chance for an out param - assert(labelHighBitVars.find(curr->name) == labelHighBitVars.end()); - if (curr->type != i64) return; - curr->type = i32; - setOutParam(curr, fetchOutParam(curr->body)); - } - - void visitBreak(Break* curr) { - // TODO: in flat IR, no chance for an out param - if (!hasOutParam(curr->value)) return; - assert(curr->value != nullptr); - TempVar valHighBits = fetchOutParam(curr->value); - auto blockHighBitsIt = labelHighBitVars.find(curr->name); - if (blockHighBitsIt == labelHighBitVars.end()) { - labelHighBitVars.emplace(curr->name, std::move(valHighBits)); - curr->type = i32; - return; - } - TempVar blockHighBits = std::move(blockHighBitsIt->second); - TempVar tmp = getTemp(); - SetLocal* setLow = builder->makeSetLocal(tmp, curr->value); - SetLocal* setHigh = builder->makeSetLocal( - blockHighBits, - builder->makeGetLocal(valHighBits, i32) - ); - curr->value = builder->makeGetLocal(tmp, i32); - curr->type = i32; - replaceCurrent(builder->blockify(setLow, setHigh, curr)); - } - - void visitSwitch(Switch* curr) { - // TODO: in flat IR, no chance for an out param - if (!hasOutParam(curr->value)) return; - TempVar outParam = fetchOutParam(curr->value); - TempVar tmp = getTemp(); - Expression* result = curr; - std::vector<Name> targets; - size_t blockID = 0; - auto processTarget = [&](Name target) -> Name { - auto labelIt = labelHighBitVars.find(target); - if (labelIt == labelHighBitVars.end()) { - labelHighBitVars.emplace(target, getTemp()); - labelIt = labelHighBitVars.find(target); - } - Name newLabel("$i64toi32_" + std::string(target.c_str()) + - "_" + std::to_string(blockID++)); - Block* trampoline = builder->makeBlock(newLabel, result); - trampoline->type = i32; - result = builder->blockify( - builder->makeSetLocal(tmp, trampoline), - builder->makeSetLocal( - labelIt->second, - builder->makeGetLocal(outParam, i32) - ), - builder->makeBreak(target, builder->makeGetLocal(tmp, i32)) - ); - return newLabel; - }; - for (auto target : curr->targets) { - targets.push_back(processTarget(target)); - } - curr->targets.set(targets); - curr->default_ = processTarget(curr->default_); - replaceCurrent(result); - } - template<typename T> using BuilderFunc = std::function<T*(std::vector<Expression*>&, Type)>; @@ -1615,7 +1496,6 @@ private: std::unordered_map<Index, Index> indexMap; std::unordered_map<int, std::vector<Index>> freeTemps; std::unordered_map<Expression*, TempVar> highBitVars; - std::unordered_map<Name, TempVar> labelHighBitVars; std::unordered_map<Index, Type> tempTypes; std::unordered_set<Name> originallyI64Globals; Index nextTemp; diff --git a/src/wasm2js.h b/src/wasm2js.h index b2a35d5cb..cedf3f8e3 100644 --- a/src/wasm2js.h +++ b/src/wasm2js.h @@ -136,10 +136,7 @@ public: // The second pass on an expression: process it fully, generating // JS - // @param result Whether the context we are in receives a value, - // and its type, or if not, then we can drop our return, - // if we have one. - Ref processFunctionBody(Module* m, Function* func, IString result); + Ref processFunctionBody(Module* m, Function* func); // Get a temp var. IString getTemp(Type type, Function* func) { @@ -274,6 +271,7 @@ Ref Wasm2JSBuilder::processWasm(Module* wasm, Name funcName) { runner.add("flatten"); runner.add("simplify-locals-notee-nostructure"); runner.add("reorder-locals"); + runner.add("remove-unused-names"); runner.add("vacuum"); runner.add("remove-unused-module-elements"); runner.setDebug(flags.debug); @@ -632,6 +630,7 @@ Ref Wasm2JSBuilder::processFunction(Module* m, Function* func, bool standaloneFu runner.add("flatten"); runner.add("simplify-locals-notee-nostructure"); runner.add("reorder-locals"); + runner.add("remove-unused-names"); runner.add("vacuum"); runner.runOnFunction(func); } @@ -665,7 +664,7 @@ Ref Wasm2JSBuilder::processFunction(Module* m, Function* func, bool standaloneFu size_t theVarIndex = ret[3]->size(); ret[3]->push_back(theVar); // body - flattenAppend(ret, processFunctionBody(m, func, NO_RESULT)); + flattenAppend(ret, processFunctionBody(m, func)); // vars, including new temp vars for (Index i = func->getVarIndexBase(); i < func->getNumLocals(); i++) { ValueBuilder::appendToVar( @@ -684,7 +683,7 @@ Ref Wasm2JSBuilder::processFunction(Module* m, Function* func, bool standaloneFu return ret; } -Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString result) { +Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func) { struct ExpressionProcessor : public Visitor<ExpressionProcessor, Ref> { Wasm2JSBuilder* parent; IString result; // TODO: remove @@ -741,14 +740,9 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } Ref visitAndAssign(Expression* curr, IString result) { + assert(result != NO_RESULT); Ref ret = visit(curr, result); - // if it's not already a statement, then it's an expression, and we need to assign it - // (if it is a statement, it already assigns to the result var) - if (result != NO_RESULT) { - ret = ValueBuilder::makeStatement( - ValueBuilder::makeBinary(ValueBuilder::makeName(result), SET, ret)); - } - return ret; + return ValueBuilder::makeStatement(ValueBuilder::makeBinary(ValueBuilder::makeName(result), SET, ret)); } Ref visitAndAssign(Expression* curr, ScopedTemp& temp) { @@ -768,10 +762,6 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul return ret; } - // For spooky return-at-a-distance/break-with-result, this tells us - // what the result var is for a specific label. - std::map<Name, IString> breakResults; - // Breaks to the top of a loop should be emitted as continues, to that loop's main label std::unordered_set<Name> continueLabels; @@ -782,7 +772,6 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul // Visitors Ref visitBlock(Block* curr) { - breakResults[curr->name] = result; Ref ret = ValueBuilder::makeBlock(); size_t size = curr->list.size(); auto noResults = result == NO_RESULT ? size : size-1; @@ -799,20 +788,13 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } Ref visitIf(If* curr) { - IString temp; Ref condition = visit(curr->condition, EXPRESSION_RESULT); - Ref ifTrue = ValueBuilder::makeStatement(visitAndAssign(curr->ifTrue, result)); + Ref ifTrue = visit(curr->ifTrue, NO_RESULT); Ref ifFalse; if (curr->ifFalse) { - ifFalse = ValueBuilder::makeStatement(visitAndAssign(curr->ifFalse, result)); - } - if (temp.isNull()) { - return ValueBuilder::makeIf(condition, ifTrue, ifFalse); // simple if + ifFalse = visit(curr->ifFalse, NO_RESULT); } - condition = blockify(condition); - // just add an if to the block - condition[1]->push_back(ValueBuilder::makeIf(ValueBuilder::makeName(temp), ifTrue, ifFalse)); - return condition; + return ValueBuilder::makeIf(condition, ifTrue, ifFalse); // simple if } Ref visitLoop(Loop* curr) { @@ -842,13 +824,7 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul fakeIf.ifTrue = &fakeBreak; return visit(&fakeIf, result); } - Ref theBreak = makeBreakOrContinue(curr->name); - if (!curr->value) return theBreak; - // generate the value, including assigning to the result, and then do the break - Ref ret = visitAndAssign(curr->value, breakResults[curr->name]); - ret = blockify(ret); - ret[1]->push_back(theBreak); - return ret; + return makeBreakOrContinue(curr->name); } Expression* defaultBody = nullptr; // default must be last in asm.js @@ -1141,7 +1117,7 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } Ref visitDrop(Drop* curr) { - return visitAndAssign(curr->value, result); + return visit(curr->value, NO_RESULT); } Ref visitConst(Const* curr) { @@ -1587,7 +1563,7 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } }; - return ExpressionProcessor(this, m, func).visit(func->body, result); + return ExpressionProcessor(this, m, func).visit(func->body, NO_RESULT); } void Wasm2JSBuilder::addMemoryGrowthFuncs(Ref ast, Module* wasm) { diff --git a/test/passes/flatten_i64-to-i32-lowering.txt b/test/passes/flatten_i64-to-i32-lowering.txt index 1db2481c8..52995f993 100644 --- a/test/passes/flatten_i64-to-i32-lowering.txt +++ b/test/passes/flatten_i64-to-i32-lowering.txt @@ -206,7 +206,7 @@ (local $1 i32) (local $1$hi i32) (local $i64toi32_i32$0 i32) - (block + (block $label$1 (unreachable) (unreachable) ) diff --git a/test/wasm2js/block.2asm.js b/test/wasm2js/block.2asm.js index 3bb752e61..42679297d 100644 --- a/test/wasm2js/block.2asm.js +++ b/test/wasm2js/block.2asm.js @@ -34,25 +34,19 @@ function asmFunc(global, env, buffer) { } function $3() { - block : { - dummy(); - dummy(); - dummy(); - dummy(); - } - block1 : { - dummy(); - dummy(); - dummy(); - } + dummy(); + dummy(); + dummy(); + dummy(); + dummy(); + dummy(); + dummy(); return 8 | 0; } function $4() { - block : { - dummy(); - dummy(); - } + dummy(); + dummy(); return 9 | 0; } diff --git a/test/wasm2js/br.2asm.js b/test/wasm2js/br.2asm.js index 83401094a..4bbaa885a 100644 --- a/test/wasm2js/br.2asm.js +++ b/test/wasm2js/br.2asm.js @@ -115,11 +115,8 @@ function asmFunc(global, env, buffer) { function $13() { var $0 = 0, $1_1 = 0, $3_1 = 0; block : { - loop_in : do { - $0 = 3; - break block; - break loop_in; - } while (1); + $0 = 3; + break block; } return $0 | 0; } @@ -127,12 +124,9 @@ function asmFunc(global, env, buffer) { function $14() { var $0 = 0, $1_1 = 0, $3_1 = 0; block : { - loop_in : do { - dummy(); - $0 = 4; - break block; - break loop_in; - } while (1); + dummy(); + $0 = 4; + break block; } return $0 | 0; } @@ -140,12 +134,9 @@ function asmFunc(global, env, buffer) { function $15() { var $0 = 0; block : { - loop_in : do { - dummy(); - $0 = 5; - break block; - break loop_in; - } while (1); + dummy(); + $0 = 5; + break block; } return $0 | 0; } diff --git a/test/wasm2js/br_if.2asm.js b/test/wasm2js/br_if.2asm.js index 384daedac..17619c57c 100644 --- a/test/wasm2js/br_if.2asm.js +++ b/test/wasm2js/br_if.2asm.js @@ -103,13 +103,10 @@ function asmFunc(global, env, buffer) { function $7($0) { $0 = $0 | 0; block : { - loop_in : do { - if ($0) { - break block - } - return 2 | 0; - break loop_in; - } while (1); + if ($0) { + break block + } + return 2 | 0; } return 3 | 0; } @@ -117,14 +114,11 @@ function asmFunc(global, env, buffer) { function $8($0) { $0 = $0 | 0; block : { - loop_in : do { - dummy(); - if ($0) { - break block - } - return 2 | 0; - break loop_in; - } while (1); + dummy(); + if ($0) { + break block + } + return 2 | 0; } return 4 | 0; } @@ -132,13 +126,10 @@ function asmFunc(global, env, buffer) { function $9($0) { $0 = $0 | 0; fake_return_waka123 : { - loop_in : do { - dummy(); - if ($0) { - break fake_return_waka123 - } - break loop_in; - } while (1); + dummy(); + if ($0) { + break fake_return_waka123 + } } } @@ -174,11 +165,9 @@ function asmFunc(global, env, buffer) { $0 = $0 | 0; var $2_1 = 0; block : { - block0 : { - $2_1 = 8; - if ($0) { - break block - } + $2_1 = 8; + if ($0) { + break block } $2_1 = 4 + 16 | 0; } @@ -189,11 +178,9 @@ function asmFunc(global, env, buffer) { $0 = $0 | 0; var $2_1 = 0; block : { - block1 : { - $2_1 = 8; - if ($0) { - break block - } + $2_1 = 8; + if ($0) { + break block } $2_1 = 4; break block; @@ -205,11 +192,9 @@ function asmFunc(global, env, buffer) { $0 = $0 | 0; var $2_1 = 0; block : { - block2 : { - $2_1 = 8; - if ($0) { - break block - } + $2_1 = 8; + if ($0) { + break block } $2_1 = 4; if (1) { @@ -224,11 +209,9 @@ function asmFunc(global, env, buffer) { $0 = $0 | 0; var $2_1 = 0; block : { - block3 : { - $2_1 = 8; - if ($0) { - break block - } + $2_1 = 8; + if ($0) { + break block } $2_1 = 4; if (1) { @@ -243,11 +226,9 @@ function asmFunc(global, env, buffer) { $0 = $0 | 0; var $2_1 = 0; block : { - block4 : { - $2_1 = 8; - if ($0) { - break block - } + $2_1 = 8; + if ($0) { + break block } $2_1 = 4; switch (1 | 0) { @@ -262,11 +243,9 @@ function asmFunc(global, env, buffer) { $0 = $0 | 0; var $2_1 = 0; block : { - block5 : { - $2_1 = 8; - if ($0) { - break block - } + $2_1 = 8; + if ($0) { + break block } $2_1 = 4; switch (1 | 0) { diff --git a/test/wasm2js/br_table.2asm.js b/test/wasm2js/br_table.2asm.js index 849d11945..4140f5f0b 100644 --- a/test/wasm2js/br_table.2asm.js +++ b/test/wasm2js/br_table.2asm.js @@ -49528,16 +49528,13 @@ function asmFunc(global, env, buffer) { function $20() { var $1_1 = 0, $2_1 = 0, $4_1 = 0; fake_return_waka123 : { - loop_in : do { - $1_1 = 3; - switch (0 | 0) { - case 0: - break fake_return_waka123; - default: - break fake_return_waka123; - }; - break loop_in; - } while (1); + $1_1 = 3; + switch (0 | 0) { + case 0: + break fake_return_waka123; + default: + break fake_return_waka123; + }; } return $1_1 | 0; } @@ -49545,19 +49542,16 @@ function asmFunc(global, env, buffer) { function $21() { var $1_1 = 0, $2_1 = 0, $4_1 = 0; fake_return_waka123 : { - loop_in : do { - dummy(); - $1_1 = 4; - switch (4294967295 | 0) { - case 0: - break fake_return_waka123; - case 1: - break fake_return_waka123; - default: - break fake_return_waka123; - }; - break loop_in; - } while (1); + dummy(); + $1_1 = 4; + switch (4294967295 | 0) { + case 0: + break fake_return_waka123; + case 1: + break fake_return_waka123; + default: + break fake_return_waka123; + }; } return $1_1 | 0; } @@ -49565,19 +49559,16 @@ function asmFunc(global, env, buffer) { function $22() { var $1_1 = 0; fake_return_waka123 : { - loop_in : do { - dummy(); - $1_1 = 5; - switch (1 | 0) { - case 0: - break fake_return_waka123; - case 1: - break fake_return_waka123; - default: - break fake_return_waka123; - }; - break loop_in; - } while (1); + dummy(); + $1_1 = 5; + switch (1 | 0) { + case 0: + break fake_return_waka123; + case 1: + break fake_return_waka123; + default: + break fake_return_waka123; + }; } return $1_1 | 0; } diff --git a/test/wasm2js/br_table_temp.2asm.js b/test/wasm2js/br_table_temp.2asm.js index a5f423d22..3fee5345d 100644 --- a/test/wasm2js/br_table_temp.2asm.js +++ b/test/wasm2js/br_table_temp.2asm.js @@ -49524,16 +49524,13 @@ function asmFunc(global, env, buffer) { function $20() { var $1_1 = 0, $2_1 = 0, $4_1 = 0; fake_return_waka123 : { - loop_in : do { - $1_1 = 3; - switch (0 | 0) { - case 0: - break fake_return_waka123; - default: - break fake_return_waka123; - }; - break loop_in; - } while (1); + $1_1 = 3; + switch (0 | 0) { + case 0: + break fake_return_waka123; + default: + break fake_return_waka123; + }; } return $1_1 | 0; } @@ -49541,19 +49538,16 @@ function asmFunc(global, env, buffer) { function $21() { var $1_1 = 0, $2_1 = 0, $4_1 = 0; fake_return_waka123 : { - loop_in : do { - dummy(); - $1_1 = 4; - switch (4294967295 | 0) { - case 0: - break fake_return_waka123; - case 1: - break fake_return_waka123; - default: - break fake_return_waka123; - }; - break loop_in; - } while (1); + dummy(); + $1_1 = 4; + switch (4294967295 | 0) { + case 0: + break fake_return_waka123; + case 1: + break fake_return_waka123; + default: + break fake_return_waka123; + }; } return $1_1 | 0; } @@ -49561,19 +49555,16 @@ function asmFunc(global, env, buffer) { function $22() { var $1_1 = 0; fake_return_waka123 : { - loop_in : do { - dummy(); - $1_1 = 5; - switch (1 | 0) { - case 0: - break fake_return_waka123; - case 1: - break fake_return_waka123; - default: - break fake_return_waka123; - }; - break loop_in; - } while (1); + dummy(); + $1_1 = 5; + switch (1 | 0) { + case 0: + break fake_return_waka123; + case 1: + break fake_return_waka123; + default: + break fake_return_waka123; + }; } return $1_1 | 0; } diff --git a/test/wasm2js/f32.2asm.js b/test/wasm2js/f32.2asm.js index cd53439c3..c6ee933ca 100644 --- a/test/wasm2js/f32.2asm.js +++ b/test/wasm2js/f32.2asm.js @@ -203,7 +203,7 @@ function asmFunc(global, env, buffer) { var$1 = Math_fround(Math_floor(var$0)); var$2 = Math_fround(var$0 - var$1); if ((var$2 < Math_fround(.5) | 0) == (0 | 0)) { - block : { + { var$0 = Math_fround(Math_ceil(var$0)); if (var$2 > Math_fround(.5)) { return Math_fround(var$0) diff --git a/test/wasm2js/f64.2asm.js b/test/wasm2js/f64.2asm.js index c390bee9f..48c27e3a8 100644 --- a/test/wasm2js/f64.2asm.js +++ b/test/wasm2js/f64.2asm.js @@ -150,7 +150,7 @@ function asmFunc(global, env, buffer) { var$1 = Math_floor(var$0); var$2 = var$0 - var$1; if ((var$2 < .5 | 0) == (0 | 0)) { - block : { + { var$0 = Math_ceil(var$0); if (var$2 > .5) { return +var$0 diff --git a/test/wasm2js/fac.2asm.js b/test/wasm2js/fac.2asm.js index 875a11f04..65f86eb41 100644 --- a/test/wasm2js/fac.2asm.js +++ b/test/wasm2js/fac.2asm.js @@ -113,7 +113,7 @@ function asmFunc(global, env, buffer) { if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break block } else { - block0 : { + { i64toi32_i32$2 = $1$hi; i64toi32_i32$2 = $2$hi; i64toi32_i32$2 = $1$hi; @@ -161,7 +161,7 @@ function asmFunc(global, env, buffer) { if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break done } else { - block : { + { i64toi32_i32$2 = i$hi; i64toi32_i32$2 = res$hi; i64toi32_i32$2 = i$hi; diff --git a/test/wasm2js/float_misc.2asm.js b/test/wasm2js/float_misc.2asm.js index 70336da90..eba9eea17 100644 --- a/test/wasm2js/float_misc.2asm.js +++ b/test/wasm2js/float_misc.2asm.js @@ -312,7 +312,7 @@ function asmFunc(global, env, buffer) { var$1 = Math_fround(Math_floor(var$0)); var$2 = Math_fround(var$0 - var$1); if ((var$2 < Math_fround(.5) | 0) == (0 | 0)) { - block : { + { var$0 = Math_fround(Math_ceil(var$0)); if (var$2 > Math_fround(.5)) { return Math_fround(var$0) @@ -330,7 +330,7 @@ function asmFunc(global, env, buffer) { var$1 = Math_floor(var$0); var$2 = var$0 - var$1; if ((var$2 < .5 | 0) == (0 | 0)) { - block : { + { var$0 = Math_ceil(var$0); if (var$2 > .5) { return +var$0 diff --git a/test/wasm2js/func.2asm.js b/test/wasm2js/func.2asm.js index d40854bb6..294f5efcf 100644 --- a/test/wasm2js/func.2asm.js +++ b/test/wasm2js/func.2asm.js @@ -183,10 +183,8 @@ function asmFunc(global, env, buffer) { } function $47() { - block : { - dummy(); - dummy(); - } + dummy(); + dummy(); } function $48() { diff --git a/test/wasm2js/labels.2asm.js b/test/wasm2js/labels.2asm.js index 7d1cc825d..761562e66 100644 --- a/test/wasm2js/labels.2asm.js +++ b/test/wasm2js/labels.2asm.js @@ -76,16 +76,13 @@ function asmFunc(global, env, buffer) { var i = 0, $6_1 = 0; i = 0; exit : { - cont : do { - i = i + 1 | 0; - if ((i | 0) == (5 | 0)) { - { - $6_1 = i; - break exit; - } + i = i + 1 | 0; + if ((i | 0) == (5 | 0)) { + { + $6_1 = i; + break exit; } - break cont; - } while (1); + } $6_1 = i; } return $6_1 | 0; @@ -113,66 +110,59 @@ function asmFunc(global, env, buffer) { function $5() { var $0_1 = 0; - l : do { - $0_1 = 1; - break l; - } while (1); + $0_1 = 1; return $0_1 + 1 | 0 | 0; } function $6() { var i = 0; i = 0; - block_1 : { - l : { - break l; - } - i = i + 1 | 0; - l1 : { - break l1; - } - i = i + 1 | 0; - l2 : { - break l2; - } - i = i + 1 | 0; - l3 : { - break l3; - } - i = i + 1 | 0; - l4 : { - break l4; - } - i = i + 1 | 0; + l : { + break l; + } + i = i + 1 | 0; + l1 : { + break l1; + } + i = i + 1 | 0; + l2 : { + break l2; } + i = i + 1 | 0; + l3 : { + break l3; + } + i = i + 1 | 0; + l4 : { + break l4; + } + i = i + 1 | 0; return i | 0; } function $7() { var i = 0; i = 0; - block_1 : { - if_1 : { - break if_1; - } - i = i + 1 | 0; - if5 : { - break if5; - } - i = i + 1 | 0; - if6 : { - break if6; - } - i = i + 1 | 0; - if7 : { - break if7; - } - i = i + 1 | 0; - if8 : { - break if8; - } - i = i + 1 | 0; + if_1 : { + break if_1; } + i = i + 1 | 0; + if5 : { + break if5; + } + i = i + 1 | 0; + if6 : { + break if6; + } + i = i + 1 | 0; + if7 : { + break if7; + } + i = i + 1 | 0; + if8 : { + break if8; + } + i = i + 1 | 0; return i | 0; } @@ -329,12 +319,10 @@ function asmFunc(global, env, buffer) { function $16() { var $1_2 = 0, $2_2 = 0; - l1 : { - $1_2 = 2; - l113 : { - $2_2 = 3; - break l113; - } + $1_2 = 2; + l113 : { + $2_2 = 3; + break l113; } return $1_2 + $2_2 | 0 | 0; } diff --git a/test/wasm2js/loop.2asm.js b/test/wasm2js/loop.2asm.js index 0a540328f..3d71ffb2d 100644 --- a/test/wasm2js/loop.2asm.js +++ b/test/wasm2js/loop.2asm.js @@ -34,191 +34,89 @@ function asmFunc(global, env, buffer) { function $2() { var $0 = 0; - loop_in0 : do { - $0 = 7; - break loop_in0; - } while (1); + $0 = 7; return $0 | 0; } function $3() { var $2_1 = 0; - loop_in : do { - dummy(); - dummy(); - dummy(); - dummy(); - break loop_in; - } while (1); - loop_in1 : do { - dummy(); - dummy(); - dummy(); - $2_1 = 8; - break loop_in1; - } while (1); + dummy(); + dummy(); + dummy(); + dummy(); + dummy(); + dummy(); + dummy(); + $2_1 = 8; return $2_1 | 0; } function $4() { var $2_1 = 0; - loop_in : do { - loop_in2 : do { - dummy(); - break loop_in2; - } while (1); - loop_in3 : do { - dummy(); - $2_1 = 9; - break loop_in3; - } while (1); - break loop_in; - } while (1); + dummy(); + dummy(); + $2_1 = 9; return $2_1 | 0; } function $5() { var $2_1 = 0, $6_1 = 0, $10_1 = 0, $14_1 = 0, $18_1 = 0, $22 = 0, $26 = 0, $30 = 0, $34 = 0, $38 = 0, $42 = 0, $46 = 0, $50 = 0, $54 = 0, $58 = 0, $62 = 0, $66 = 0, $70 = 0, $74 = 0, $78 = 0, $82 = 0; - loop_in : do { - loop_in4 : do { - loop_in6 : do { - loop_in8 : do { - loop_in10 : do { - loop_in12 : do { - loop_in14 : do { - loop_in16 : do { - loop_in18 : do { - loop_in20 : do { - loop_in22 : do { - loop_in24 : do { - loop_in26 : do { - loop_in28 : do { - loop_in30 : do { - loop_in32 : do { - loop_in34 : do { - loop_in36 : do { - loop_in38 : do { - loop_in40 : do { - loop_in42 : do { - loop_in44 : do { - dummy(); - $2_1 = 150; - break loop_in44; - } while (1); - $6_1 = $2_1; - break loop_in42; - } while (1); - $10_1 = $6_1; - break loop_in40; - } while (1); - $14_1 = $10_1; - break loop_in38; - } while (1); - $18_1 = $14_1; - break loop_in36; - } while (1); - $22 = $18_1; - break loop_in34; - } while (1); - $26 = $22; - break loop_in32; - } while (1); - $30 = $26; - break loop_in30; - } while (1); - $34 = $30; - break loop_in28; - } while (1); - $38 = $34; - break loop_in26; - } while (1); - $42 = $38; - break loop_in24; - } while (1); - $46 = $42; - break loop_in22; - } while (1); - $50 = $46; - break loop_in20; - } while (1); - $54 = $50; - break loop_in18; - } while (1); - $58 = $54; - break loop_in16; - } while (1); - $62 = $58; - break loop_in14; - } while (1); - $66 = $62; - break loop_in12; - } while (1); - $70 = $66; - break loop_in10; - } while (1); - $74 = $70; - break loop_in8; - } while (1); - $78 = $74; - break loop_in6; - } while (1); - $82 = $78; - break loop_in4; - } while (1); - break loop_in; - } while (1); + dummy(); + $2_1 = 150; + $6_1 = $2_1; + $10_1 = $6_1; + $14_1 = $10_1; + $18_1 = $14_1; + $22 = $18_1; + $26 = $22; + $30 = $26; + $34 = $30; + $38 = $34; + $42 = $38; + $46 = $42; + $50 = $46; + $54 = $50; + $58 = $54; + $62 = $58; + $66 = $62; + $70 = $66; + $74 = $70; + $78 = $74; + $82 = $78; return $82 | 0; } function $6() { var $2_1 = 0; - loop_in : do { - dummy(); - $2_1 = 13; - break loop_in; - } while (1); + dummy(); + $2_1 = 13; return __wasm_ctz_i32($2_1 | 0) | 0 | 0; } function $7() { var $2_1 = 0, $3_1 = 0, $6_1 = 0; - loop_in : do { - dummy(); - $2_1 = 3; - break loop_in; - } while (1); + dummy(); + $2_1 = 3; $3_1 = $2_1; - loop_in46 : do { - dummy(); - $6_1 = 4; - break loop_in46; - } while (1); + dummy(); + $6_1 = 4; return Math_imul($3_1, $6_1) | 0; } function $8() { var $2_1 = 0; - loop_in : do { - dummy(); - $2_1 = 13; - break loop_in; - } while (1); + dummy(); + $2_1 = 13; return ($2_1 | 0) == (0 | 0) | 0; } function $9() { var $2_1 = Math_fround(0), $3_1 = Math_fround(0), $6_1 = Math_fround(0); - loop_in : do { - dummy(); - $2_1 = Math_fround(3.0); - break loop_in; - } while (1); + dummy(); + $2_1 = Math_fround(3.0); $3_1 = $2_1; - loop_in47 : do { - dummy(); - $6_1 = Math_fround(3.0); - break loop_in47; - } while (1); + dummy(); + $6_1 = Math_fround(3.0); return $3_1 > $6_1 | 0; } @@ -230,35 +128,26 @@ function asmFunc(global, env, buffer) { } while (1); } block48 : { - loop_in49 : do { - if (1) { - break block48 - } - abort(); - break loop_in49; - } while (1); + if (1) { + break block48 + } + abort(); } block50 : { - loop_in51 : do { - switch (0 | 0) { - default: - break block50; - }; - break loop_in51; - } while (1); + switch (0 | 0) { + default: + break block50; + }; } block52 : { - loop_in53 : do { - switch (1 | 0) { - case 0: - break block52; - case 1: - break block52; - default: - break block52; - }; - break loop_in53; - } while (1); + switch (1 | 0) { + case 0: + break block52; + case 1: + break block52; + default: + break block52; + }; } return 19 | 0; } @@ -278,11 +167,8 @@ function asmFunc(global, env, buffer) { function $12() { var $0 = 0, $5_1 = 0, $7_1 = 0; block : { - loop_in : do { - $0 = 18; - break block; - break loop_in; - } while (1); + $0 = 18; + break block; } return $0 | 0; } @@ -292,57 +178,33 @@ function asmFunc(global, env, buffer) { $0 = 0; $1_1 = $0; block : { - loop_in : do { - $2_1 = 1; - break block; - break loop_in; - } while (1); + $2_1 = 1; + break block; } $0 = $1_1 + $2_1 | 0; $5_1 = $0; block55 : { - loop_in56 : do { - loop_in57 : do { - $6_1 = 2; - break block55; - break loop_in57; - } while (1); - break loop_in56; - } while (1); + $6_1 = 2; + break block55; } $0 = $5_1 + $6_1 | 0; $9_1 = $0; - loop_in59 : do { - block60 : { - loop_in61 : do { - $10_1 = 4; - break block60; - break loop_in61; - } while (1); - } - $12_1 = $10_1; - break loop_in59; - } while (1); + block60 : { + $10_1 = 4; + break block60; + } + $12_1 = $10_1; $0 = $9_1 + $12_1 | 0; $17_1 = $0; block62 : { - loop_in63 : do { - $18_1 = 8; - break block62; - break loop_in63; - } while (1); + $18_1 = 8; + break block62; } $0 = $17_1 + $18_1 | 0; $21 = $0; block64 : { - loop_in65 : do { - loop_in66 : do { - $22 = 16; - break block64; - break loop_in66; - } while (1); - break loop_in65; - } while (1); + $22 = 16; + break block64; } $0 = $21 + $22 | 0; return $0 | 0; @@ -353,10 +215,7 @@ function asmFunc(global, env, buffer) { $0 = 0; $1_1 = $0; loop_in : do { - loop_in67 : do { - continue loop_in; - break loop_in67; - } while (1); + continue loop_in; break loop_in; } while (1); } @@ -364,14 +223,11 @@ function asmFunc(global, env, buffer) { function fx() { var $0 = 0; block : { - loop_in : do { - $0 = 1; - $0 = Math_imul($0, 3); - $0 = $0 - 5 | 0; - $0 = Math_imul($0, 7); - break block; - break loop_in; - } while (1); + $0 = 1; + $0 = Math_imul($0, 3); + $0 = $0 - 5 | 0; + $0 = Math_imul($0, 7); + break block; } return ($0 | 0) == (4294967282 | 0) | 0; } diff --git a/test/wasm2js/stack-modified.2asm.js b/test/wasm2js/stack-modified.2asm.js index defb8f461..a8d8b6b18 100644 --- a/test/wasm2js/stack-modified.2asm.js +++ b/test/wasm2js/stack-modified.2asm.js @@ -43,7 +43,7 @@ function asmFunc(global, env, buffer) { if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break label$1 } else { - label$5 : { + { i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$2$hi; i64toi32_i32$2 = var$1$hi; @@ -91,7 +91,7 @@ function asmFunc(global, env, buffer) { if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break label$1 } else { - block : { + { i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$2$hi; i64toi32_i32$2 = var$1$hi; @@ -139,7 +139,7 @@ function asmFunc(global, env, buffer) { if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break label$1 } else { - block : { + { i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$2$hi; i64toi32_i32$2 = var$1$hi; @@ -187,7 +187,7 @@ function asmFunc(global, env, buffer) { if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break label$1 } else { - block : { + { i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$2$hi; i64toi32_i32$2 = var$1$hi; @@ -235,7 +235,7 @@ function asmFunc(global, env, buffer) { if ((i64toi32_i32$2 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$0 | 0) == (i64toi32_i32$1 | 0) | 0) { break label$1 } else { - block : { + { i64toi32_i32$2 = var$1$hi; i64toi32_i32$2 = var$2$hi; i64toi32_i32$2 = var$1$hi; diff --git a/test/wasm2js/unreachable.2asm.js b/test/wasm2js/unreachable.2asm.js index 2f5e007b7..e021ae66c 100644 --- a/test/wasm2js/unreachable.2asm.js +++ b/test/wasm2js/unreachable.2asm.js @@ -104,38 +104,26 @@ function asmFunc(global, env, buffer) { function $15() { var $0 = 0, $2_1 = 0; - loop_in : do { - abort(); - break loop_in; - } while (1); + abort(); } function $16() { var $0 = 0, $2_1 = 0; - loop_in : do { - dummy(); - abort(); - break loop_in; - } while (1); + dummy(); + abort(); } function $17() { - loop_in : do { - dummy(); - abort(); - break loop_in; - } while (1); + dummy(); + abort(); } function $18() { var $0 = 0; block : { - loop_in : do { - dummy(); - $0 = 1; - break block; - break loop_in; - } while (1); + dummy(); + $0 = 1; + break block; } return $0 | 0; } |