[llvm-commits] CVS: llvm/lib/CodeGen/IfConversion.cpp

Evan Cheng evan.cheng at apple.com
Fri Jun 1 13:29:48 PDT 2007



Changes in directory llvm/lib/CodeGen:

IfConversion.cpp updated: 1.20 -> 1.21
---
Log message:

Correctly mark early-exit on the false path.

---
Diffs of the changes:  (+9 -8)

 IfConversion.cpp |   17 +++++++++--------
 1 files changed, 9 insertions(+), 8 deletions(-)


Index: llvm/lib/CodeGen/IfConversion.cpp
diff -u llvm/lib/CodeGen/IfConversion.cpp:1.20 llvm/lib/CodeGen/IfConversion.cpp:1.21
--- llvm/lib/CodeGen/IfConversion.cpp:1.20	Fri Jun  1 02:41:07 2007
+++ llvm/lib/CodeGen/IfConversion.cpp	Fri Jun  1 15:29:21 2007
@@ -33,6 +33,7 @@
       ICReAnalyze,     // BB must be re-analyzed.
       ICNotClassfied,  // BB data valid, but not classified.
       ICEarlyExit,     // BB is entry of an early-exit sub-CFG.
+      ICEarlyExitFalse,// Same as ICEarlyExit, but on the false path.
       ICTriangle,      // BB is entry of a triangle sub-CFG.
       ICDiamond,       // BB is entry of a diamond sub-CFG.
       ICChild,         // BB is part of the sub-CFG that'll be predicated.
@@ -151,6 +152,7 @@
         // One or more of 'childrean' have been modified, abort!
         break;
       case ICEarlyExit:
+      case ICEarlyExitFalse:
         DOUT << "Ifcvt (Early exit): BB#" << BBI.BB->getNumber() << "\n";
         Change |= IfConvertEarlyExit(BBI);
         break;
@@ -239,7 +241,7 @@
     TrueBBI.Kind = ICChild;
   } else if (!(TrueBBI.hasEarlyExit && TrueNumPreds <= 1) &&
              (FalseBBI.hasEarlyExit && FalseNumPreds <=1)) {
-    BBI.Kind = ICEarlyExit;
+    BBI.Kind = ICEarlyExitFalse;
     FalseBBI.Kind = ICChild;
   } else if (TrueBBI.TrueBB && TrueBBI.TrueBB == BBI.FalseBB) {
     // Triangle:
@@ -335,6 +337,7 @@
       BBInfo &BBI = BBAnalysis[BB->getNumber()];
       switch (BBI.Kind) {
         case ICEarlyExit:
+        case ICEarlyExitFalse:
         case ICTriangle:
         case ICDiamond:
           Candidates.push_back(&BBI);
@@ -406,6 +409,8 @@
 /// IfConvertEarlyExit - If convert a early exit sub-CFG.
 ///
 bool IfConverter::IfConvertEarlyExit(BBInfo &BBI) {
+  bool ReverseCond = BBI.Kind == ICEarlyExitFalse;
+
   BBI.Kind = ICNotClassfied;
 
   BBInfo &TrueBBI  = BBAnalysis[BBI.TrueBB->getNumber()];
@@ -413,15 +418,11 @@
   BBInfo *CvtBBI = &TrueBBI;
   BBInfo *NextBBI = &FalseBBI;
 
-  bool ReserveCond = false;
-  if (TrueBBI.Kind != ICChild) {
-    std::swap(CvtBBI, NextBBI);
-    ReserveCond = true;
-  }
-
   std::vector<MachineOperand> NewCond(BBI.BrCond);
-  if (ReserveCond)
+  if (ReverseCond) {
+    std::swap(CvtBBI, NextBBI);
     TII->ReverseBranchCondition(NewCond);
+  }
   FeasibilityAnalysis(*CvtBBI, NewCond);
   if (!CvtBBI->isPredicable)
     return false;






More information about the llvm-commits mailing list