1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 19:12:56 +02:00

Don't cache the instruction and register info from the TargetMachine, because

the internals of TargetMachine could change.

No functionality change intended.

llvm-svn: 183494
This commit is contained in:
Bill Wendling 2013-06-07 07:55:53 +00:00
parent d6271f8e18
commit 56998a5288
7 changed files with 27 additions and 20 deletions

View File

@ -71,8 +71,8 @@ void PPCScoreboardHazardRecognizer::Reset() {
// 3. Handling of the esoteric cases in "Resource-based Instruction Grouping". // 3. Handling of the esoteric cases in "Resource-based Instruction Grouping".
// //
PPCHazardRecognizer970::PPCHazardRecognizer970(const TargetInstrInfo &tii) PPCHazardRecognizer970::PPCHazardRecognizer970(const TargetMachine &TM)
: TII(tii) { : TM(TM) {
EndDispatchGroup(); EndDispatchGroup();
} }
@ -91,7 +91,7 @@ PPCHazardRecognizer970::GetInstrType(unsigned Opcode,
bool &isFirst, bool &isSingle, bool &isFirst, bool &isSingle,
bool &isCracked, bool &isCracked,
bool &isLoad, bool &isStore) { bool &isLoad, bool &isStore) {
const MCInstrDesc &MCID = TII.get(Opcode); const MCInstrDesc &MCID = TM.getInstrInfo()->get(Opcode);
isLoad = MCID.mayLoad(); isLoad = MCID.mayLoad();
isStore = MCID.mayStore(); isStore = MCID.mayStore();

View File

@ -43,7 +43,7 @@ public:
/// setting the CTR register then branching through it within a dispatch group), /// setting the CTR register then branching through it within a dispatch group),
/// or storing then loading from the same address within a dispatch group. /// or storing then loading from the same address within a dispatch group.
class PPCHazardRecognizer970 : public ScheduleHazardRecognizer { class PPCHazardRecognizer970 : public ScheduleHazardRecognizer {
const TargetInstrInfo &TII; const TargetMachine &TM;
unsigned NumIssued; // Number of insts issued, including advanced cycles. unsigned NumIssued; // Number of insts issued, including advanced cycles.
@ -64,7 +64,7 @@ class PPCHazardRecognizer970 : public ScheduleHazardRecognizer {
unsigned NumStores; unsigned NumStores;
public: public:
PPCHazardRecognizer970(const TargetInstrInfo &TII); PPCHazardRecognizer970(const TargetMachine &TM);
virtual HazardType getHazardType(SUnit *SU, int Stalls); virtual HazardType getHazardType(SUnit *SU, int Stalls);
virtual void EmitInstruction(SUnit *SU); virtual void EmitInstruction(SUnit *SU);
virtual void AdvanceCycle(); virtual void AdvanceCycle();

View File

@ -74,8 +74,6 @@ static TargetLoweringObjectFile *CreateTLOF(const PPCTargetMachine &TM) {
PPCTargetLowering::PPCTargetLowering(PPCTargetMachine &TM) PPCTargetLowering::PPCTargetLowering(PPCTargetMachine &TM)
: TargetLowering(TM, CreateTLOF(TM)), PPCSubTarget(*TM.getSubtargetImpl()) { : TargetLowering(TM, CreateTLOF(TM)), PPCSubTarget(*TM.getSubtargetImpl()) {
const PPCSubtarget *Subtarget = &TM.getSubtarget<PPCSubtarget>(); const PPCSubtarget *Subtarget = &TM.getSubtarget<PPCSubtarget>();
PPCRegInfo = TM.getRegisterInfo();
PPCII = TM.getInstrInfo();
setPow2DivIsCheap(); setPow2DivIsCheap();
@ -6072,7 +6070,9 @@ PPCTargetLowering::emitEHSjLjSetJmp(MachineInstr *MI,
// Setup // Setup
MIB = BuildMI(*thisMBB, MI, DL, TII->get(PPC::BCLalways)).addMBB(mainMBB); MIB = BuildMI(*thisMBB, MI, DL, TII->get(PPC::BCLalways)).addMBB(mainMBB);
MIB.addRegMask(PPCRegInfo->getNoPreservedMask()); const PPCRegisterInfo *TRI =
static_cast<const PPCRegisterInfo*>(getTargetMachine().getRegisterInfo());
MIB.addRegMask(TRI->getNoPreservedMask());
BuildMI(*thisMBB, MI, DL, TII->get(PPC::LI), restoreDstReg).addImm(1); BuildMI(*thisMBB, MI, DL, TII->get(PPC::LI), restoreDstReg).addImm(1);
@ -6235,8 +6235,10 @@ PPCTargetLowering::EmitInstrWithCustomInserter(MachineInstr *MI,
Cond.push_back(MI->getOperand(1)); Cond.push_back(MI->getOperand(1));
DebugLoc dl = MI->getDebugLoc(); DebugLoc dl = MI->getDebugLoc();
PPCII->insertSelect(*BB, MI, dl, MI->getOperand(0).getReg(), Cond, const TargetInstrInfo *TII = getTargetMachine().getInstrInfo();
MI->getOperand(2).getReg(), MI->getOperand(3).getReg()); TII->insertSelect(*BB, MI, dl, MI->getOperand(0).getReg(),
Cond, MI->getOperand(2).getReg(),
MI->getOperand(3).getReg());
} else if (MI->getOpcode() == PPC::SELECT_CC_I4 || } else if (MI->getOpcode() == PPC::SELECT_CC_I4 ||
MI->getOpcode() == PPC::SELECT_CC_I8 || MI->getOpcode() == PPC::SELECT_CC_I8 ||
MI->getOpcode() == PPC::SELECT_CC_F4 || MI->getOpcode() == PPC::SELECT_CC_F4 ||

View File

@ -335,8 +335,6 @@ namespace llvm {
class PPCTargetLowering : public TargetLowering { class PPCTargetLowering : public TargetLowering {
const PPCSubtarget &PPCSubTarget; const PPCSubtarget &PPCSubTarget;
const PPCRegisterInfo *PPCRegInfo;
const PPCInstrInfo *PPCII;
public: public:
explicit PPCTargetLowering(PPCTargetMachine &TM); explicit PPCTargetLowering(PPCTargetMachine &TM);

View File

@ -47,7 +47,7 @@ cl::desc("Disable compare instruction optimization"), cl::Hidden);
PPCInstrInfo::PPCInstrInfo(PPCTargetMachine &tm) PPCInstrInfo::PPCInstrInfo(PPCTargetMachine &tm)
: PPCGenInstrInfo(PPC::ADJCALLSTACKDOWN, PPC::ADJCALLSTACKUP), : PPCGenInstrInfo(PPC::ADJCALLSTACKDOWN, PPC::ADJCALLSTACKUP),
TM(tm), RI(*TM.getSubtargetImpl(), *this) {} TM(tm), RI(*TM.getSubtargetImpl()) {}
/// CreateTargetHazardRecognizer - Return the hazard recognizer to use for /// CreateTargetHazardRecognizer - Return the hazard recognizer to use for
/// this target when scheduling the DAG. /// this target when scheduling the DAG.
@ -77,7 +77,7 @@ ScheduleHazardRecognizer *PPCInstrInfo::CreateTargetPostRAHazardRecognizer(
const TargetInstrInfo *TII = TM.getInstrInfo(); const TargetInstrInfo *TII = TM.getInstrInfo();
assert(TII && "No InstrInfo?"); assert(TII && "No InstrInfo?");
return new PPCHazardRecognizer970(*TII); return new PPCHazardRecognizer970(TM);
} }
return new PPCScoreboardHazardRecognizer(II, DAG); return new PPCScoreboardHazardRecognizer(II, DAG);

View File

@ -48,12 +48,11 @@
using namespace llvm; using namespace llvm;
PPCRegisterInfo::PPCRegisterInfo(const PPCSubtarget &ST, PPCRegisterInfo::PPCRegisterInfo(const PPCSubtarget &ST)
const TargetInstrInfo &tii)
: PPCGenRegisterInfo(ST.isPPC64() ? PPC::LR8 : PPC::LR, : PPCGenRegisterInfo(ST.isPPC64() ? PPC::LR8 : PPC::LR,
ST.isPPC64() ? 0 : 1, ST.isPPC64() ? 0 : 1,
ST.isPPC64() ? 0 : 1), ST.isPPC64() ? 0 : 1),
Subtarget(ST), TII(tii) { Subtarget(ST) {
ImmToIdxMap[PPC::LD] = PPC::LDX; ImmToIdxMap[PPC::STD] = PPC::STDX; ImmToIdxMap[PPC::LD] = PPC::LDX; ImmToIdxMap[PPC::STD] = PPC::STDX;
ImmToIdxMap[PPC::LBZ] = PPC::LBZX; ImmToIdxMap[PPC::STB] = PPC::STBX; ImmToIdxMap[PPC::LBZ] = PPC::LBZX; ImmToIdxMap[PPC::STB] = PPC::STBX;
ImmToIdxMap[PPC::LHZ] = PPC::LHZX; ImmToIdxMap[PPC::LHA] = PPC::LHAX; ImmToIdxMap[PPC::LHZ] = PPC::LHZX; ImmToIdxMap[PPC::LHA] = PPC::LHAX;
@ -219,6 +218,8 @@ void PPCRegisterInfo::lowerDynamicAlloc(MachineBasicBlock::iterator II) const {
MachineFunction &MF = *MBB.getParent(); MachineFunction &MF = *MBB.getParent();
// Get the frame info. // Get the frame info.
MachineFrameInfo *MFI = MF.getFrameInfo(); MachineFrameInfo *MFI = MF.getFrameInfo();
// Get the instruction info.
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
// Determine whether 64-bit pointers are used. // Determine whether 64-bit pointers are used.
bool LP64 = Subtarget.isPPC64(); bool LP64 = Subtarget.isPPC64();
DebugLoc dl = MI.getDebugLoc(); DebugLoc dl = MI.getDebugLoc();
@ -312,6 +313,7 @@ void PPCRegisterInfo::lowerCRSpilling(MachineBasicBlock::iterator II,
// Get the instruction's basic block. // Get the instruction's basic block.
MachineBasicBlock &MBB = *MI.getParent(); MachineBasicBlock &MBB = *MI.getParent();
MachineFunction &MF = *MBB.getParent(); MachineFunction &MF = *MBB.getParent();
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
DebugLoc dl = MI.getDebugLoc(); DebugLoc dl = MI.getDebugLoc();
bool LP64 = Subtarget.isPPC64(); bool LP64 = Subtarget.isPPC64();
@ -355,6 +357,7 @@ void PPCRegisterInfo::lowerCRRestore(MachineBasicBlock::iterator II,
// Get the instruction's basic block. // Get the instruction's basic block.
MachineBasicBlock &MBB = *MI.getParent(); MachineBasicBlock &MBB = *MI.getParent();
MachineFunction &MF = *MBB.getParent(); MachineFunction &MF = *MBB.getParent();
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
DebugLoc dl = MI.getDebugLoc(); DebugLoc dl = MI.getDebugLoc();
bool LP64 = Subtarget.isPPC64(); bool LP64 = Subtarget.isPPC64();
@ -396,6 +399,7 @@ void PPCRegisterInfo::lowerVRSAVESpilling(MachineBasicBlock::iterator II,
// Get the instruction's basic block. // Get the instruction's basic block.
MachineBasicBlock &MBB = *MI.getParent(); MachineBasicBlock &MBB = *MI.getParent();
MachineFunction &MF = *MBB.getParent(); MachineFunction &MF = *MBB.getParent();
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
DebugLoc dl = MI.getDebugLoc(); DebugLoc dl = MI.getDebugLoc();
const TargetRegisterClass *GPRC = &PPC::GPRCRegClass; const TargetRegisterClass *GPRC = &PPC::GPRCRegClass;
@ -420,6 +424,7 @@ void PPCRegisterInfo::lowerVRSAVERestore(MachineBasicBlock::iterator II,
// Get the instruction's basic block. // Get the instruction's basic block.
MachineBasicBlock &MBB = *MI.getParent(); MachineBasicBlock &MBB = *MI.getParent();
MachineFunction &MF = *MBB.getParent(); MachineFunction &MF = *MBB.getParent();
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
DebugLoc dl = MI.getDebugLoc(); DebugLoc dl = MI.getDebugLoc();
const TargetRegisterClass *GPRC = &PPC::GPRCRegClass; const TargetRegisterClass *GPRC = &PPC::GPRCRegClass;
@ -497,6 +502,8 @@ PPCRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
MachineBasicBlock &MBB = *MI.getParent(); MachineBasicBlock &MBB = *MI.getParent();
// Get the basic block's function. // Get the basic block's function.
MachineFunction &MF = *MBB.getParent(); MachineFunction &MF = *MBB.getParent();
// Get the instruction info.
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
// Get the frame info. // Get the frame info.
MachineFrameInfo *MFI = MF.getFrameInfo(); MachineFrameInfo *MFI = MF.getFrameInfo();
const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering(); const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering();
@ -706,9 +713,10 @@ materializeFrameBaseRegister(MachineBasicBlock *MBB,
if (Ins != MBB->end()) if (Ins != MBB->end())
DL = Ins->getDebugLoc(); DL = Ins->getDebugLoc();
const MachineFunction &MF = *MBB->getParent();
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
const MCInstrDesc &MCID = TII.get(ADDriOpc); const MCInstrDesc &MCID = TII.get(ADDriOpc);
MachineRegisterInfo &MRI = MBB->getParent()->getRegInfo(); MachineRegisterInfo &MRI = MBB->getParent()->getRegInfo();
const MachineFunction &MF = *MBB->getParent();
MRI.constrainRegClass(BaseReg, TII.getRegClass(MCID, 0, this, MF)); MRI.constrainRegClass(BaseReg, TII.getRegClass(MCID, 0, this, MF));
BuildMI(*MBB, Ins, DL, MCID, BaseReg) BuildMI(*MBB, Ins, DL, MCID, BaseReg)

View File

@ -29,9 +29,8 @@ class Type;
class PPCRegisterInfo : public PPCGenRegisterInfo { class PPCRegisterInfo : public PPCGenRegisterInfo {
DenseMap<unsigned, unsigned> ImmToIdxMap; DenseMap<unsigned, unsigned> ImmToIdxMap;
const PPCSubtarget &Subtarget; const PPCSubtarget &Subtarget;
const TargetInstrInfo &TII;
public: public:
PPCRegisterInfo(const PPCSubtarget &SubTarget, const TargetInstrInfo &tii); PPCRegisterInfo(const PPCSubtarget &SubTarget);
/// getPointerRegClass - Return the register class to use to hold pointers. /// getPointerRegClass - Return the register class to use to hold pointers.
/// This is used for addressing modes. /// This is used for addressing modes.