mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-17 00:27:31 +00:00
Add a utility function for conservatively clearing kill flags, and make
use of it in MachineCSE. llvm-svn: 103726
This commit is contained in:
parent
d7b4c5b82e
commit
223379b3a9
@ -162,6 +162,12 @@ public:
|
||||
/// register or null if none is found. This assumes that the code is in SSA
|
||||
/// form, so there should only be one definition.
|
||||
MachineInstr *getVRegDef(unsigned Reg) const;
|
||||
|
||||
/// clearKillFlags - Iterate over all the uses of the given register and
|
||||
/// clear the kill flag from the MachineOperand. This function is used by
|
||||
/// optimization passes which extend register lifetimes and need only
|
||||
/// preserve conservative kill flag information.
|
||||
void clearKillFlags(unsigned Reg) const;
|
||||
|
||||
#ifndef NDEBUG
|
||||
void dumpUses(unsigned RegNo) const;
|
||||
|
@ -112,6 +112,7 @@ bool MachineCSE::PerformTrivialCoalescing(MachineInstr *MI,
|
||||
DEBUG(dbgs() << "Coalescing: " << *DefMI);
|
||||
DEBUG(dbgs() << "*** to: " << *MI);
|
||||
MO.setReg(SrcReg);
|
||||
MRI->clearKillFlags(SrcReg);
|
||||
if (NewRC != SRC)
|
||||
MRI->setRegClass(SrcReg, NewRC);
|
||||
DefMI->eraseFromParent();
|
||||
@ -365,8 +366,10 @@ bool MachineCSE::ProcessBlock(MachineBasicBlock *MBB) {
|
||||
|
||||
// Actually perform the elimination.
|
||||
if (DoCSE) {
|
||||
for (unsigned i = 0, e = CSEPairs.size(); i != e; ++i)
|
||||
for (unsigned i = 0, e = CSEPairs.size(); i != e; ++i) {
|
||||
MRI->replaceRegWith(CSEPairs[i].first, CSEPairs[i].second);
|
||||
MRI->clearKillFlags(CSEPairs[i].second);
|
||||
}
|
||||
MI->eraseFromParent();
|
||||
++NumCSEs;
|
||||
} else {
|
||||
|
@ -133,6 +133,15 @@ bool MachineRegisterInfo::hasOneNonDBGUse(unsigned RegNo) const {
|
||||
return ++UI == use_nodbg_end();
|
||||
}
|
||||
|
||||
/// clearKillFlags - Iterate over all the uses of the given register and
|
||||
/// clear the kill flag from the MachineOperand. This function is used by
|
||||
/// optimization passes which extend register lifetimes and need only
|
||||
/// preserve conservative kill flag information.
|
||||
void MachineRegisterInfo::clearKillFlags(unsigned Reg) const {
|
||||
for (use_iterator UI = use_begin(Reg), UE = use_end(); UI != UE; ++UI)
|
||||
UI.getOperand().setIsKill(false);
|
||||
}
|
||||
|
||||
bool MachineRegisterInfo::isLiveIn(unsigned Reg) const {
|
||||
for (livein_iterator I = livein_begin(), E = livein_end(); I != E; ++I)
|
||||
if (I->first == Reg || I->second == Reg)
|
||||
|
Loading…
Reference in New Issue
Block a user