aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Transforms/Scalar/Reassociate.cpp
diff options
context:
space:
mode:
authorChad Rosier <mcrosier@codeaurora.org>2014-11-17 16:33:50 +0000
committerChad Rosier <mcrosier@codeaurora.org>2014-11-17 16:33:50 +0000
commitbc0b869be9827992cd1aef3812b81825ab1dca1b (patch)
treecd9c537ed9c90e7c6676b0bf36bd0836c524fe65 /llvm/lib/Transforms/Scalar/Reassociate.cpp
parent7de210bd5246cb45a601d6c85645838f7585d70d (diff)
downloadllvm-bc0b869be9827992cd1aef3812b81825ab1dca1b.zip
llvm-bc0b869be9827992cd1aef3812b81825ab1dca1b.tar.gz
llvm-bc0b869be9827992cd1aef3812b81825ab1dca1b.tar.bz2
[Reassociate] As the expression tree is rewritten make sure the operands are
emitted in canonical form. llvm-svn: 222142
Diffstat (limited to 'llvm/lib/Transforms/Scalar/Reassociate.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/Reassociate.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/llvm/lib/Transforms/Scalar/Reassociate.cpp b/llvm/lib/Transforms/Scalar/Reassociate.cpp
index abe7f28..04e7240 100644
--- a/llvm/lib/Transforms/Scalar/Reassociate.cpp
+++ b/llvm/lib/Transforms/Scalar/Reassociate.cpp
@@ -791,14 +791,11 @@ void Reassociate::RewriteExprTree(BinaryOperator *I,
Value *OldLHS = Op->getOperand(0);
Value *OldRHS = Op->getOperand(1);
- if (NewLHS == OldLHS && NewRHS == OldRHS)
- // Nothing changed, leave it alone.
- break;
-
- if (NewLHS == OldRHS && NewRHS == OldLHS) {
- // The order of the operands was reversed. Swap them.
+ // The new operation differs trivially from the original.
+ if ((NewLHS == OldLHS && NewRHS == OldRHS) ||
+ (NewLHS == OldRHS && NewRHS == OldLHS)) {
DEBUG(dbgs() << "RA: " << *Op << '\n');
- Op->swapOperands();
+ canonicalizeOperands(Op);
DEBUG(dbgs() << "TO: " << *Op << '\n');
MadeChange = true;
++NumChanged;
@@ -820,6 +817,8 @@ void Reassociate::RewriteExprTree(BinaryOperator *I,
NodesToRewrite.push_back(BO);
Op->setOperand(1, NewRHS);
}
+ // Put the operands in canonical form.
+ canonicalizeOperands(Op);
DEBUG(dbgs() << "TO: " << *Op << '\n');
ExpressionChanged = Op;
@@ -856,6 +855,7 @@ void Reassociate::RewriteExprTree(BinaryOperator *I,
// into it.
BinaryOperator *BO = isReassociableOp(Op->getOperand(0), Opcode);
if (BO && !NotRewritable.count(BO)) {
+ canonicalizeOperands(Op);
Op = BO;
continue;
}
@@ -880,6 +880,7 @@ void Reassociate::RewriteExprTree(BinaryOperator *I,
DEBUG(dbgs() << "RA: " << *Op << '\n');
Op->setOperand(0, NewOp);
+ canonicalizeOperands(Op);
DEBUG(dbgs() << "TO: " << *Op << '\n');
ExpressionChanged = Op;
MadeChange = true;