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

Reid Spencer reid at x10sys.com
Thu Jan 18 10:54:49 PST 2007



Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.601 -> 1.602
---
Log message:

Clean up some code around the store V, (cast P) -> store (cast V), P
transform. Change some variable names so it is clear what is source and
what is dest of the cast. Also, add an assert to ensure that the integer
to integer case is asserting if the bitwidths are different. This prevents
illegal casts from being formed and catches bitwidth bugs sooner.


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

 InstructionCombining.cpp |   22 ++++++++++++++--------
 1 files changed, 14 insertions(+), 8 deletions(-)


Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.601 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.602
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.601	Mon Jan 15 11:55:20 2007
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp	Thu Jan 18 12:54:33 2007
@@ -8186,23 +8186,29 @@
                IC.getTargetData().getTypeSize(DestPTy)) {
 
         // Okay, we are casting from one integer or pointer type to another of
-        // the same size.  Instead of casting the pointer before the store, cast
-        // the value to be stored.
+        // the same size.  Instead of casting the pointer before 
+        // the store, cast the value to be stored.
         Value *NewCast;
-        Instruction::CastOps opcode = Instruction::BitCast;
         Value *SIOp0 = SI.getOperand(0);
-        if (isa<PointerType>(SrcPTy)) {
-          if (SIOp0->getType()->isInteger())
+        Instruction::CastOps opcode = Instruction::BitCast;
+        const Type* CastSrcTy = SIOp0->getType();
+        const Type* CastDstTy = SrcPTy;
+        if (isa<PointerType>(CastDstTy)) {
+          if (CastSrcTy->isInteger())
             opcode = Instruction::IntToPtr;
-        } else if (SrcPTy->isInteger()) {
+        } else if (const IntegerType* DITy = dyn_cast<IntegerType>(CastDstTy)) {
           if (isa<PointerType>(SIOp0->getType()))
             opcode = Instruction::PtrToInt;
+          else if (const IntegerType* SITy = dyn_cast<IntegerType>(CastSrcTy))
+            assert(DITy->getBitWidth() == SITy->getBitWidth() &&
+                   "Illegal store instruction");
         }
         if (Constant *C = dyn_cast<Constant>(SIOp0))
-          NewCast = ConstantExpr::getCast(opcode, C, SrcPTy);
+          NewCast = ConstantExpr::getCast(opcode, C, CastDstTy);
         else
           NewCast = IC.InsertNewInstBefore(
-            CastInst::create(opcode, SIOp0, SrcPTy, SIOp0->getName()+".c"), SI);
+            CastInst::create(opcode, SIOp0, CastDstTy, SIOp0->getName()+".c"), 
+            SI);
         return new StoreInst(NewCast, CastOp);
       }
     }






More information about the llvm-commits mailing list