diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-09-21 19:33:11 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-09-21 19:33:11 -0700 |
commit | 8be82627c6a8cbded0dab67ad1f31906a54ba78c (patch) | |
tree | b7b14f1899ffe39a7562007474a58948685146c8 /src/passes/RemoveUnusedBrs.cpp | |
parent | 7292ef9c863a0766c697cc0a77516447ff652820 (diff) | |
parent | 740e36eab98d679387fea60cd642591a69ce809f (diff) | |
download | binaryen-8be82627c6a8cbded0dab67ad1f31906a54ba78c.tar.gz binaryen-8be82627c6a8cbded0dab67ad1f31906a54ba78c.tar.bz2 binaryen-8be82627c6a8cbded0dab67ad1f31906a54ba78c.zip |
Merge pull request #703 from WebAssembly/spec-update
Spec update - get us passing the 0xc spec tests (minus stacky stuff)
Diffstat (limited to 'src/passes/RemoveUnusedBrs.cpp')
-rw-r--r-- | src/passes/RemoveUnusedBrs.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/src/passes/RemoveUnusedBrs.cpp b/src/passes/RemoveUnusedBrs.cpp index fa8ab2f6c..15482de25 100644 --- a/src/passes/RemoveUnusedBrs.cpp +++ b/src/passes/RemoveUnusedBrs.cpp @@ -146,11 +146,10 @@ struct RemoveUnusedBrs : public WalkerPass<PostWalker<RemoveUnusedBrs, Visitor<R // if without an else. try to reduce if (condition) br => br_if (condition) Break* br = curr->ifTrue->dynCast<Break>(); if (br && !br->condition) { // TODO: if there is a condition, join them - // if the br has a value, then if => br_if means we always execute the value, and also the order is value,condition vs condition,value if (canTurnIfIntoBrIf(curr->condition, br->value)) { br->condition = curr->condition; br->finalize(); - replaceCurrent(br); + replaceCurrent(Builder(*getModule()).dropIfConcretelyTyped(br)); anotherCycle = true; } } @@ -407,18 +406,18 @@ struct RemoveUnusedBrs : public WalkerPass<PostWalker<RemoveUnusedBrs, Visitor<R auto* ifTrueBreak = iff->ifTrue->dynCast<Break>(); if (ifTrueBreak && !ifTrueBreak->condition && canTurnIfIntoBrIf(iff->condition, ifTrueBreak->value)) { // we are an if-else where the ifTrue is a break without a condition, so we can do this - list[i] = ifTrueBreak; ifTrueBreak->condition = iff->condition; ifTrueBreak->finalize(); + list[i] = Builder(*getModule()).dropIfConcretelyTyped(ifTrueBreak); ExpressionManipulator::spliceIntoBlock(curr, i + 1, iff->ifFalse); continue; } // otherwise, perhaps we can flip the if auto* ifFalseBreak = iff->ifFalse->dynCast<Break>(); if (ifFalseBreak && !ifFalseBreak->condition && canTurnIfIntoBrIf(iff->condition, ifFalseBreak->value)) { - list[i] = ifFalseBreak; ifFalseBreak->condition = Builder(*getModule()).makeUnary(EqZInt32, iff->condition); ifFalseBreak->finalize(); + list[i] = Builder(*getModule()).dropIfConcretelyTyped(ifFalseBreak); ExpressionManipulator::spliceIntoBlock(curr, i + 1, iff->ifTrue); continue; } |