diff options
author | JF Bastien <github@jfbastien.com> | 2016-02-05 14:14:10 +0100 |
---|---|---|
committer | JF Bastien <github@jfbastien.com> | 2016-02-05 14:14:10 +0100 |
commit | 9cfdb12d4976e4a9fbf6d902065904ffa48bdbec (patch) | |
tree | aae2c28eb1cc465a4582208d6c713584a51a1bcf /src/wasm2asm.h | |
parent | 8f67b6e27a38c93fbca7f3c44a88889b3896952f (diff) | |
parent | 7459e5af01fbe3a8e75e73783794b4cdffda34e9 (diff) | |
download | binaryen-9cfdb12d4976e4a9fbf6d902065904ffa48bdbec.tar.gz binaryen-9cfdb12d4976e4a9fbf6d902065904ffa48bdbec.tar.bz2 binaryen-9cfdb12d4976e4a9fbf6d902065904ffa48bdbec.zip |
Merge pull request #187 from WebAssembly/select
Fix select
Diffstat (limited to 'src/wasm2asm.h')
-rw-r--r-- | src/wasm2asm.h | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/wasm2asm.h b/src/wasm2asm.h index c87e81eec..d8ac6376e 100644 --- a/src/wasm2asm.h +++ b/src/wasm2asm.h @@ -463,7 +463,7 @@ void Wasm2AsmBuilder::scanFunctionBody(Expression* curr) { } } void visitSelect(Select *curr) { - if (parent->isStatement(curr->condition) || parent->isStatement(curr->ifTrue) || parent->isStatement(curr->ifFalse)) { + if (parent->isStatement(curr->ifTrue) || parent->isStatement(curr->ifFalse) || parent->isStatement(curr->condition)) { parent->setStatement(curr); } } @@ -1057,32 +1057,32 @@ Ref Wasm2AsmBuilder::processFunctionBody(Expression* curr, IString result) { } Ref visitSelect(Select *curr) { if (isStatement(curr)) { - ScopedTemp tempCondition(i32, parent); - GetLocal fakeCondition; - fakeCondition.name = tempCondition.getName(); ScopedTemp tempIfTrue(curr->ifTrue->type, parent); GetLocal fakeLocalIfTrue; fakeLocalIfTrue.name = tempIfTrue.getName(); ScopedTemp tempIfFalse(curr->ifFalse->type, parent); GetLocal fakeLocalIfFalse; fakeLocalIfFalse.name = tempIfFalse.getName(); + ScopedTemp tempCondition(i32, parent); + GetLocal fakeCondition; + fakeCondition.name = tempCondition.getName(); Select fakeSelect = *curr; - fakeSelect.condition = &fakeCondition; fakeSelect.ifTrue = &fakeLocalIfTrue; fakeSelect.ifFalse = &fakeLocalIfFalse; - Ref ret = blockify(visitAndAssign(curr->condition, tempCondition)); - flattenAppend(ret, visitAndAssign(curr->ifTrue, tempIfTrue)); + fakeSelect.condition = &fakeCondition; + Ref ret = blockify(visitAndAssign(curr->ifTrue, tempIfTrue)); flattenAppend(ret, visitAndAssign(curr->ifFalse, tempIfFalse)); + flattenAppend(ret, visitAndAssign(curr->condition, tempCondition)); flattenAppend(ret, visitAndAssign(&fakeSelect, result)); return ret; } // normal select - Ref condition = visit(curr->condition, EXPRESSION_RESULT); Ref ifTrue = visit(curr->ifTrue, EXPRESSION_RESULT); Ref ifFalse = visit(curr->ifFalse, EXPRESSION_RESULT); - ScopedTemp tempCondition(i32, parent), - tempIfTrue(curr->type, parent), - tempIfFalse(curr->type, parent); + Ref condition = visit(curr->condition, EXPRESSION_RESULT); + ScopedTemp tempIfTrue(curr->type, parent), + tempIfFalse(curr->type, parent), + tempCondition(i32, parent); return ValueBuilder::makeSeq( ValueBuilder::makeAssign(tempCondition.getAstName(), condition), |