Implement createPointerCast.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32212 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Spencer 2006-12-05 03:28:26 +00:00
parent c0459fb7f5
commit 330d86d748

View File

@ -1548,6 +1548,31 @@ CastInst *CastInst::createTruncOrBitCast(Value *S, const Type *Ty,
return create(Instruction::Trunc, S, Ty, Name, InsertAtEnd); return create(Instruction::Trunc, S, Ty, Name, InsertAtEnd);
} }
CastInst *CastInst::createPointerCast(Value *S, const Type *Ty,
const std::string &Name,
BasicBlock *InsertAtEnd) {
assert(isa<PointerType>(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<PointerType>(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 // 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 // types and size of the operand. This, basically, is a parallel of the
// logic in the checkCast function below. This axiom should hold: // logic in the checkCast function below. This axiom should hold: