inline a function, making the result much simpler.
authorChris Lattner <sabre@nondot.org>
Mon, 13 Dec 2010 04:15:19 +0000 (04:15 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 13 Dec 2010 04:15:19 +0000 (04:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121675 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Utils/SimplifyCFG.cpp

index 68f6905d4b545392ddfa911a558b155da71a2f56..d3181b138a77e88f326da8afa56753a286312c25 100644 (file)
@@ -347,31 +347,6 @@ GatherConstantSetNEs(Value *V, std::vector<ConstantInt*> &Values,
   return 0;
 }
 
-/// GatherValueComparisons - If the specified Cond is an 'and' or 'or' of a
-/// bunch of comparisons of one value against constants, return the value and
-/// the constants being compared.
-static bool GatherValueComparisons(Value *CondV, Value *&CompVal,
-                                   std::vector<ConstantInt*> &Values,
-                                   const TargetData *TD) {
-  Instruction *Cond = dyn_cast<Instruction>(CondV);
-  if (Cond == 0) return false;
-  
-  if (Cond->getOpcode() == Instruction::Or) {
-    CompVal = GatherConstantSetEQs(Cond, Values, TD);
-
-    // Return true to indicate that the condition is true if the CompVal is
-    // equal to one of the constants.
-    return true;
-  }
-  if (Cond->getOpcode() == Instruction::And) {
-    CompVal = GatherConstantSetNEs(Cond, Values, TD);
-
-    // Return false to indicate that the condition is false if the CompVal is
-    // equal to one of the constants.
-    return false;
-  }
-  return false;
-}
 
 static void EraseTerminatorInstAndDCECond(TerminatorInst *TI) {
   Instruction* Cond = 0;
@@ -2096,8 +2071,17 @@ bool SimplifyCFGOpt::run(BasicBlock *BB) {
       // 'setne's and'ed together, collect them.
       Value *CompVal = 0;
       std::vector<ConstantInt*> Values;
-      bool TrueWhenEqual = GatherValueComparisons(BI->getCondition(), CompVal,
-                                                  Values, TD);
+      bool TrueWhenEqual = true;
+      
+      if (Instruction *Cond = dyn_cast<Instruction>(BI->getCondition())) {
+        if (Cond->getOpcode() == Instruction::Or) {
+          CompVal = GatherConstantSetEQs(Cond, Values, TD);
+        } else if (Cond->getOpcode() == Instruction::And) {
+          CompVal = GatherConstantSetNEs(Cond, Values, TD);
+          TrueWhenEqual = false;
+        }
+      }
+
       if (CompVal) {
         // There might be duplicate constants in the list, which the switch
         // instruction can't handle, remove them now.