Simplify logic further.
authorNick Lewycky <nicholas@mxc.ca>
Tue, 3 Oct 2006 17:36:01 +0000 (17:36 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Tue, 3 Oct 2006 17:36:01 +0000 (17:36 +0000)
Ensure that we copy KnownProperties before calling visitBasicBlock, else
we may leak properties into blocks where they don't belong.

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

lib/Transforms/Scalar/PredicateSimplifier.cpp

index 99832907998336f3c7815ade1560ad4fb8863acb..2a7d779e7045368ee531e185bb1767d01b7f797a 100644 (file)
@@ -650,31 +650,22 @@ void PredicateSimplifier::visit(BranchInst *BI, PropertySet &KP) {
   BasicBlock *TrueDest  = BI->getSuccessor(0),
              *FalseDest = BI->getSuccessor(1);
 
-  if (Condition == ConstantBool::getTrue() || TrueDest == FalseDest) {
-    proceedToSuccessors(KP, BB);
-    return;
-  } else if (Condition == ConstantBool::getFalse()) {
+  if (isa<ConstantBool>(Condition) || TrueDest == FalseDest) {
     proceedToSuccessors(KP, BB);
     return;
   }
 
   DTNodeType *Node = DT->getNode(BB);
   for (DTNodeType::iterator I = Node->begin(), E = Node->end(); I != E; ++I) {
-    if ((*I)->getBlock() == TrueDest) {
-      PropertySet TrueProperties(KP);
-      TrueProperties.addEqual(ConstantBool::getTrue(), Condition);
-      visitBasicBlock(TrueDest, TrueProperties);
-      continue;
-    }
+    BasicBlock *Dest = (*I)->getBlock();
+    PropertySet DestProperties(KP);
 
-    if ((*I)->getBlock() == FalseDest) {
-      PropertySet FalseProperties(KP);
-      FalseProperties.addEqual(ConstantBool::getFalse(), Condition);
-      visitBasicBlock(FalseDest, FalseProperties);
-      continue;
-    }
+    if (Dest == TrueDest)
+      DestProperties.addEqual(ConstantBool::getTrue(), Condition);
+    else if (Dest == FalseDest)
+      DestProperties.addEqual(ConstantBool::getFalse(), Condition);
 
-    visitBasicBlock((*I)->getBlock(), KP);
+    visitBasicBlock(Dest, DestProperties);
   }
 }