Changes in directory llvm/lib/VMCore:
Constants.cpp updated: 1.184 -> 1.185 --- Log message: Implement getIntegerCast and getFPCast for ConstantExpr. These are similar to the createIntegerCast and createFPCast for CastInst instructions. --- Diffs of the changes: (+23 -0) Constants.cpp | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+) Index: llvm/lib/VMCore/Constants.cpp diff -u llvm/lib/VMCore/Constants.cpp:1.184 llvm/lib/VMCore/Constants.cpp:1.185 --- llvm/lib/VMCore/Constants.cpp:1.184 Fri Dec 8 12:06:15 2006 +++ llvm/lib/VMCore/Constants.cpp Mon Dec 11 18:51:07 2006 @@ -1514,6 +1514,29 @@ return getCast(Instruction::BitCast, S, Ty); } +Constant *ConstantExpr::getIntegerCast(Constant *C, const Type *Ty, + bool isSigned) { + assert(C->getType()->isIntegral() && Ty->isIntegral() && "Invalid cast"); + unsigned SrcBits = C->getType()->getPrimitiveSizeInBits(); + unsigned DstBits = Ty->getPrimitiveSizeInBits(); + Instruction::CastOps opcode = + (SrcBits == DstBits ? Instruction::BitCast : + (SrcBits > DstBits ? Instruction::Trunc : + (isSigned ? Instruction::SExt : Instruction::ZExt))); + return getCast(opcode, C, Ty); +} + +Constant *ConstantExpr::getFPCast(Constant *C, const Type *Ty) { + assert(C->getType()->isFloatingPoint() && Ty->isFloatingPoint() && + "Invalid cast"); + unsigned SrcBits = C->getType()->getPrimitiveSizeInBits(); + unsigned DstBits = Ty->getPrimitiveSizeInBits(); + Instruction::CastOps opcode = + (SrcBits == DstBits ? Instruction::BitCast : + (SrcBits > DstBits ? Instruction::FPTrunc : Instruction::FPExt)); + return getCast(opcode, C, Ty); +} + Constant *ConstantExpr::getTrunc(Constant *C, const Type *Ty) { assert(C->getType()->isInteger() && "Trunc operand must be integer"); assert(Ty->isIntegral() && "Trunc produces only integral"); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits