mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Don't cache the instruction and register info from the TargetMachine, because
the internals of TargetMachine could change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183493 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
ed8b5b55a4
commit
41e632d9e1
@ -37,7 +37,7 @@ static cl::opt<bool> NeverUseSaveRestore(
|
||||
|
||||
Mips16InstrInfo::Mips16InstrInfo(MipsTargetMachine &tm)
|
||||
: MipsInstrInfo(tm, Mips::BimmX16),
|
||||
RI(*tm.getSubtargetImpl(), *this) {}
|
||||
RI(*tm.getSubtargetImpl()) {}
|
||||
|
||||
const MipsRegisterInfo &Mips16InstrInfo::getRegisterInfo() const {
|
||||
return RI;
|
||||
|
@ -41,9 +41,8 @@
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
Mips16RegisterInfo::Mips16RegisterInfo(const MipsSubtarget &ST,
|
||||
const Mips16InstrInfo &I)
|
||||
: MipsRegisterInfo(ST), TII(I) {}
|
||||
Mips16RegisterInfo::Mips16RegisterInfo(const MipsSubtarget &ST)
|
||||
: MipsRegisterInfo(ST) {}
|
||||
|
||||
bool Mips16RegisterInfo::requiresRegisterScavenging
|
||||
(const MachineFunction &MF) const {
|
||||
@ -66,6 +65,7 @@ bool Mips16RegisterInfo::saveScavengerRegister
|
||||
const TargetRegisterClass *RC,
|
||||
unsigned Reg) const {
|
||||
DebugLoc DL;
|
||||
const TargetInstrInfo &TII = *MBB.getParent()->getTarget().getInstrInfo();
|
||||
TII.copyPhysReg(MBB, I, DL, Mips::T0, Reg, true);
|
||||
TII.copyPhysReg(MBB, UseMI, DL, Reg, Mips::T0, true);
|
||||
return true;
|
||||
@ -139,6 +139,9 @@ void Mips16RegisterInfo::eliminateFI(MachineBasicBlock::iterator II,
|
||||
MachineBasicBlock &MBB = *MI.getParent();
|
||||
DebugLoc DL = II->getDebugLoc();
|
||||
unsigned NewImm;
|
||||
const Mips16InstrInfo &TII =
|
||||
*static_cast<const Mips16InstrInfo*>(
|
||||
MBB.getParent()->getTarget().getInstrInfo());
|
||||
FrameReg = TII.loadImmediate(FrameReg, Offset, MBB, II, DL, NewImm);
|
||||
Offset = SignExtend64<16>(NewImm);
|
||||
IsKill = true;
|
||||
|
@ -20,10 +20,8 @@ namespace llvm {
|
||||
class Mips16InstrInfo;
|
||||
|
||||
class Mips16RegisterInfo : public MipsRegisterInfo {
|
||||
const Mips16InstrInfo &TII;
|
||||
public:
|
||||
Mips16RegisterInfo(const MipsSubtarget &Subtarget,
|
||||
const Mips16InstrInfo &TII);
|
||||
Mips16RegisterInfo(const MipsSubtarget &Subtarget);
|
||||
|
||||
bool requiresRegisterScavenging(const MachineFunction &MF) const;
|
||||
|
||||
|
@ -65,8 +65,7 @@ class MipsCodeEmitter : public MachineFunctionPass {
|
||||
|
||||
public:
|
||||
MipsCodeEmitter(TargetMachine &tm, JITCodeEmitter &mce)
|
||||
: MachineFunctionPass(ID), JTI(0),
|
||||
II((const MipsInstrInfo *) tm.getInstrInfo()), TD(tm.getDataLayout()),
|
||||
: MachineFunctionPass(ID), JTI(0), II(0), TD(0),
|
||||
TM(tm), MCE(mce), MCPEs(0), MJTEs(0),
|
||||
IsPIC(TM.getRelocationModel() == Reloc::PIC_) {}
|
||||
|
||||
|
@ -50,7 +50,6 @@ namespace {
|
||||
static char ID;
|
||||
MipsConstantIslands(TargetMachine &tm)
|
||||
: MachineFunctionPass(ID), TM(tm),
|
||||
TII(static_cast<const MipsInstrInfo*>(tm.getInstrInfo())),
|
||||
IsPIC(TM.getRelocationModel() == Reloc::PIC_),
|
||||
ABI(TM.getSubtarget<MipsSubtarget>().getTargetABI()) {}
|
||||
|
||||
@ -61,13 +60,9 @@ namespace {
|
||||
bool runOnMachineFunction(MachineFunction &F);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
const TargetMachine &TM;
|
||||
const MipsInstrInfo *TII;
|
||||
bool IsPIC;
|
||||
unsigned ABI;
|
||||
|
||||
};
|
||||
|
||||
char MipsConstantIslands::ID = 0;
|
||||
|
@ -177,7 +177,7 @@ namespace {
|
||||
class Filler : public MachineFunctionPass {
|
||||
public:
|
||||
Filler(TargetMachine &tm)
|
||||
: MachineFunctionPass(ID), TM(tm), TII(tm.getInstrInfo()) { }
|
||||
: MachineFunctionPass(ID), TM(tm) { }
|
||||
|
||||
virtual const char *getPassName() const {
|
||||
return "Mips Delay Slot Filler";
|
||||
@ -243,7 +243,6 @@ namespace {
|
||||
bool terminateSearch(const MachineInstr &Candidate) const;
|
||||
|
||||
TargetMachine &TM;
|
||||
const TargetInstrInfo *TII;
|
||||
|
||||
static char ID;
|
||||
};
|
||||
@ -514,6 +513,8 @@ bool Filler::runOnMachineBasicBlock(MachineBasicBlock &MBB) {
|
||||
}
|
||||
|
||||
// Bundle the NOP to the instruction with the delay slot.
|
||||
const MipsInstrInfo *TII =
|
||||
static_cast<const MipsInstrInfo*>(TM.getInstrInfo());
|
||||
BuildMI(MBB, llvm::next(I), I->getDebugLoc(), TII->get(Mips::NOP));
|
||||
MIBundleBuilder(MBB, I, llvm::next(llvm::next(I)));
|
||||
}
|
||||
|
@ -65,7 +65,6 @@ namespace {
|
||||
static char ID;
|
||||
MipsLongBranch(TargetMachine &tm)
|
||||
: MachineFunctionPass(ID), TM(tm),
|
||||
TII(static_cast<const MipsInstrInfo*>(tm.getInstrInfo())),
|
||||
IsPIC(TM.getRelocationModel() == Reloc::PIC_),
|
||||
ABI(TM.getSubtarget<MipsSubtarget>().getTargetABI()),
|
||||
LongBranchSeqSize(!IsPIC ? 2 : (ABI == MipsSubtarget::N64 ? 13 : 9)) {}
|
||||
@ -85,7 +84,6 @@ namespace {
|
||||
void expandToLongBranch(MBBInfo &Info);
|
||||
|
||||
const TargetMachine &TM;
|
||||
const MipsInstrInfo *TII;
|
||||
MachineFunction *MF;
|
||||
SmallVector<MBBInfo, 16> MBBInfos;
|
||||
bool IsPIC;
|
||||
@ -172,6 +170,8 @@ void MipsLongBranch::initMBBInfo() {
|
||||
MBBInfos.clear();
|
||||
MBBInfos.resize(MF->size());
|
||||
|
||||
const MipsInstrInfo *TII =
|
||||
static_cast<const MipsInstrInfo*>(TM.getInstrInfo());
|
||||
for (unsigned I = 0, E = MBBInfos.size(); I < E; ++I) {
|
||||
MachineBasicBlock *MBB = MF->getBlockNumbered(I);
|
||||
|
||||
@ -217,6 +217,8 @@ int64_t MipsLongBranch::computeOffset(const MachineInstr *Br) {
|
||||
// MachineBasicBlock operand MBBOpnd.
|
||||
void MipsLongBranch::replaceBranch(MachineBasicBlock &MBB, Iter Br,
|
||||
DebugLoc DL, MachineBasicBlock *MBBOpnd) {
|
||||
const MipsInstrInfo *TII =
|
||||
static_cast<const MipsInstrInfo*>(TM.getInstrInfo());
|
||||
unsigned NewOpc = TII->getOppositeBranchOpc(Br->getOpcode());
|
||||
const MCInstrDesc &NewDesc = TII->get(NewOpc);
|
||||
|
||||
@ -247,6 +249,9 @@ void MipsLongBranch::expandToLongBranch(MBBInfo &I) {
|
||||
MachineFunction::iterator FallThroughMBB = ++MachineFunction::iterator(MBB);
|
||||
MachineBasicBlock *LongBrMBB = MF->CreateMachineBasicBlock(BB);
|
||||
|
||||
const MipsInstrInfo *TII =
|
||||
static_cast<const MipsInstrInfo*>(TM.getInstrInfo());
|
||||
|
||||
MF->insert(FallThroughMBB, LongBrMBB);
|
||||
MBB->removeSuccessor(TgtMBB);
|
||||
MBB->addSuccessor(LongBrMBB);
|
||||
@ -399,6 +404,9 @@ static void emitGPDisp(MachineFunction &F, const MipsInstrInfo *TII) {
|
||||
}
|
||||
|
||||
bool MipsLongBranch::runOnMachineFunction(MachineFunction &F) {
|
||||
const MipsInstrInfo *TII =
|
||||
static_cast<const MipsInstrInfo*>(TM.getInstrInfo());
|
||||
|
||||
if (TM.getSubtarget<MipsSubtarget>().inMips16Mode())
|
||||
return false;
|
||||
if ((TM.getRelocationModel() == Reloc::PIC_) &&
|
||||
|
@ -49,16 +49,12 @@ private:
|
||||
unsigned Src, unsigned RegSize);
|
||||
|
||||
MachineFunction &MF;
|
||||
const MipsSEInstrInfo &TII;
|
||||
const MipsRegisterInfo &RegInfo;
|
||||
MachineRegisterInfo &MRI;
|
||||
};
|
||||
}
|
||||
|
||||
ExpandPseudo::ExpandPseudo(MachineFunction &MF_)
|
||||
: MF(MF_),
|
||||
TII(*static_cast<const MipsSEInstrInfo*>(MF.getTarget().getInstrInfo())),
|
||||
RegInfo(TII.getRegisterInfo()), MRI(MF.getRegInfo()) {}
|
||||
: MF(MF_), MRI(MF.getRegInfo()) {}
|
||||
|
||||
bool ExpandPseudo::expand() {
|
||||
bool Expanded = false;
|
||||
@ -119,6 +115,11 @@ void ExpandPseudo::expandLoadCCond(MachineBasicBlock &MBB, Iter I) {
|
||||
|
||||
assert(I->getOperand(0).isReg() && I->getOperand(1).isFI());
|
||||
|
||||
const MipsSEInstrInfo &TII =
|
||||
*static_cast<const MipsSEInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
const MipsRegisterInfo &RegInfo =
|
||||
*static_cast<const MipsRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||
|
||||
const TargetRegisterClass *RC = RegInfo.intRegClass(4);
|
||||
unsigned VR = MRI.createVirtualRegister(RC);
|
||||
unsigned Dst = I->getOperand(0).getReg(), FI = I->getOperand(1).getIndex();
|
||||
@ -134,6 +135,11 @@ void ExpandPseudo::expandStoreCCond(MachineBasicBlock &MBB, Iter I) {
|
||||
|
||||
assert(I->getOperand(0).isReg() && I->getOperand(1).isFI());
|
||||
|
||||
const MipsSEInstrInfo &TII =
|
||||
*static_cast<const MipsSEInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
const MipsRegisterInfo &RegInfo =
|
||||
*static_cast<const MipsRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||
|
||||
const TargetRegisterClass *RC = RegInfo.intRegClass(4);
|
||||
unsigned VR = MRI.createVirtualRegister(RC);
|
||||
unsigned Src = I->getOperand(0).getReg(), FI = I->getOperand(1).getIndex();
|
||||
@ -152,6 +158,11 @@ void ExpandPseudo::expandLoadACC(MachineBasicBlock &MBB, Iter I,
|
||||
|
||||
assert(I->getOperand(0).isReg() && I->getOperand(1).isFI());
|
||||
|
||||
const MipsSEInstrInfo &TII =
|
||||
*static_cast<const MipsSEInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
const MipsRegisterInfo &RegInfo =
|
||||
*static_cast<const MipsRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||
|
||||
const TargetRegisterClass *RC = RegInfo.intRegClass(RegSize);
|
||||
unsigned VR0 = MRI.createVirtualRegister(RC);
|
||||
unsigned VR1 = MRI.createVirtualRegister(RC);
|
||||
@ -176,6 +187,11 @@ void ExpandPseudo::expandStoreACC(MachineBasicBlock &MBB, Iter I,
|
||||
|
||||
assert(I->getOperand(0).isReg() && I->getOperand(1).isFI());
|
||||
|
||||
const MipsSEInstrInfo &TII =
|
||||
*static_cast<const MipsSEInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
const MipsRegisterInfo &RegInfo =
|
||||
*static_cast<const MipsRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||
|
||||
const TargetRegisterClass *RC = RegInfo.intRegClass(RegSize);
|
||||
unsigned VR0 = MRI.createVirtualRegister(RC);
|
||||
unsigned VR1 = MRI.createVirtualRegister(RC);
|
||||
@ -210,6 +226,11 @@ bool ExpandPseudo::expandCopyACC(MachineBasicBlock &MBB, Iter I, unsigned Dst,
|
||||
// copy $vr1, src_hi
|
||||
// copy dst_hi, $vr1
|
||||
|
||||
const MipsSEInstrInfo &TII =
|
||||
*static_cast<const MipsSEInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
const MipsRegisterInfo &RegInfo =
|
||||
*static_cast<const MipsRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||
|
||||
const TargetRegisterClass *RC = RegInfo.intRegClass(RegSize);
|
||||
unsigned VR0 = MRI.createVirtualRegister(RC);
|
||||
unsigned VR1 = MRI.createVirtualRegister(RC);
|
||||
@ -244,10 +265,12 @@ void MipsSEFrameLowering::emitPrologue(MachineFunction &MF) const {
|
||||
MachineBasicBlock &MBB = MF.front();
|
||||
MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
MipsFunctionInfo *MipsFI = MF.getInfo<MipsFunctionInfo>();
|
||||
const MipsRegisterInfo *RegInfo =
|
||||
static_cast<const MipsRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||
|
||||
const MipsSEInstrInfo &TII =
|
||||
*static_cast<const MipsSEInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
const MipsRegisterInfo &RegInfo =
|
||||
*static_cast<const MipsRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||
|
||||
MachineBasicBlock::iterator MBBI = MBB.begin();
|
||||
DebugLoc dl = MBBI != MBB.end() ? MBBI->getDebugLoc() : DebugLoc();
|
||||
unsigned SP = STI.isABI_N64() ? Mips::SP_64 : Mips::SP;
|
||||
@ -298,9 +321,9 @@ void MipsSEFrameLowering::emitPrologue(MachineFunction &MF) const {
|
||||
// one for each of the paired single precision registers.
|
||||
if (Mips::AFGR64RegClass.contains(Reg)) {
|
||||
unsigned Reg0 =
|
||||
MRI.getDwarfRegNum(RegInfo->getSubReg(Reg, Mips::sub_fpeven), true);
|
||||
MRI.getDwarfRegNum(RegInfo.getSubReg(Reg, Mips::sub_fpeven), true);
|
||||
unsigned Reg1 =
|
||||
MRI.getDwarfRegNum(RegInfo->getSubReg(Reg, Mips::sub_fpodd), true);
|
||||
MRI.getDwarfRegNum(RegInfo.getSubReg(Reg, Mips::sub_fpodd), true);
|
||||
|
||||
if (!STI.isLittle())
|
||||
std::swap(Reg0, Reg1);
|
||||
@ -326,7 +349,7 @@ void MipsSEFrameLowering::emitPrologue(MachineFunction &MF) const {
|
||||
if (!MBB.isLiveIn(ehDataReg(I)))
|
||||
MBB.addLiveIn(ehDataReg(I));
|
||||
TII.storeRegToStackSlot(MBB, MBBI, ehDataReg(I), false,
|
||||
MipsFI->getEhDataRegFI(I), RC, RegInfo);
|
||||
MipsFI->getEhDataRegFI(I), RC, &RegInfo);
|
||||
}
|
||||
|
||||
// Emit .cfi_offset directives for eh data registers.
|
||||
@ -359,10 +382,12 @@ void MipsSEFrameLowering::emitEpilogue(MachineFunction &MF,
|
||||
MachineBasicBlock::iterator MBBI = MBB.getLastNonDebugInstr();
|
||||
MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
MipsFunctionInfo *MipsFI = MF.getInfo<MipsFunctionInfo>();
|
||||
const MipsRegisterInfo *RegInfo =
|
||||
static_cast<const MipsRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||
|
||||
const MipsSEInstrInfo &TII =
|
||||
*static_cast<const MipsSEInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
const MipsRegisterInfo &RegInfo =
|
||||
*static_cast<const MipsRegisterInfo*>(MF.getTarget().getRegisterInfo());
|
||||
|
||||
DebugLoc dl = MBBI->getDebugLoc();
|
||||
unsigned SP = STI.isABI_N64() ? Mips::SP_64 : Mips::SP;
|
||||
unsigned FP = STI.isABI_N64() ? Mips::FP_64 : Mips::FP;
|
||||
@ -393,7 +418,7 @@ void MipsSEFrameLowering::emitEpilogue(MachineFunction &MF,
|
||||
// Insert instructions that restore eh data registers.
|
||||
for (int J = 0; J < 4; ++J) {
|
||||
TII.loadRegFromStackSlot(MBB, I, ehDataReg(J), MipsFI->getEhDataRegFI(J),
|
||||
RC, RegInfo);
|
||||
RC, &RegInfo);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ static cl::opt<bool> NoDPLoadStore("mno-ldc1-sdc1", cl::init(false),
|
||||
MipsSEInstrInfo::MipsSEInstrInfo(MipsTargetMachine &tm)
|
||||
: MipsInstrInfo(tm,
|
||||
tm.getRelocationModel() == Reloc::PIC_ ? Mips::B : Mips::J),
|
||||
RI(*tm.getSubtargetImpl(), *this),
|
||||
RI(*tm.getSubtargetImpl()),
|
||||
IsN64(tm.getSubtarget<MipsSubtarget>().isABI_N64()) {}
|
||||
|
||||
const MipsRegisterInfo &MipsSEInstrInfo::getRegisterInfo() const {
|
||||
|
@ -40,9 +40,8 @@
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
MipsSERegisterInfo::MipsSERegisterInfo(const MipsSubtarget &ST,
|
||||
const MipsSEInstrInfo &I)
|
||||
: MipsRegisterInfo(ST), TII(I) {}
|
||||
MipsSERegisterInfo::MipsSERegisterInfo(const MipsSubtarget &ST)
|
||||
: MipsRegisterInfo(ST) {}
|
||||
|
||||
bool MipsSERegisterInfo::
|
||||
requiresRegisterScavenging(const MachineFunction &MF) const {
|
||||
@ -119,7 +118,9 @@ void MipsSERegisterInfo::eliminateFI(MachineBasicBlock::iterator II,
|
||||
DebugLoc DL = II->getDebugLoc();
|
||||
unsigned ADDu = Subtarget.isABI_N64() ? Mips::DADDu : Mips::ADDu;
|
||||
unsigned NewImm;
|
||||
|
||||
const MipsSEInstrInfo &TII =
|
||||
*static_cast<const MipsSEInstrInfo*>(
|
||||
MBB.getParent()->getTarget().getInstrInfo());
|
||||
unsigned Reg = TII.loadImmediate(Offset, MBB, II, DL, &NewImm);
|
||||
BuildMI(MBB, II, DL, TII.get(ADDu), Reg).addReg(FrameReg)
|
||||
.addReg(Reg, RegState::Kill);
|
||||
|
@ -21,11 +21,8 @@ namespace llvm {
|
||||
class MipsSEInstrInfo;
|
||||
|
||||
class MipsSERegisterInfo : public MipsRegisterInfo {
|
||||
const MipsSEInstrInfo &TII;
|
||||
|
||||
public:
|
||||
MipsSERegisterInfo(const MipsSubtarget &Subtarget,
|
||||
const MipsSEInstrInfo &TII);
|
||||
MipsSERegisterInfo(const MipsSubtarget &Subtarget);
|
||||
|
||||
bool requiresRegisterScavenging(const MachineFunction &MF) const;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user