[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp

Evan Cheng evan.cheng at apple.com
Tue Sep 19 18:39:54 PDT 2006



Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.512 -> 1.513
---
Log message:

Back out Chris' last set of changes. This breaks 177.mesa and povray somehow.


---
Diffs of the changes:  (+6 -43)

 InstructionCombining.cpp |   49 +++++------------------------------------------
 1 files changed, 6 insertions(+), 43 deletions(-)


Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.512 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.513
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.512	Tue Sep 19 20:10:02 2006
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp	Tue Sep 19 20:39:40 2006
@@ -5713,48 +5713,12 @@
         return new CastInst(NotCond, SI.getType());
       }
 
-      if (SetCondInst *IC = dyn_cast<SetCondInst>(SI.getCondition())) {
-
-        // (x <s 0) ? -1 : 0 -> sra x, 31
-        // (x >u 2147483647) ? -1 : 0 -> sra x, 31
-        if (TrueValC->isAllOnesValue() && FalseValC->isNullValue())
-          if (ConstantInt *CmpCst = dyn_cast<ConstantInt>(IC->getOperand(1))) {
-            bool CanXForm = false;
-            if (CmpCst->getType()->isSigned())
-              CanXForm = CmpCst->isNullValue() && 
-                         IC->getOpcode() == Instruction::SetLT;
-            else {
-              unsigned Bits = CmpCst->getType()->getPrimitiveSizeInBits();
-              CanXForm = (CmpCst->getRawValue() == ~0ULL >> (64-Bits+1)) &&
-                         IC->getOpcode() == Instruction::SetGT;
-            }
-            
-            // The comparison constant and the result are not neccessarily the
-            // same width.  In any case, the first step to do is make sure that
-            // X is signed.
-            Value *X = IC->getOperand(0);
-            if (!X->getType()->isSigned())
-              X = InsertCastBefore(X, X->getType()->getSignedVersion(), SI);
-            
-            // Now that X is signed, we have to make the all ones value.  Do
-            // this by inserting a new SRA.
-            unsigned Bits = X->getType()->getPrimitiveSizeInBits();
-            Constant *ShAmt = ConstantUInt::get(Type::UByteTy, Bits-1);
-            Instruction *SRA = new ShiftInst(Instruction::Shr, X, ShAmt,"ones");
-            InsertNewInstBefore(SRA, SI);
-            
-            // Finally, convert to the type of the select RHS.  If this is
-            // smaller than the compare value, it will truncate the ones to fit.
-            // If it is larger, it will sext the ones to fit.
-            return new CastInst(SRA, SI.getType());
-          }
-
-
-        // If one of the constants is zero (we know they can't both be) and we
-        // have a setcc instruction with zero, and we have an 'and' with the
-        // non-constant value, eliminate this whole mess.  This corresponds to
-        // cases like this: ((X & 27) ? 27 : 0)
-        if (TrueValC->isNullValue() || FalseValC->isNullValue())
+      // If one of the constants is zero (we know they can't both be) and we
+      // have a setcc instruction with zero, and we have an 'and' with the
+      // non-constant value, eliminate this whole mess.  This corresponds to
+      // cases like this: ((X & 27) ? 27 : 0)
+      if (TrueValC->isNullValue() || FalseValC->isNullValue())
+        if (SetCondInst *IC = dyn_cast<SetCondInst>(SI.getCondition()))
           if (IC->isEquality() && isa<ConstantInt>(IC->getOperand(1)) &&
               cast<Constant>(IC->getOperand(1))->isNullValue())
             if (Instruction *ICA = dyn_cast<Instruction>(IC->getOperand(0)))
@@ -5774,7 +5738,6 @@
                                   Instruction::Xor, V, ICA->getOperand(1)), SI);
                 return ReplaceInstUsesWith(SI, V);
               }
-      }
     }
 
   // See if we are selecting two values based on a comparison of the two values.






More information about the llvm-commits mailing list