mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-28 03:25:23 +00:00
InlineSpiller can also update LiveStacks.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117338 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -18,6 +18,7 @@
|
|||||||
#include "SplitKit.h"
|
#include "SplitKit.h"
|
||||||
#include "VirtRegMap.h"
|
#include "VirtRegMap.h"
|
||||||
#include "llvm/CodeGen/LiveIntervalAnalysis.h"
|
#include "llvm/CodeGen/LiveIntervalAnalysis.h"
|
||||||
|
#include "llvm/CodeGen/LiveStackAnalysis.h"
|
||||||
#include "llvm/CodeGen/MachineFrameInfo.h"
|
#include "llvm/CodeGen/MachineFrameInfo.h"
|
||||||
#include "llvm/CodeGen/MachineFunction.h"
|
#include "llvm/CodeGen/MachineFunction.h"
|
||||||
#include "llvm/CodeGen/MachineLoopInfo.h"
|
#include "llvm/CodeGen/MachineLoopInfo.h"
|
||||||
@@ -34,6 +35,7 @@ class InlineSpiller : public Spiller {
|
|||||||
MachineFunctionPass &pass_;
|
MachineFunctionPass &pass_;
|
||||||
MachineFunction &mf_;
|
MachineFunction &mf_;
|
||||||
LiveIntervals &lis_;
|
LiveIntervals &lis_;
|
||||||
|
LiveStacks &lss_;
|
||||||
MachineLoopInfo &loops_;
|
MachineLoopInfo &loops_;
|
||||||
VirtRegMap &vrm_;
|
VirtRegMap &vrm_;
|
||||||
MachineFrameInfo &mfi_;
|
MachineFrameInfo &mfi_;
|
||||||
@@ -61,6 +63,7 @@ public:
|
|||||||
: pass_(pass),
|
: pass_(pass),
|
||||||
mf_(mf),
|
mf_(mf),
|
||||||
lis_(pass.getAnalysis<LiveIntervals>()),
|
lis_(pass.getAnalysis<LiveIntervals>()),
|
||||||
|
lss_(pass.getAnalysis<LiveStacks>()),
|
||||||
loops_(pass.getAnalysis<MachineLoopInfo>()),
|
loops_(pass.getAnalysis<MachineLoopInfo>()),
|
||||||
vrm_(vrm),
|
vrm_(vrm),
|
||||||
mfi_(*mf.getFrameInfo()),
|
mfi_(*mf.getFrameInfo()),
|
||||||
@@ -355,6 +358,12 @@ void InlineSpiller::spill(LiveRangeEdit &edit) {
|
|||||||
rc_ = mri_.getRegClass(edit.getReg());
|
rc_ = mri_.getRegClass(edit.getReg());
|
||||||
stackSlot_ = edit.assignStackSlot(vrm_);
|
stackSlot_ = edit.assignStackSlot(vrm_);
|
||||||
|
|
||||||
|
// Update LiveStacks now that we are committed to spilling.
|
||||||
|
LiveInterval &stacklvr = lss_.getOrCreateInterval(stackSlot_, rc_);
|
||||||
|
if (!stacklvr.hasAtLeastOneValue())
|
||||||
|
stacklvr.getNextValue(SlotIndex(), 0, lss_.getVNInfoAllocator());
|
||||||
|
stacklvr.MergeRangesInAsValue(edit_->getParent(), stacklvr.getValNumInfo(0));
|
||||||
|
|
||||||
// Iterate over instructions using register.
|
// Iterate over instructions using register.
|
||||||
for (MachineRegisterInfo::reg_iterator RI = mri_.reg_begin(edit.getReg());
|
for (MachineRegisterInfo::reg_iterator RI = mri_.reg_begin(edit.getReg());
|
||||||
MachineInstr *MI = RI.skipInstruction();) {
|
MachineInstr *MI = RI.skipInstruction();) {
|
||||||
|
Reference in New Issue
Block a user