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

Reid Spencer reid at x10sys.com
Sat Jan 20 15:36:03 PST 2007



Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.606 -> 1.607
---
Log message:

Revise the store V, (cast P) -> store (cast V) -> P transform.
We only want to do this if the src and destination types have the same
bit width. This patch uses TargetData::getTypeSizeInBits() instead of
making a special case for integer types and avoiding the transform if
they don't match.


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

 InstructionCombining.cpp |   13 ++++---------
 1 files changed, 4 insertions(+), 9 deletions(-)


Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.606 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.607
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.606	Sat Jan 20 16:35:55 2007
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp	Sat Jan 20 17:35:48 2007
@@ -8192,10 +8192,9 @@
             SrcPTy = SrcTy->getElementType();
           }
 
-      if (((SrcPTy->isInteger() && SrcPTy != Type::Int1Ty) ||
-           isa<PointerType>(SrcPTy)) &&
-          IC.getTargetData().getTypeSize(SrcPTy) ==
-               IC.getTargetData().getTypeSize(DestPTy)) {
+      if ((SrcPTy->isInteger() || isa<PointerType>(SrcPTy)) &&
+          IC.getTargetData().getTypeSizeInBits(SrcPTy) ==
+               IC.getTargetData().getTypeSizeInBits(DestPTy)) {
 
         // Okay, we are casting from one integer or pointer type to another of
         // the same size.  Instead of casting the pointer before 
@@ -8208,13 +8207,9 @@
         if (isa<PointerType>(CastDstTy)) {
           if (CastSrcTy->isInteger())
             opcode = Instruction::IntToPtr;
-        } else if (const IntegerType* DITy = dyn_cast<IntegerType>(CastDstTy)) {
+        } else if (isa<IntegerType>(CastDstTy)) {
           if (isa<PointerType>(SIOp0->getType()))
             opcode = Instruction::PtrToInt;
-          else if (const IntegerType* SITy = dyn_cast<IntegerType>(CastSrcTy))
-            if (SITy->getBitWidth() != DITy->getBitWidth())
-              return 0; // Don't do this transform on unequal bit widths.
-            // else, BitCast is fine
         }
         if (Constant *C = dyn_cast<Constant>(SIOp0))
           NewCast = ConstantExpr::getCast(opcode, C, CastDstTy);






More information about the llvm-commits mailing list