mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +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@183488 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4393f48c03
commit
57148c166a
@ -113,8 +113,7 @@ ScheduleHazardRecognizer *ARMBaseInstrInfo::
|
||||
CreateTargetPostRAHazardRecognizer(const InstrItineraryData *II,
|
||||
const ScheduleDAG *DAG) const {
|
||||
if (Subtarget.isThumb2() || Subtarget.hasVFP2())
|
||||
return (ScheduleHazardRecognizer *)
|
||||
new ARMHazardRecognizer(II, *this, getRegisterInfo(), Subtarget, DAG);
|
||||
return (ScheduleHazardRecognizer *)new ARMHazardRecognizer(II, DAG);
|
||||
return TargetInstrInfo::CreateTargetPostRAHazardRecognizer(II, DAG);
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ public:
|
||||
MachineBasicBlock::iterator &MBBI,
|
||||
LiveVariables *LV) const;
|
||||
|
||||
virtual const ARMBaseRegisterInfo &getRegisterInfo() const =0;
|
||||
virtual const ARMBaseRegisterInfo &getRegisterInfo() const = 0;
|
||||
const ARMSubtarget &getSubtarget() const { return Subtarget; }
|
||||
|
||||
ScheduleHazardRecognizer *
|
||||
|
@ -43,9 +43,8 @@
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
ARMBaseRegisterInfo::ARMBaseRegisterInfo(const ARMBaseInstrInfo &tii,
|
||||
const ARMSubtarget &sti)
|
||||
: ARMGenRegisterInfo(ARM::LR, 0, 0, ARM::PC), TII(tii), STI(sti),
|
||||
ARMBaseRegisterInfo::ARMBaseRegisterInfo(const ARMSubtarget &sti)
|
||||
: ARMGenRegisterInfo(ARM::LR, 0, 0, ARM::PC), STI(sti),
|
||||
FramePtr((STI.isTargetDarwin() || STI.isThumb()) ? ARM::R7 : ARM::R11),
|
||||
BasePtr(ARM::R6) {
|
||||
}
|
||||
@ -376,6 +375,7 @@ emitLoadConstPool(MachineBasicBlock &MBB,
|
||||
ARMCC::CondCodes Pred,
|
||||
unsigned PredReg, unsigned MIFlags) const {
|
||||
MachineFunction &MF = *MBB.getParent();
|
||||
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
|
||||
MachineConstantPool *ConstantPool = MF.getConstantPool();
|
||||
const Constant *C =
|
||||
ConstantInt::get(Type::getInt32Ty(MF.getFunction()->getContext()), Val);
|
||||
@ -557,9 +557,10 @@ materializeFrameBaseRegister(MachineBasicBlock *MBB,
|
||||
if (Ins != MBB->end())
|
||||
DL = Ins->getDebugLoc();
|
||||
|
||||
const MCInstrDesc &MCID = TII.get(ADDriOpc);
|
||||
MachineRegisterInfo &MRI = MBB->getParent()->getRegInfo();
|
||||
const MachineFunction &MF = *MBB->getParent();
|
||||
MachineRegisterInfo &MRI = MBB->getParent()->getRegInfo();
|
||||
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
|
||||
const MCInstrDesc &MCID = TII.get(ADDriOpc);
|
||||
MRI.constrainRegClass(BaseReg, TII.getRegClass(MCID, 0, this, MF));
|
||||
|
||||
MachineInstrBuilder MIB = AddDefaultPred(BuildMI(*MBB, Ins, DL, MCID, BaseReg)
|
||||
@ -575,6 +576,8 @@ ARMBaseRegisterInfo::resolveFrameIndex(MachineBasicBlock::iterator I,
|
||||
MachineInstr &MI = *I;
|
||||
MachineBasicBlock &MBB = *MI.getParent();
|
||||
MachineFunction &MF = *MBB.getParent();
|
||||
const ARMBaseInstrInfo &TII =
|
||||
*static_cast<const ARMBaseInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
ARMFunctionInfo *AFI = MF.getInfo<ARMFunctionInfo>();
|
||||
int Off = Offset; // ARM doesn't need the general 64-bit offsets
|
||||
unsigned i = 0;
|
||||
@ -672,6 +675,8 @@ ARMBaseRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
MachineInstr &MI = *II;
|
||||
MachineBasicBlock &MBB = *MI.getParent();
|
||||
MachineFunction &MF = *MBB.getParent();
|
||||
const ARMBaseInstrInfo &TII =
|
||||
*static_cast<const ARMBaseInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
const ARMFrameLowering *TFI =
|
||||
static_cast<const ARMFrameLowering*>(MF.getTarget().getFrameLowering());
|
||||
ARMFunctionInfo *AFI = MF.getInfo<ARMFunctionInfo>();
|
||||
|
@ -74,7 +74,6 @@ static inline bool isARMArea3Register(unsigned Reg, bool isIOS) {
|
||||
|
||||
class ARMBaseRegisterInfo : public ARMGenRegisterInfo {
|
||||
protected:
|
||||
const ARMBaseInstrInfo &TII;
|
||||
const ARMSubtarget &STI;
|
||||
|
||||
/// FramePtr - ARM physical register used as frame ptr.
|
||||
@ -86,8 +85,7 @@ protected:
|
||||
unsigned BasePtr;
|
||||
|
||||
// Can be only subclassed.
|
||||
explicit ARMBaseRegisterInfo(const ARMBaseInstrInfo &tii,
|
||||
const ARMSubtarget &STI);
|
||||
explicit ARMBaseRegisterInfo(const ARMSubtarget &STI);
|
||||
|
||||
// Return the opcode that implements 'Op', or 0 if no opcode
|
||||
unsigned getOpcode(int Op) const;
|
||||
|
@ -44,10 +44,16 @@ ARMHazardRecognizer::getHazardType(SUnit *SU, int Stalls) {
|
||||
if (LastMI && (MCID.TSFlags & ARMII::DomainMask) != ARMII::DomainGeneral) {
|
||||
MachineInstr *DefMI = LastMI;
|
||||
const MCInstrDesc &LastMCID = LastMI->getDesc();
|
||||
const TargetMachine &TM =
|
||||
MI->getParent()->getParent()->getTarget();
|
||||
const ARMBaseInstrInfo &TII =
|
||||
*static_cast<const ARMBaseInstrInfo*>(TM.getInstrInfo());
|
||||
|
||||
// Skip over one non-VFP / NEON instruction.
|
||||
if (!LastMI->isBarrier() &&
|
||||
// On A9, AGU and NEON/FPU are muxed.
|
||||
!(STI.isLikeA9() && (LastMI->mayLoad() || LastMI->mayStore())) &&
|
||||
!(TII.getSubtarget().isLikeA9() &&
|
||||
(LastMI->mayLoad() || LastMI->mayStore())) &&
|
||||
(LastMCID.TSFlags & ARMII::DomainMask) == ARMII::DomainGeneral) {
|
||||
MachineBasicBlock::iterator I = LastMI;
|
||||
if (I != LastMI->getParent()->begin()) {
|
||||
@ -58,7 +64,7 @@ ARMHazardRecognizer::getHazardType(SUnit *SU, int Stalls) {
|
||||
|
||||
if (TII.isFpMLxInstruction(DefMI->getOpcode()) &&
|
||||
(TII.canCauseFpMLxStall(MI->getOpcode()) ||
|
||||
hasRAWHazard(DefMI, MI, TRI))) {
|
||||
hasRAWHazard(DefMI, MI, TII.getRegisterInfo()))) {
|
||||
// Try to schedule another instruction for the next 4 cycles.
|
||||
if (FpMLxStalls == 0)
|
||||
FpMLxStalls = 4;
|
||||
|
@ -28,21 +28,14 @@ class MachineInstr;
|
||||
/// ARM preRA scheduler uses an unspecialized instance of the
|
||||
/// ScoreboardHazardRecognizer.
|
||||
class ARMHazardRecognizer : public ScoreboardHazardRecognizer {
|
||||
const ARMBaseInstrInfo &TII;
|
||||
const ARMBaseRegisterInfo &TRI;
|
||||
const ARMSubtarget &STI;
|
||||
|
||||
MachineInstr *LastMI;
|
||||
unsigned FpMLxStalls;
|
||||
|
||||
public:
|
||||
ARMHazardRecognizer(const InstrItineraryData *ItinData,
|
||||
const ARMBaseInstrInfo &tii,
|
||||
const ARMBaseRegisterInfo &tri,
|
||||
const ARMSubtarget &sti,
|
||||
const ScheduleDAG *DAG) :
|
||||
ScoreboardHazardRecognizer(ItinData, DAG, "post-RA-sched"), TII(tii),
|
||||
TRI(tri), STI(sti), LastMI(0) {}
|
||||
const ScheduleDAG *DAG)
|
||||
: ScoreboardHazardRecognizer(ItinData, DAG, "post-RA-sched"),
|
||||
LastMI(0) {}
|
||||
|
||||
virtual HazardType getHazardType(SUnit *SU, int Stalls);
|
||||
virtual void Reset();
|
||||
|
@ -29,7 +29,7 @@
|
||||
using namespace llvm;
|
||||
|
||||
ARMInstrInfo::ARMInstrInfo(const ARMSubtarget &STI)
|
||||
: ARMBaseInstrInfo(STI), RI(*this, STI) {
|
||||
: ARMBaseInstrInfo(STI), RI(STI) {
|
||||
}
|
||||
|
||||
/// getNoopForMachoTarget - Return the noop instruction to use for a noop.
|
||||
|
@ -18,7 +18,6 @@ using namespace llvm;
|
||||
|
||||
void ARMRegisterInfo::anchor() { }
|
||||
|
||||
ARMRegisterInfo::ARMRegisterInfo(const ARMBaseInstrInfo &tii,
|
||||
const ARMSubtarget &sti)
|
||||
: ARMBaseRegisterInfo(tii, sti) {
|
||||
ARMRegisterInfo::ARMRegisterInfo(const ARMSubtarget &sti)
|
||||
: ARMBaseRegisterInfo(sti) {
|
||||
}
|
||||
|
@ -19,13 +19,13 @@
|
||||
#include "llvm/Target/TargetRegisterInfo.h"
|
||||
|
||||
namespace llvm {
|
||||
class ARMSubtarget;
|
||||
class ARMBaseInstrInfo;
|
||||
|
||||
class ARMSubtarget;
|
||||
|
||||
struct ARMRegisterInfo : public ARMBaseRegisterInfo {
|
||||
virtual void anchor();
|
||||
public:
|
||||
ARMRegisterInfo(const ARMBaseInstrInfo &tii, const ARMSubtarget &STI);
|
||||
ARMRegisterInfo(const ARMSubtarget &STI);
|
||||
};
|
||||
|
||||
} // end namespace llvm
|
||||
|
@ -22,7 +22,7 @@
|
||||
using namespace llvm;
|
||||
|
||||
Thumb1InstrInfo::Thumb1InstrInfo(const ARMSubtarget &STI)
|
||||
: ARMBaseInstrInfo(STI), RI(*this, STI) {
|
||||
: ARMBaseInstrInfo(STI), RI(STI) {
|
||||
}
|
||||
|
||||
/// getNoopForMachoTarget - Return the noop instruction to use for a noop.
|
||||
|
@ -40,9 +40,8 @@ extern cl::opt<bool> ReuseFrameIndexVals;
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
Thumb1RegisterInfo::Thumb1RegisterInfo(const ARMBaseInstrInfo &tii,
|
||||
const ARMSubtarget &sti)
|
||||
: ARMBaseRegisterInfo(tii, sti) {
|
||||
Thumb1RegisterInfo::Thumb1RegisterInfo(const ARMSubtarget &sti)
|
||||
: ARMBaseRegisterInfo(sti) {
|
||||
}
|
||||
|
||||
const TargetRegisterClass*
|
||||
@ -70,6 +69,7 @@ Thumb1RegisterInfo::emitLoadConstPool(MachineBasicBlock &MBB,
|
||||
ARMCC::CondCodes Pred, unsigned PredReg,
|
||||
unsigned MIFlags) const {
|
||||
MachineFunction &MF = *MBB.getParent();
|
||||
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
|
||||
MachineConstantPool *ConstantPool = MF.getConstantPool();
|
||||
const Constant *C = ConstantInt::get(
|
||||
Type::getInt32Ty(MBB.getParent()->getFunction()->getContext()), Val);
|
||||
@ -488,6 +488,9 @@ void
|
||||
Thumb1RegisterInfo::resolveFrameIndex(MachineBasicBlock::iterator I,
|
||||
unsigned BaseReg, int64_t Offset) const {
|
||||
MachineInstr &MI = *I;
|
||||
const ARMBaseInstrInfo &TII =
|
||||
*static_cast<const ARMBaseInstrInfo*>(
|
||||
MI.getParent()->getParent()->getTarget().getInstrInfo());
|
||||
int Off = Offset; // ARM doesn't need the general 64-bit offsets
|
||||
unsigned i = 0;
|
||||
|
||||
@ -513,6 +516,7 @@ Thumb1RegisterInfo::saveScavengerRegister(MachineBasicBlock &MBB,
|
||||
// off the frame pointer (if, for example, there are alloca() calls in
|
||||
// the function, the offset will be negative. Use R12 instead since that's
|
||||
// a call clobbered register that we know won't be used in Thumb1 mode.
|
||||
const TargetInstrInfo &TII = *MBB.getParent()->getTarget().getInstrInfo();
|
||||
DebugLoc DL;
|
||||
AddDefaultPred(BuildMI(MBB, I, DL, TII.get(ARM::tMOVr))
|
||||
.addReg(ARM::R12, RegState::Define)
|
||||
@ -558,6 +562,8 @@ Thumb1RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
|
||||
MachineInstr &MI = *II;
|
||||
MachineBasicBlock &MBB = *MI.getParent();
|
||||
MachineFunction &MF = *MBB.getParent();
|
||||
const ARMBaseInstrInfo &TII =
|
||||
*static_cast<const ARMBaseInstrInfo*>(MF.getTarget().getInstrInfo());
|
||||
ARMFunctionInfo *AFI = MF.getInfo<ARMFunctionInfo>();
|
||||
DebugLoc dl = MI.getDebugLoc();
|
||||
MachineInstrBuilder MIB(*MBB.getParent(), &MI);
|
||||
|
@ -25,7 +25,7 @@ namespace llvm {
|
||||
|
||||
struct Thumb1RegisterInfo : public ARMBaseRegisterInfo {
|
||||
public:
|
||||
Thumb1RegisterInfo(const ARMBaseInstrInfo &tii, const ARMSubtarget &STI);
|
||||
Thumb1RegisterInfo(const ARMSubtarget &STI);
|
||||
|
||||
const TargetRegisterClass*
|
||||
getLargestLegalSuperClass(const TargetRegisterClass *RC) const;
|
||||
|
@ -31,7 +31,7 @@ OldT2IfCvt("old-thumb2-ifcvt", cl::Hidden,
|
||||
cl::init(false));
|
||||
|
||||
Thumb2InstrInfo::Thumb2InstrInfo(const ARMSubtarget &STI)
|
||||
: ARMBaseInstrInfo(STI), RI(*this, STI) {
|
||||
: ARMBaseInstrInfo(STI), RI(STI) {
|
||||
}
|
||||
|
||||
/// getNoopForMachoTarget - Return the noop instruction to use for a noop.
|
||||
|
@ -24,9 +24,8 @@
|
||||
#include "llvm/IR/Function.h"
|
||||
using namespace llvm;
|
||||
|
||||
Thumb2RegisterInfo::Thumb2RegisterInfo(const ARMBaseInstrInfo &tii,
|
||||
const ARMSubtarget &sti)
|
||||
: ARMBaseRegisterInfo(tii, sti) {
|
||||
Thumb2RegisterInfo::Thumb2RegisterInfo(const ARMSubtarget &sti)
|
||||
: ARMBaseRegisterInfo(sti) {
|
||||
}
|
||||
|
||||
/// emitLoadConstPool - Emits a load from constpool to materialize the
|
||||
@ -40,6 +39,7 @@ Thumb2RegisterInfo::emitLoadConstPool(MachineBasicBlock &MBB,
|
||||
ARMCC::CondCodes Pred, unsigned PredReg,
|
||||
unsigned MIFlags) const {
|
||||
MachineFunction &MF = *MBB.getParent();
|
||||
const TargetInstrInfo &TII = *MF.getTarget().getInstrInfo();
|
||||
MachineConstantPool *ConstantPool = MF.getConstantPool();
|
||||
const Constant *C = ConstantInt::get(
|
||||
Type::getInt32Ty(MBB.getParent()->getFunction()->getContext()), Val);
|
||||
|
@ -20,12 +20,12 @@
|
||||
#include "llvm/Target/TargetRegisterInfo.h"
|
||||
|
||||
namespace llvm {
|
||||
class ARMSubtarget;
|
||||
class ARMBaseInstrInfo;
|
||||
|
||||
class ARMSubtarget;
|
||||
|
||||
struct Thumb2RegisterInfo : public ARMBaseRegisterInfo {
|
||||
public:
|
||||
Thumb2RegisterInfo(const ARMBaseInstrInfo &tii, const ARMSubtarget &STI);
|
||||
Thumb2RegisterInfo(const ARMSubtarget &STI);
|
||||
|
||||
/// emitLoadConstPool - Emits a load from constpool to materialize the
|
||||
/// specified immediate.
|
||||
|
Loading…
Reference in New Issue
Block a user