mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
Update LiveDebugVariables during coalescing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@120720 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1ab4b211ea
commit
30e2128a73
@ -241,6 +241,10 @@ public:
|
||||
/// collecting all their def points.
|
||||
void computeIntervals(LiveIntervals &LIS, MachineDominatorTree &MDT);
|
||||
|
||||
/// renameRegister - Update locations to rewrite OldReg as NewReg:SubIdx.
|
||||
void renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx,
|
||||
const TargetRegisterInfo *TRI);
|
||||
|
||||
void print(raw_ostream&, const TargetRegisterInfo*);
|
||||
};
|
||||
} // namespace
|
||||
@ -269,6 +273,9 @@ class LDVImpl {
|
||||
/// getUserValue - Find or create a UserValue.
|
||||
UserValue *getUserValue(const MDNode *Var, unsigned Offset);
|
||||
|
||||
/// lookupVirtReg - Find the EC leader for VirtReg or null.
|
||||
UserValue *lookupVirtReg(unsigned VirtReg);
|
||||
|
||||
/// mapVirtReg - Map virtual register to an equivalence class.
|
||||
void mapVirtReg(unsigned VirtReg, UserValue *EC);
|
||||
|
||||
@ -300,6 +307,9 @@ public:
|
||||
userVarMap.clear();
|
||||
}
|
||||
|
||||
/// renameRegister - Replace all references to OldReg wiht NewReg:SubIdx.
|
||||
void renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx);
|
||||
|
||||
void print(raw_ostream&);
|
||||
};
|
||||
} // namespace
|
||||
@ -379,6 +389,12 @@ void LDVImpl::mapVirtReg(unsigned VirtReg, UserValue *EC) {
|
||||
Leader = UserValue::merge(Leader, EC);
|
||||
}
|
||||
|
||||
UserValue *LDVImpl::lookupVirtReg(unsigned VirtReg) {
|
||||
if (UserValue *UV = virtRegMap.lookup(VirtReg))
|
||||
return UV->getLeader();
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool LDVImpl::handleDebugValue(MachineInstr *MI, SlotIndex Idx) {
|
||||
// DBG_VALUE loc, offset, variable
|
||||
if (MI->getNumOperands() != 3 ||
|
||||
@ -551,3 +567,36 @@ LiveDebugVariables::~LiveDebugVariables() {
|
||||
if (pImpl)
|
||||
delete static_cast<LDVImpl*>(pImpl);
|
||||
}
|
||||
|
||||
void UserValue::
|
||||
renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx,
|
||||
const TargetRegisterInfo *TRI) {
|
||||
for (unsigned i = 0, e = locations.size(); i != e; ++i) {
|
||||
Location &Loc = locations[i];
|
||||
if (Loc.Kind != OldReg)
|
||||
continue;
|
||||
Loc.Kind = NewReg;
|
||||
if (SubIdx && Loc.Data.SubIdx)
|
||||
Loc.Data.SubIdx = TRI->composeSubRegIndices(SubIdx, Loc.Data.SubIdx);
|
||||
}
|
||||
}
|
||||
|
||||
void LDVImpl::
|
||||
renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx) {
|
||||
for (UserValue *UV = lookupVirtReg(OldReg); UV; UV = UV->getNext())
|
||||
UV->renameRegister(OldReg, NewReg, SubIdx, TRI);
|
||||
}
|
||||
|
||||
void LiveDebugVariables::
|
||||
renameRegister(unsigned OldReg, unsigned NewReg, unsigned SubIdx) {
|
||||
if (pImpl)
|
||||
static_cast<LDVImpl*>(pImpl)->renameRegister(OldReg, NewReg, SubIdx);
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
void LiveDebugVariables::dump() {
|
||||
if (pImpl)
|
||||
static_cast<LDVImpl*>(pImpl)->print(dbgs());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -44,6 +44,9 @@ public:
|
||||
/// that happened during register allocation.
|
||||
void emitDebugValues();
|
||||
|
||||
/// dump - Print data structures to dbgs().
|
||||
void dump();
|
||||
|
||||
private:
|
||||
|
||||
virtual bool runOnMachineFunction(MachineFunction &);
|
||||
|
@ -696,6 +696,9 @@ SimpleRegisterCoalescing::UpdateRegDefsUses(const CoalescerPair &CP) {
|
||||
unsigned DstReg = CP.getDstReg();
|
||||
unsigned SubIdx = CP.getSubIdx();
|
||||
|
||||
// Update LiveDebugVariables.
|
||||
ldv_->renameRegister(SrcReg, DstReg, SubIdx);
|
||||
|
||||
for (MachineRegisterInfo::reg_iterator I = mri_->reg_begin(SrcReg);
|
||||
MachineInstr *UseMI = I.skipInstruction();) {
|
||||
// A PhysReg copy that won't be coalesced can perhaps be rematerialized
|
||||
@ -1779,6 +1782,7 @@ bool SimpleRegisterCoalescing::runOnMachineFunction(MachineFunction &fn) {
|
||||
}
|
||||
|
||||
DEBUG(dump());
|
||||
DEBUG(ldv_->dump());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user