aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms/Scalar/Reassociate.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2011-02-17 01:29:24 +0000
committerChris Lattner <sabre@nondot.org>2011-02-17 01:29:24 +0000
commitde1d8a544c1398cc34d4c865c5afa8b91f96316c (patch)
treeea676b34a211d99f61523687398a820ff2230913 /lib/Transforms/Scalar/Reassociate.cpp
parent5653f1f9046c6c954e6f74869ca927611c050938 (diff)
fix PR9215, preventing -reassociate from clearing nsw/nuw when
it swaps the LHS/RHS of a single binop. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125700 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms/Scalar/Reassociate.cpp')
-rw-r--r--lib/Transforms/Scalar/Reassociate.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/Transforms/Scalar/Reassociate.cpp b/lib/Transforms/Scalar/Reassociate.cpp
index 5df6f3725a..e093b52571 100644
--- a/lib/Transforms/Scalar/Reassociate.cpp
+++ b/lib/Transforms/Scalar/Reassociate.cpp
@@ -348,9 +348,10 @@ void Reassociate::RewriteExprTree(BinaryOperator *I,
I->setOperand(0, Ops[i].Op);
I->setOperand(1, Ops[i+1].Op);
- // Conservatively clear all the optional flags, which may not hold
- // after the reassociation.
- I->clearSubclassOptionalData();
+ // Clear all the optional flags, which may not hold after the
+ // reassociation if the expression involved more than just this operation.
+ if (Ops.size() != 2)
+ I->clearSubclassOptionalData();
DEBUG(dbgs() << "TO: " << *I << '\n');
MadeChange = true;