Add 'landingpad' instructions to the list of instructions to ignore.
authorBill Wendling <isanbard@gmail.com>
Fri, 4 May 2012 04:22:32 +0000 (04:22 +0000)
committerBill Wendling <isanbard@gmail.com>
Fri, 4 May 2012 04:22:32 +0000 (04:22 +0000)
Also combine the code in the 'assert' statement.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156155 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/Reassociate.cpp

index 577a143e9a01353a2076d2feb10db71836fc5531..cc98ba0f21c57b7accd22ae73586499c90f081f2 100644 (file)
@@ -175,6 +175,7 @@ void Reassociate::RemoveDeadBinaryOp(Value *V) {
 
 static bool isUnmovableInstruction(Instruction *I) {
   if (I->getOpcode() == Instruction::PHI ||
+      I->getOpcode() == Instruction::LandingPad ||
       I->getOpcode() == Instruction::Alloca ||
       I->getOpcode() == Instruction::Load ||
       I->getOpcode() == Instruction::Invoke ||
@@ -272,13 +273,14 @@ static Instruction *LowerNegateToMultiply(Instruction *Neg,
 // linearize it as well.  Besides that case, this does not recurse into A,B, or
 // C.
 void Reassociate::LinearizeExpr(BinaryOperator *I) {
-  BinaryOperator *LHS = cast<BinaryOperator>(I->getOperand(0));
-  BinaryOperator *RHS = cast<BinaryOperator>(I->getOperand(1));
-  assert(isReassociableOp(LHS, I->getOpcode()) &&
-         isReassociableOp(RHS, I->getOpcode()) &&
-         "Not an expression that needs linearization?");
-
-  DEBUG(dbgs() << "Linear" << *LHS << '\n' << *RHS << '\n' << *I << '\n');
+  BinaryOperator *LHS = isReassociableOp(I->getOperand(0), I->getOpcode());
+  BinaryOperator *RHS = isReassociableOp(I->getOperand(1), I->getOpcode());
+  assert(LHS && RHS && "Not an expression that needs linearization?");
+
+  DEBUG({
+      dbgs() << "Linear:\n";
+      dbgs() << '\t' << *LHS << "\t\n" << *RHS << "\t\n" << *I << '\n';
+    });
 
   // Move the RHS instruction to live immediately before I, avoiding breaking
   // dominator properties.