Lift a cheap early exit test above loops and other complex early exit
[oota-llvm.git] / lib / Transforms / Utils / SimplifyCFG.cpp
index 21d156d1cc613e5dfd90050ccc36112c2feb1128..fc84c4ab28ff3d8db3da3d7a511aebb8eb9f8616 100644 (file)
@@ -1370,6 +1370,11 @@ static bool SinkThenElseCodeToEnd(BranchInst *BI1) {
 ///
 /// \returns true if the conditional block is removed.
 static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *BB1) {
+  // Be conservative for now. FP select instruction can often be expensive.
+  Value *BrCond = BI->getCondition();
+  if (isa<FCmpInst>(BrCond))
+    return false;
+
   // Only speculatively execution a single instruction (not counting the
   // terminator) for now.
   Instruction *HInst = NULL;
@@ -1409,11 +1414,6 @@ static bool SpeculativelyExecuteBB(BranchInst *BI, BasicBlock *BB1) {
     }
   }
 
-  // Be conservative for now. FP select instruction can often be expensive.
-  Value *BrCond = BI->getCondition();
-  if (isa<FCmpInst>(BrCond))
-    return false;
-
   // If BB1 is actually on the false edge of the conditional branch, remember
   // to swap the select operands later.
   bool Invert = false;