mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Short-circuit inttoptr-ptrtoint constant expressions; these aren't
always folded by the regular constant folder because it doesn't have TargetData information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70553 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
99a1302ae4
commit
80dcdee0f4
@ -27,13 +27,20 @@ Value *SCEVExpander::InsertCastOfTo(Instruction::CastOps opcode, Value *V,
|
||||
|
||||
// Short-circuit unnecessary inttoptr<->ptrtoint casts.
|
||||
if ((opcode == Instruction::PtrToInt || opcode == Instruction::IntToPtr) &&
|
||||
SE.getTypeSizeInBits(Ty) == SE.getTypeSizeInBits(V->getType()))
|
||||
SE.getTypeSizeInBits(Ty) == SE.getTypeSizeInBits(V->getType())) {
|
||||
if (CastInst *CI = dyn_cast<CastInst>(V))
|
||||
if ((CI->getOpcode() == Instruction::PtrToInt ||
|
||||
CI->getOpcode() == Instruction::IntToPtr) &&
|
||||
SE.getTypeSizeInBits(CI->getType()) ==
|
||||
SE.getTypeSizeInBits(CI->getOperand(0)->getType()))
|
||||
return CI->getOperand(0);
|
||||
if (ConstantExpr *CE = dyn_cast<ConstantExpr>(V))
|
||||
if ((CE->getOpcode() == Instruction::PtrToInt ||
|
||||
CE->getOpcode() == Instruction::IntToPtr) &&
|
||||
SE.getTypeSizeInBits(CE->getType()) ==
|
||||
SE.getTypeSizeInBits(CE->getOperand(0)->getType()))
|
||||
return CE->getOperand(0);
|
||||
}
|
||||
|
||||
// FIXME: keep track of the cast instruction.
|
||||
if (Constant *C = dyn_cast<Constant>(V))
|
||||
|
Loading…
Reference in New Issue
Block a user