mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-26 13:10:34 +00:00
Implement createPointerCast.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32212 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c0459fb7f5
commit
330d86d748
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user