summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/I64ToI32Lowering.cpp120
-rw-r--r--src/wasm2js.h50
-rw-r--r--test/passes/flatten_i64-to-i32-lowering.txt2
-rw-r--r--test/wasm2js/block.2asm.js24
-rw-r--r--test/wasm2js/br.2asm.js25
-rw-r--r--test/wasm2js/br_if.2asm.js83
-rw-r--r--test/wasm2js/br_table.2asm.js63
-rw-r--r--test/wasm2js/br_table_temp.2asm.js63
-rw-r--r--test/wasm2js/f32.2asm.js2
-rw-r--r--test/wasm2js/f64.2asm.js2
-rw-r--r--test/wasm2js/fac.2asm.js4
-rw-r--r--test/wasm2js/float_misc.2asm.js4
-rw-r--r--test/wasm2js/func.2asm.js6
-rw-r--r--test/wasm2js/labels.2asm.js110
-rw-r--r--test/wasm2js/loop.2asm.js310
-rw-r--r--test/wasm2js/stack-modified.2asm.js10
-rw-r--r--test/wasm2js/unreachable.2asm.js28
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;
}