Instead of the TargetMachine cache the MachineFunction

and TargetRegisterInfo in the peephole optimizer. This
makes it easier to grab subtarget dependent variables off
of the MachineFunction rather than the TargetMachine.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219669 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eric Christopher 2014-10-14 07:17:20 +00:00
parent d879de1ece
commit 188c856c38

View File

@ -107,8 +107,9 @@ STATISTIC(NumRewrittenCopies, "Number of copies rewritten");
namespace { namespace {
class PeepholeOptimizer : public MachineFunctionPass { class PeepholeOptimizer : public MachineFunctionPass {
const TargetMachine *TM; MachineFunction *MF;
const TargetInstrInfo *TII; const TargetInstrInfo *TII;
const TargetRegisterInfo *TRI;
MachineRegisterInfo *MRI; MachineRegisterInfo *MRI;
MachineDominatorTree *DT; // Machine dominator tree MachineDominatorTree *DT; // Machine dominator tree
@ -327,8 +328,7 @@ optimizeExtInstr(MachineInstr *MI, MachineBasicBlock *MBB,
// Ensure DstReg can get a register class that actually supports // Ensure DstReg can get a register class that actually supports
// sub-registers. Don't change the class until we commit. // sub-registers. Don't change the class until we commit.
const TargetRegisterClass *DstRC = MRI->getRegClass(DstReg); const TargetRegisterClass *DstRC = MRI->getRegClass(DstReg);
DstRC = TM->getSubtargetImpl()->getRegisterInfo()->getSubClassWithSubReg( DstRC = TRI->getSubClassWithSubReg(DstRC, SubIdx);
DstRC, SubIdx);
if (!DstRC) if (!DstRC)
return false; return false;
@ -338,8 +338,7 @@ optimizeExtInstr(MachineInstr *MI, MachineBasicBlock *MBB,
// If UseSrcSubIdx is Set, SubIdx also applies to SrcReg, and only uses of // If UseSrcSubIdx is Set, SubIdx also applies to SrcReg, and only uses of
// SrcReg:SubIdx should be replaced. // SrcReg:SubIdx should be replaced.
bool UseSrcSubIdx = bool UseSrcSubIdx =
TM->getSubtargetImpl()->getRegisterInfo()->getSubClassWithSubReg( TRI->getSubClassWithSubReg(MRI->getRegClass(SrcReg), SubIdx) != nullptr;
MRI->getRegClass(SrcReg), SubIdx) != nullptr;
// The source has other uses. See if we can replace the other uses with use of // The source has other uses. See if we can replace the other uses with use of
// the result of the extension. // the result of the extension.
@ -548,7 +547,6 @@ bool PeepholeOptimizer::findNextSource(unsigned &Reg, unsigned &SubReg) {
unsigned Src; unsigned Src;
unsigned SrcSubReg; unsigned SrcSubReg;
bool ShouldRewrite = false; bool ShouldRewrite = false;
const TargetRegisterInfo &TRI = *TM->getSubtargetImpl()->getRegisterInfo();
// Follow the chain of copies until we reach the top of the use-def chain // Follow the chain of copies until we reach the top of the use-def chain
// or find a more suitable source. // or find a more suitable source.
@ -571,7 +569,7 @@ bool PeepholeOptimizer::findNextSource(unsigned &Reg, unsigned &SubReg) {
const TargetRegisterClass *SrcRC = MRI->getRegClass(Src); const TargetRegisterClass *SrcRC = MRI->getRegClass(Src);
// If this source does not incur a cross register bank copy, use it. // If this source does not incur a cross register bank copy, use it.
ShouldRewrite = shareSameRegisterFile(TRI, DefRC, DefSubReg, SrcRC, ShouldRewrite = shareSameRegisterFile(*TRI, DefRC, DefSubReg, SrcRC,
SrcSubReg); SrcSubReg);
} while (!ShouldRewrite); } while (!ShouldRewrite);
@ -1047,24 +1045,25 @@ bool PeepholeOptimizer::foldImmediate(MachineInstr *MI, MachineBasicBlock *MBB,
return false; return false;
} }
bool PeepholeOptimizer::runOnMachineFunction(MachineFunction &MF) { bool PeepholeOptimizer::runOnMachineFunction(MachineFunction &mf) {
if (skipOptnoneFunction(*MF.getFunction())) if (skipOptnoneFunction(*mf.getFunction()))
return false; return false;
DEBUG(dbgs() << "********** PEEPHOLE OPTIMIZER **********\n"); DEBUG(dbgs() << "********** PEEPHOLE OPTIMIZER **********\n");
DEBUG(dbgs() << "********** Function: " << MF.getName() << '\n'); DEBUG(dbgs() << "********** Function: " << mf.getName() << '\n');
if (DisablePeephole) if (DisablePeephole)
return false; return false;
TM = &MF.getTarget(); MF = &mf;
TII = TM->getSubtargetImpl()->getInstrInfo(); TII = MF->getSubtarget().getInstrInfo();
MRI = &MF.getRegInfo(); TRI = MF->getSubtarget().getRegisterInfo();
MRI = &MF->getRegInfo();
DT = Aggressive ? &getAnalysis<MachineDominatorTree>() : nullptr; DT = Aggressive ? &getAnalysis<MachineDominatorTree>() : nullptr;
bool Changed = false; bool Changed = false;
for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ++I) { for (MachineFunction::iterator I = MF->begin(), E = MF->end(); I != E; ++I) {
MachineBasicBlock *MBB = &*I; MachineBasicBlock *MBB = &*I;
bool SeenMoveImm = false; bool SeenMoveImm = false;