mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-20 08:54:08 +00:00
Delete the 'standard' spiller with used the old spilling framework.
The current register allocators all use the inline spiller. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144477 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cfa8101409
commit
5d9b109181
@ -29,7 +29,7 @@
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
enum SpillerName { trivial, standard, inline_ };
|
||||
enum SpillerName { trivial, inline_ };
|
||||
}
|
||||
|
||||
static cl::opt<SpillerName>
|
||||
@ -37,10 +37,9 @@ spillerOpt("spiller",
|
||||
cl::desc("Spiller to use: (default: standard)"),
|
||||
cl::Prefix,
|
||||
cl::values(clEnumVal(trivial, "trivial spiller"),
|
||||
clEnumVal(standard, "default spiller"),
|
||||
clEnumValN(inline_, "inline", "inline spiller"),
|
||||
clEnumValEnd),
|
||||
cl::init(standard));
|
||||
cl::init(trivial));
|
||||
|
||||
// Spiller virtual destructor implementation.
|
||||
Spiller::~Spiller() {}
|
||||
@ -188,54 +187,12 @@ public:
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
namespace {
|
||||
|
||||
/// Falls back on LiveIntervals::addIntervalsForSpills.
|
||||
class StandardSpiller : public Spiller {
|
||||
protected:
|
||||
MachineFunction *mf;
|
||||
LiveIntervals *lis;
|
||||
LiveStacks *lss;
|
||||
MachineLoopInfo *loopInfo;
|
||||
VirtRegMap *vrm;
|
||||
public:
|
||||
StandardSpiller(MachineFunctionPass &pass, MachineFunction &mf,
|
||||
VirtRegMap &vrm)
|
||||
: mf(&mf),
|
||||
lis(&pass.getAnalysis<LiveIntervals>()),
|
||||
lss(&pass.getAnalysis<LiveStacks>()),
|
||||
loopInfo(pass.getAnalysisIfAvailable<MachineLoopInfo>()),
|
||||
vrm(&vrm) {}
|
||||
|
||||
/// Falls back on LiveIntervals::addIntervalsForSpills.
|
||||
void spill(LiveRangeEdit &LRE) {
|
||||
std::vector<LiveInterval*> added =
|
||||
lis->addIntervalsForSpills(LRE.getParent(), LRE.getUselessVRegs(),
|
||||
loopInfo, *vrm);
|
||||
LRE.getNewVRegs()->insert(LRE.getNewVRegs()->end(),
|
||||
added.begin(), added.end());
|
||||
|
||||
// Update LiveStacks.
|
||||
int SS = vrm->getStackSlot(LRE.getReg());
|
||||
if (SS == VirtRegMap::NO_STACK_SLOT)
|
||||
return;
|
||||
const TargetRegisterClass *RC = mf->getRegInfo().getRegClass(LRE.getReg());
|
||||
LiveInterval &SI = lss->getOrCreateInterval(SS, RC);
|
||||
if (!SI.hasAtLeastOneValue())
|
||||
SI.getNextValue(SlotIndex(), 0, lss->getVNInfoAllocator());
|
||||
SI.MergeRangesInAsValue(LRE.getParent(), SI.getValNumInfo(0));
|
||||
}
|
||||
};
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
llvm::Spiller* llvm::createSpiller(MachineFunctionPass &pass,
|
||||
MachineFunction &mf,
|
||||
VirtRegMap &vrm) {
|
||||
switch (spillerOpt) {
|
||||
default: assert(0 && "unknown spiller");
|
||||
case trivial: return new TrivialSpiller(pass, mf, vrm);
|
||||
case standard: return new StandardSpiller(pass, mf, vrm);
|
||||
case inline_: return createInlineSpiller(pass, mf, vrm);
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: llc < %s -verify-machineinstrs -spiller=standard
|
||||
; RUN: llc < %s -verify-machineinstrs -spiller=trivial
|
||||
; RUN: llc < %s -verify-machineinstrs -spiller=inline
|
||||
; PR8612
|
||||
;
|
||||
|
Loading…
x
Reference in New Issue
Block a user