[llvm-commits] [llvm] r51272 - /llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp

Chris Lattner sabre at nondot.org
Mon May 19 13:27:56 PDT 2008


Author: lattner
Date: Mon May 19 15:27:56 2008
New Revision: 51272

URL: http://llvm.org/viewvc/llvm-project?rev=51272&view=rev
Log:
minor cleanups, teach instcombine that sitofp/uitofp cannot 
produce a negative zero.

Modified:
    llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp

Modified: llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp?rev=51272&r1=51271&r2=51272&view=diff

==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/InstructionCombining.cpp Mon May 19 15:27:56 2008
@@ -834,10 +834,11 @@
   case Instruction::IntToPtr:
     // We can't handle these if we don't know the pointer size.
     if (!TD) return;
-    // Fall through and handle them the same as zext/trunc.
+    // FALL THROUGH and handle them the same as zext/trunc.
   case Instruction::ZExt:
   case Instruction::Trunc: {
-    // All these have integer operands
+    // Note that we handle pointer operands here because of inttoptr/ptrtoint
+    // which fall through here.
     const Type *SrcTy = I->getOperand(0)->getType();
     uint32_t SrcBitWidth = TD ?
       TD->getTypeSizeInBits(SrcTy) :
@@ -2339,13 +2340,17 @@
   if (const ConstantFP *CFP = dyn_cast<ConstantFP>(V))
     return !CFP->getValueAPF().isNegZero();
 
-  // (add x, 0.0) is guaranteed to return +0.0, not -0.0.
   if (const Instruction *I = dyn_cast<Instruction>(V)) {
+    // (add x, 0.0) is guaranteed to return +0.0, not -0.0.
     if (I->getOpcode() == Instruction::Add &&
         isa<ConstantFP>(I->getOperand(1)) && 
         cast<ConstantFP>(I->getOperand(1))->isNullValue())
       return true;
     
+    // sitofp and uitofp turn into +0.0 for zero.
+    if (isa<SIToFPInst>(I) || isa<UIToFPInst>(I))
+      return true;
+    
     if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(I))
       if (II->getIntrinsicID() == Intrinsic::sqrt)
         return CannotBeNegativeZero(II->getOperand(1));





More information about the llvm-commits mailing list