mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-28 06:29:45 +00:00
Fast ISel trivially coalesces away no-op casts, so check for this when
setting kill flags. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103832 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6a6328ba3d
commit
7f0d69555c
@ -57,11 +57,23 @@
|
||||
using namespace llvm;
|
||||
|
||||
bool FastISel::hasTrivialKill(const Value *V) const {
|
||||
// Don't consider constants or arguments to have trivial kills. Only
|
||||
// instructions with a single use in the same basic block.
|
||||
// Don't consider constants or arguments to have trivial kills.
|
||||
const Instruction *I = dyn_cast<Instruction>(V);
|
||||
return I &&
|
||||
I->hasOneUse() &&
|
||||
if (!I)
|
||||
return false;
|
||||
|
||||
// No-op casts are trivially coalesced by fast-isel.
|
||||
if (const CastInst *Cast = dyn_cast<CastInst>(I))
|
||||
if (Cast->isNoopCast(TD.getIntPtrType(Cast->getContext())) &&
|
||||
!hasTrivialKill(Cast->getOperand(0)))
|
||||
return false;
|
||||
|
||||
// Only instructions with a single use in the same basic block are considered
|
||||
// to have trivial kills.
|
||||
return I->hasOneUse() &&
|
||||
!(I->getOpcode() == Instruction::BitCast ||
|
||||
I->getOpcode() == Instruction::PtrToInt ||
|
||||
I->getOpcode() == Instruction::IntToPtr) &&
|
||||
cast<Instruction>(I->use_begin())->getParent() == I->getParent();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user