mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-20 10:24:12 +00:00
Add addrspacecast instruction.
Patch by Michele Scandale! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@194760 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -1126,6 +1126,7 @@ getWithOperands(ArrayRef<Constant*> Ops, Type *Ty) const {
|
||||
case Instruction::PtrToInt:
|
||||
case Instruction::IntToPtr:
|
||||
case Instruction::BitCast:
|
||||
case Instruction::AddrSpaceCast:
|
||||
return ConstantExpr::getCast(getOpcode(), Ops[0], Ty);
|
||||
case Instruction::Select:
|
||||
return ConstantExpr::getSelect(Ops[0], Ops[1], Ops[2]);
|
||||
@ -1461,6 +1462,7 @@ Constant *ConstantExpr::getCast(unsigned oc, Constant *C, Type *Ty) {
|
||||
case Instruction::PtrToInt: return getPtrToInt(C, Ty);
|
||||
case Instruction::IntToPtr: return getIntToPtr(C, Ty);
|
||||
case Instruction::BitCast: return getBitCast(C, Ty);
|
||||
case Instruction::AddrSpaceCast: return getAddrSpaceCast(C, Ty);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1489,6 +1491,11 @@ Constant *ConstantExpr::getPointerCast(Constant *S, Type *Ty) {
|
||||
|
||||
if (Ty->isIntOrIntVectorTy())
|
||||
return getPtrToInt(S, Ty);
|
||||
|
||||
unsigned SrcAS = S->getType()->getPointerAddressSpace();
|
||||
if (Ty->isPtrOrPtrVectorTy() && SrcAS != Ty->getPointerAddressSpace())
|
||||
return getAddrSpaceCast(S, Ty);
|
||||
|
||||
return getBitCast(S, Ty);
|
||||
}
|
||||
|
||||
@ -1662,6 +1669,13 @@ Constant *ConstantExpr::getBitCast(Constant *C, Type *DstTy) {
|
||||
return getFoldedCast(Instruction::BitCast, C, DstTy);
|
||||
}
|
||||
|
||||
Constant *ConstantExpr::getAddrSpaceCast(Constant *C, Type *DstTy) {
|
||||
assert(CastInst::castIsValid(Instruction::AddrSpaceCast, C, DstTy) &&
|
||||
"Invalid constantexpr addrspacecast!");
|
||||
|
||||
return getFoldedCast(Instruction::AddrSpaceCast, C, DstTy);
|
||||
}
|
||||
|
||||
Constant *ConstantExpr::get(unsigned Opcode, Constant *C1, Constant *C2,
|
||||
unsigned Flags) {
|
||||
// Check the operands for consistency first.
|
||||
|
Reference in New Issue
Block a user