mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-24 13:18:17 +00:00
Add CreatePointerBitCastOrAddrSpaceCast to IRBuilder and co.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212962 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
+26
-8
@@ -2478,11 +2478,7 @@ CastInst *CastInst::CreatePointerCast(Value *S, Type *Ty,
|
||||
if (Ty->isIntOrIntVectorTy())
|
||||
return Create(Instruction::PtrToInt, S, Ty, Name, InsertAtEnd);
|
||||
|
||||
Type *STy = S->getType();
|
||||
if (STy->getPointerAddressSpace() != Ty->getPointerAddressSpace())
|
||||
return Create(Instruction::AddrSpaceCast, S, Ty, Name, InsertAtEnd);
|
||||
|
||||
return Create(Instruction::BitCast, S, Ty, Name, InsertAtEnd);
|
||||
return CreatePointerBitCastOrAddrSpaceCast(S, Ty, Name, InsertAtEnd);
|
||||
}
|
||||
|
||||
/// @brief Create a BitCast or a PtrToInt cast instruction
|
||||
@@ -2500,14 +2496,36 @@ CastInst *CastInst::CreatePointerCast(Value *S, Type *Ty,
|
||||
if (Ty->isIntOrIntVectorTy())
|
||||
return Create(Instruction::PtrToInt, S, Ty, Name, InsertBefore);
|
||||
|
||||
Type *STy = S->getType();
|
||||
if (STy->getPointerAddressSpace() != Ty->getPointerAddressSpace())
|
||||
return CreatePointerBitCastOrAddrSpaceCast(S, Ty, Name, InsertBefore);
|
||||
}
|
||||
|
||||
CastInst *CastInst::CreatePointerBitCastOrAddrSpaceCast(
|
||||
Value *S, Type *Ty,
|
||||
const Twine &Name,
|
||||
BasicBlock *InsertAtEnd) {
|
||||
assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast");
|
||||
assert(Ty->isPtrOrPtrVectorTy() && "Invalid cast");
|
||||
|
||||
if (S->getType()->getPointerAddressSpace() != Ty->getPointerAddressSpace())
|
||||
return Create(Instruction::AddrSpaceCast, S, Ty, Name, InsertAtEnd);
|
||||
|
||||
return Create(Instruction::BitCast, S, Ty, Name, InsertAtEnd);
|
||||
}
|
||||
|
||||
CastInst *CastInst::CreatePointerBitCastOrAddrSpaceCast(
|
||||
Value *S, Type *Ty,
|
||||
const Twine &Name,
|
||||
Instruction *InsertBefore) {
|
||||
assert(S->getType()->isPtrOrPtrVectorTy() && "Invalid cast");
|
||||
assert(Ty->isPtrOrPtrVectorTy() && "Invalid cast");
|
||||
|
||||
if (S->getType()->getPointerAddressSpace() != Ty->getPointerAddressSpace())
|
||||
return Create(Instruction::AddrSpaceCast, S, Ty, Name, InsertBefore);
|
||||
|
||||
return Create(Instruction::BitCast, S, Ty, Name, InsertBefore);
|
||||
}
|
||||
|
||||
CastInst *CastInst::CreateIntegerCast(Value *C, Type *Ty,
|
||||
CastInst *CastInst::CreateIntegerCast(Value *C, Type *Ty,
|
||||
bool isSigned, const Twine &Name,
|
||||
Instruction *InsertBefore) {
|
||||
assert(C->getType()->isIntOrIntVectorTy() && Ty->isIntOrIntVectorTy() &&
|
||||
|
||||
Reference in New Issue
Block a user