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

Chris Lattner sabre at nondot.org
Mon Dec 11 21:18:34 PST 2006



Changes in directory llvm/lib/CodeGen:

AsmPrinter.cpp updated: 1.123 -> 1.124
---
Log message:

split up inttoptr from ptrtoint handling, the cases aren't similar at all.


---
Diffs of the changes:  (+15 -22)

 AsmPrinter.cpp |   37 +++++++++++++++----------------------
 1 files changed, 15 insertions(+), 22 deletions(-)


Index: llvm/lib/CodeGen/AsmPrinter.cpp
diff -u llvm/lib/CodeGen/AsmPrinter.cpp:1.123 llvm/lib/CodeGen/AsmPrinter.cpp:1.124
--- llvm/lib/CodeGen/AsmPrinter.cpp:1.123	Mon Dec 11 23:14:13 2006
+++ llvm/lib/CodeGen/AsmPrinter.cpp	Mon Dec 11 23:18:19 2006
@@ -437,33 +437,26 @@
     case Instruction::BitCast:
       return EmitConstantValueOnly(CE->getOperand(0));
 
-    case Instruction::IntToPtr:
-    case Instruction::PtrToInt:{
+    case Instruction::IntToPtr: {
+      // Handle casts to pointers by changing them into casts to the appropriate
+      // integer type.  This promotes constant folding and simplifies this code.
+      Constant *Op = CE->getOperand(0);
+      Op = ConstantExpr::getIntegerCast(Op, TD->getIntPtrType(), false/*ZExt*/);
+      return EmitConstantValueOnly(Op);
+    }
+      
+      
+    case Instruction::PtrToInt: {
       // Support only foldable casts to/from pointers that can be eliminated by
       // changing the pointer to the appropriately sized integer type.
       Constant *Op = CE->getOperand(0);
-      const Type *OpTy = Op->getType(), *Ty = CE->getType();
+      const Type *Ty = CE->getType();
 
-      // Handle casts to pointers by changing them into casts to the appropriate
-      // integer type.  This promotes constant folding and simplifies this code.
-      if (isa<PointerType>(Ty)) {
-        const Type *IntPtrTy = TD->getIntPtrType();
-        Instruction::CastOps opcode = Instruction::CastOps(CE->getOpcode());
-        if (opcode == Instruction::IntToPtr)
-          Op = ConstantExpr::getIntegerCast(Op, IntPtrTy, false /*ZExt*/);
-        else 
-          Op = ConstantExpr::getPtrToInt(Op, IntPtrTy);
+      // We can emit the pointer value into this slot if the slot is an
+      // integer slot greater or equal to the size of the pointer.
+      if (Ty->isIntegral() &&
+          Ty->getPrimitiveSize() >= TD->getTypeSize(Op->getType()))
         return EmitConstantValueOnly(Op);
-      }
-      
-      // We know the dest type is not a pointer.  Is the src value a pointer or
-      // integral?
-      if (isa<PointerType>(OpTy) || OpTy->isIntegral()) {
-        // We can emit the pointer value into this slot if the slot is an
-        // integer slot greater or equal to the size of the pointer.
-        if (Ty->isIntegral() && TD->getTypeSize(Ty) >= TD->getTypeSize(OpTy))
-          return EmitConstantValueOnly(Op);
-      }
       
       assert(0 && "FIXME: Don't yet support this kind of constant cast expr");
       EmitConstantValueOnly(Op);






More information about the llvm-commits mailing list