[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