mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-04 21:30:49 +00:00
Teach SCEVExpander::InsertCastOfTo to avoid creating inttoptr-of-ptrtoint
and ptrtoint-of-inttoptr expressions. This fixes a regression in 300.twolf. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69293 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
798d3923e0
commit
f04fa483b8
@ -83,8 +83,8 @@ namespace llvm {
|
||||
|
||||
/// InsertCastOfTo - Insert a cast of V to the specified type, doing what
|
||||
/// we can to share the casts.
|
||||
static Value *InsertCastOfTo(Instruction::CastOps opcode, Value *V,
|
||||
const Type *Ty);
|
||||
Value *InsertCastOfTo(Instruction::CastOps opcode, Value *V,
|
||||
const Type *Ty);
|
||||
/// InsertBinop - Insert the specified binary operator, doing a small amount
|
||||
/// of work to avoid inserting an obviously redundant operation.
|
||||
static Value *InsertBinop(Instruction::BinaryOps Opcode, Value *LHS,
|
||||
|
@ -26,6 +26,14 @@ Value *SCEVExpander::InsertCastOfTo(Instruction::CastOps opcode, Value *V,
|
||||
if (opcode == Instruction::BitCast && V->getType() == Ty)
|
||||
return V;
|
||||
|
||||
// Short-circuit unnecessary inttoptr<->ptrtoint casts.
|
||||
if (opcode == Instruction::PtrToInt && Ty == TD.getIntPtrType())
|
||||
if (IntToPtrInst *ITP = dyn_cast<IntToPtrInst>(V))
|
||||
return ITP->getOperand(0);
|
||||
if (opcode == Instruction::IntToPtr && V->getType() == TD.getIntPtrType())
|
||||
if (PtrToIntInst *PTI = dyn_cast<PtrToIntInst>(V))
|
||||
return PTI->getOperand(0);
|
||||
|
||||
// FIXME: keep track of the cast instruction.
|
||||
if (Constant *C = dyn_cast<Constant>(V))
|
||||
return ConstantExpr::getCast(opcode, C, Ty);
|
||||
|
Loading…
Reference in New Issue
Block a user