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); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits