From 330d86d7489a961d452e821a34dc6de3f19ae73a Mon Sep 17 00:00:00 2001 From: Reid Spencer Date: Tue, 5 Dec 2006 03:28:26 +0000 Subject: [PATCH] Implement createPointerCast. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32212 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Instructions.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 8c1f47d8afb..65a910b8e8c 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -1548,6 +1548,31 @@ CastInst *CastInst::createTruncOrBitCast(Value *S, const Type *Ty, return create(Instruction::Trunc, S, Ty, Name, InsertAtEnd); } +CastInst *CastInst::createPointerCast(Value *S, const Type *Ty, + const std::string &Name, + BasicBlock *InsertAtEnd) { + assert(isa(S->getType()) && "Invalid cast"); + assert((Ty->isIntegral() || Ty->getTypeID() == Type::PointerTyID) && + "Invalid cast"); + + if (Ty->isIntegral()) + return create(Instruction::PtrToInt, S, Ty, Name, InsertAtEnd); + return create(Instruction::BitCast, S, Ty, Name, InsertAtEnd); +} + +/// @brief Create a BitCast or a PtrToInt cast instruction +CastInst *CastInst::createPointerCast(Value *S, const Type *Ty, + const std::string &Name, + Instruction *InsertBefore) { + assert(isa(S->getType()) && "Invalid cast"); + assert((Ty->isIntegral() || Ty->getTypeID() == Type::PointerTyID) && + "Invalid cast"); + + if (Ty->isIntegral()) + return create(Instruction::PtrToInt, S, Ty, Name, InsertBefore); + return create(Instruction::BitCast, S, Ty, Name, InsertBefore); +} + // Provide a way to get a "cast" where the cast opcode is inferred from the // types and size of the operand. This, basically, is a parallel of the // logic in the checkCast function below. This axiom should hold: -- 2.34.1