mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-26 07:34:14 +00:00
MachineCSE shouldn't extend the live ranges of reserved or allocatable registers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150653 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f7b367ce45
commit
f7e31b9e81
@ -63,6 +63,8 @@ namespace {
|
||||
virtual void releaseMemory() {
|
||||
ScopeMap.clear();
|
||||
Exps.clear();
|
||||
AllocatableRegs.clear();
|
||||
ReservedRegs.clear();
|
||||
}
|
||||
|
||||
private:
|
||||
@ -76,6 +78,8 @@ namespace {
|
||||
ScopedHTType VNT;
|
||||
SmallVector<MachineInstr*, 64> Exps;
|
||||
unsigned CurrVN;
|
||||
BitVector AllocatableRegs;
|
||||
BitVector ReservedRegs;
|
||||
|
||||
bool PerformTrivialCoalescing(MachineInstr *MI, MachineBasicBlock *MBB);
|
||||
bool isPhysDefTriviallyDead(unsigned Reg,
|
||||
@ -236,9 +240,9 @@ bool MachineCSE::PhysRegDefsReach(MachineInstr *CSMI, MachineInstr *MI,
|
||||
return false;
|
||||
|
||||
for (unsigned i = 0, e = PhysDefs.size(); i != e; ++i) {
|
||||
if (TRI->isInAllocatableClass(PhysDefs[i]))
|
||||
// Avoid extending live range of physical registers unless
|
||||
// they are unallocatable.
|
||||
if (AllocatableRegs.test(PhysDefs[i]) || ReservedRegs.test(PhysDefs[i]))
|
||||
// Avoid extending live range of physical registers if they are
|
||||
//allocatable or reserved.
|
||||
return false;
|
||||
}
|
||||
CrossMBB = true;
|
||||
@ -588,5 +592,7 @@ bool MachineCSE::runOnMachineFunction(MachineFunction &MF) {
|
||||
MRI = &MF.getRegInfo();
|
||||
AA = &getAnalysis<AliasAnalysis>();
|
||||
DT = &getAnalysis<MachineDominatorTree>();
|
||||
AllocatableRegs = TRI->getAllocatableSet(MF);
|
||||
ReservedRegs = TRI->getReservedRegs(MF);
|
||||
return PerformCSE(DT->getRootNode());
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user