mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-16 11:30:51 +00:00
Don't cache the instruction and register info from the TargetMachine, because
the internals of TargetMachine could change. No functionality change intended. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183571 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1ce4985e01
commit
a5e5ba611f
@ -45,10 +45,6 @@ class X86FastISel : public FastISel {
|
||||
/// make the right decision when generating code for different targets.
|
||||
const X86Subtarget *Subtarget;
|
||||
|
||||
/// RegInfo - X86 register info.
|
||||
///
|
||||
const X86RegisterInfo *RegInfo;
|
||||
|
||||
/// X86ScalarSSEf32, X86ScalarSSEf64 - Select between SSE or x87
|
||||
/// floating point ops.
|
||||
/// When SSE is available, use it for f32 operations.
|
||||
@ -63,7 +59,6 @@ public:
|
||||
Subtarget = &TM.getSubtarget<X86Subtarget>();
|
||||
X86ScalarSSEf64 = Subtarget->hasSSE2();
|
||||
X86ScalarSSEf32 = Subtarget->hasSSE1();
|
||||
RegInfo = static_cast<const X86RegisterInfo*>(TM.getRegisterInfo());
|
||||
}
|
||||
|
||||
virtual bool TargetSelectInstruction(const Instruction *I);
|
||||
@ -2025,6 +2020,8 @@ bool X86FastISel::DoSelectCall(const Instruction *I, const char *MemIntName) {
|
||||
} else {
|
||||
unsigned LocMemOffset = VA.getLocMemOffset();
|
||||
X86AddressMode AM;
|
||||
const X86RegisterInfo *RegInfo = static_cast<const X86RegisterInfo*>(
|
||||
getTargetMachine()->getRegisterInfo());
|
||||
AM.Base.Reg = RegInfo->getStackRegister();
|
||||
AM.Disp = LocMemOffset;
|
||||
const Value *ArgVal = ArgVals[VA.getValNo()];
|
||||
|
@ -135,8 +135,8 @@ FunctionPass *llvm::createX86FixupLEAs() {
|
||||
|
||||
bool FixupLEAPass::runOnMachineFunction(MachineFunction &Func) {
|
||||
MF = &Func;
|
||||
TII = Func.getTarget().getInstrInfo();
|
||||
TM = &MF->getTarget();
|
||||
TII = TM->getInstrInfo();
|
||||
|
||||
DEBUG(dbgs() << "Start X86FixupLEAs\n";);
|
||||
// Process all basic blocks.
|
||||
|
@ -163,7 +163,6 @@ X86TargetLowering::X86TargetLowering(X86TargetMachine &TM)
|
||||
Subtarget = &TM.getSubtarget<X86Subtarget>();
|
||||
X86ScalarSSEf64 = Subtarget->hasSSE2();
|
||||
X86ScalarSSEf32 = Subtarget->hasSSE1();
|
||||
RegInfo = TM.getRegisterInfo();
|
||||
TD = getDataLayout();
|
||||
|
||||
resetOperationActions();
|
||||
@ -202,6 +201,8 @@ void X86TargetLowering::resetOperationActions() {
|
||||
setSchedulingPreference(Sched::ILP);
|
||||
else
|
||||
setSchedulingPreference(Sched::RegPressure);
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(TM.getRegisterInfo());
|
||||
setStackPointerRegisterToSaveRestore(RegInfo->getStackRegister());
|
||||
|
||||
// Bypass expensive divides on Atom when compiling with O2
|
||||
@ -2369,6 +2370,8 @@ X86TargetLowering::LowerCall(TargetLowering::CallLoweringInfo &CLI,
|
||||
|
||||
// Walk the register/memloc assignments, inserting copies/loads. In the case
|
||||
// of tail call optimization arguments are handle later.
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(getTargetMachine().getRegisterInfo());
|
||||
for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
|
||||
CCValAssign &VA = ArgLocs[i];
|
||||
EVT RegVT = VA.getLocVT();
|
||||
@ -2748,6 +2751,8 @@ X86TargetLowering::GetAlignedArgumentStackSize(unsigned StackSize,
|
||||
SelectionDAG& DAG) const {
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
const TargetMachine &TM = MF.getTarget();
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(TM.getRegisterInfo());
|
||||
const TargetFrameLowering &TFI = *TM.getFrameLowering();
|
||||
unsigned StackAlignment = TFI.getStackAlignment();
|
||||
uint64_t AlignMask = StackAlignment - 1;
|
||||
@ -2860,6 +2865,8 @@ X86TargetLowering::IsEligibleForTailCallOptimization(SDValue Callee,
|
||||
|
||||
// Can't do sibcall if stack needs to be dynamically re-aligned. PEI needs to
|
||||
// emit a special epilogue.
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(getTargetMachine().getRegisterInfo());
|
||||
if (RegInfo->needsStackRealignment(MF))
|
||||
return false;
|
||||
|
||||
@ -3120,6 +3127,8 @@ static SDValue getTargetShuffleNode(unsigned Opc, SDLoc dl, EVT VT,
|
||||
|
||||
SDValue X86TargetLowering::getReturnAddressFrameIndex(SelectionDAG &DAG) const {
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(getTargetMachine().getRegisterInfo());
|
||||
X86MachineFunctionInfo *FuncInfo = MF.getInfo<X86MachineFunctionInfo>();
|
||||
int ReturnAddrIndex = FuncInfo->getRAIndex();
|
||||
|
||||
@ -10128,6 +10137,8 @@ X86TargetLowering::LowerDYNAMIC_STACKALLOC(SDValue Op,
|
||||
Chain = DAG.getNode(X86ISD::WIN_ALLOCA, dl, NodeTys, Chain, Flag);
|
||||
Flag = Chain.getValue(1);
|
||||
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(getTargetMachine().getRegisterInfo());
|
||||
Chain = DAG.getCopyFromReg(Chain, dl, RegInfo->getStackRegister(),
|
||||
SPTy).getValue(1);
|
||||
|
||||
@ -11033,8 +11044,9 @@ SDValue X86TargetLowering::LowerRETURNADDR(SDValue Op,
|
||||
|
||||
if (Depth > 0) {
|
||||
SDValue FrameAddr = LowerFRAMEADDR(Op, DAG);
|
||||
SDValue Offset =
|
||||
DAG.getConstant(RegInfo->getSlotSize(), PtrVT);
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(getTargetMachine().getRegisterInfo());
|
||||
SDValue Offset = DAG.getConstant(RegInfo->getSlotSize(), PtrVT);
|
||||
return DAG.getLoad(PtrVT, dl, DAG.getEntryNode(),
|
||||
DAG.getNode(ISD::ADD, dl, PtrVT,
|
||||
FrameAddr, Offset),
|
||||
@ -11054,6 +11066,8 @@ SDValue X86TargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
|
||||
EVT VT = Op.getValueType();
|
||||
SDLoc dl(Op); // FIXME probably not meaningful
|
||||
unsigned Depth = cast<ConstantSDNode>(Op.getOperand(0))->getZExtValue();
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(getTargetMachine().getRegisterInfo());
|
||||
unsigned FrameReg = RegInfo->getFrameRegister(DAG.getMachineFunction());
|
||||
assert(((FrameReg == X86::RBP && VT == MVT::i64) ||
|
||||
(FrameReg == X86::EBP && VT == MVT::i32)) &&
|
||||
@ -11068,6 +11082,8 @@ SDValue X86TargetLowering::LowerFRAMEADDR(SDValue Op, SelectionDAG &DAG) const {
|
||||
|
||||
SDValue X86TargetLowering::LowerFRAME_TO_ARGS_OFFSET(SDValue Op,
|
||||
SelectionDAG &DAG) const {
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(getTargetMachine().getRegisterInfo());
|
||||
return DAG.getIntPtrConstant(2 * RegInfo->getSlotSize());
|
||||
}
|
||||
|
||||
@ -11078,6 +11094,8 @@ SDValue X86TargetLowering::LowerEH_RETURN(SDValue Op, SelectionDAG &DAG) const {
|
||||
SDLoc dl (Op);
|
||||
|
||||
EVT PtrVT = getPointerTy();
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(getTargetMachine().getRegisterInfo());
|
||||
unsigned FrameReg = RegInfo->getFrameRegister(DAG.getMachineFunction());
|
||||
assert(((FrameReg == X86::RBP && PtrVT == MVT::i64) ||
|
||||
(FrameReg == X86::EBP && PtrVT == MVT::i32)) &&
|
||||
@ -14613,6 +14631,9 @@ X86TargetLowering::emitEHSjLjSetJmp(MachineInstr *MI,
|
||||
// Setup
|
||||
MIB = BuildMI(*thisMBB, MI, DL, TII->get(X86::EH_SjLj_Setup))
|
||||
.addMBB(restoreMBB);
|
||||
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(getTargetMachine().getRegisterInfo());
|
||||
MIB.addRegMask(RegInfo->getNoPreservedMask());
|
||||
thisMBB->addSuccessor(mainMBB);
|
||||
thisMBB->addSuccessor(restoreMBB);
|
||||
@ -14658,6 +14679,8 @@ X86TargetLowering::emitEHSjLjLongJmp(MachineInstr *MI,
|
||||
(PVT == MVT::i64) ? &X86::GR64RegClass : &X86::GR32RegClass;
|
||||
unsigned Tmp = MRI.createVirtualRegister(RC);
|
||||
// Since FP is only updated here but NOT referenced, it's treated as GPR.
|
||||
const X86RegisterInfo *RegInfo =
|
||||
static_cast<const X86RegisterInfo*>(getTargetMachine().getRegisterInfo());
|
||||
unsigned FP = (PVT == MVT::i64) ? X86::RBP : X86::EBP;
|
||||
unsigned SP = RegInfo->getStackRegister();
|
||||
|
||||
|
@ -734,7 +734,6 @@ namespace llvm {
|
||||
/// Subtarget - Keep a pointer to the X86Subtarget around so that we can
|
||||
/// make the right decision when generating code for different targets.
|
||||
const X86Subtarget *Subtarget;
|
||||
const X86RegisterInfo *RegInfo;
|
||||
const DataLayout *TD;
|
||||
|
||||
/// Used to store the TargetOptions so that we don't waste time resetting
|
||||
|
@ -97,7 +97,7 @@ X86InstrInfo::X86InstrInfo(X86TargetMachine &tm)
|
||||
(tm.getSubtarget<X86Subtarget>().is64Bit()
|
||||
? X86::ADJCALLSTACKUP64
|
||||
: X86::ADJCALLSTACKUP32)),
|
||||
TM(tm), RI(tm, *this) {
|
||||
TM(tm), RI(tm) {
|
||||
|
||||
static const X86OpTblEntry OpTbl2Addr[] = {
|
||||
{ X86::ADC32ri, X86::ADC32mi, 0 },
|
||||
|
@ -54,15 +54,14 @@ static cl::opt<bool>
|
||||
EnableBasePointer("x86-use-base-pointer", cl::Hidden, cl::init(true),
|
||||
cl::desc("Enable use of a base pointer for complex stack frames"));
|
||||
|
||||
X86RegisterInfo::X86RegisterInfo(X86TargetMachine &tm,
|
||||
const TargetInstrInfo &tii)
|
||||
X86RegisterInfo::X86RegisterInfo(X86TargetMachine &tm)
|
||||
: X86GenRegisterInfo((tm.getSubtarget<X86Subtarget>().is64Bit()
|
||||
? X86::RIP : X86::EIP),
|
||||
X86_MC::getDwarfRegFlavour(tm.getTargetTriple(), false),
|
||||
X86_MC::getDwarfRegFlavour(tm.getTargetTriple(), true),
|
||||
(tm.getSubtarget<X86Subtarget>().is64Bit()
|
||||
? X86::RIP : X86::EIP)),
|
||||
TM(tm), TII(tii) {
|
||||
TM(tm) {
|
||||
X86_MC::InitLLVM2SEHRegisterMapping(this);
|
||||
|
||||
// Cache some information.
|
||||
|
@ -27,7 +27,6 @@ namespace llvm {
|
||||
class X86RegisterInfo : public X86GenRegisterInfo {
|
||||
public:
|
||||
X86TargetMachine &TM;
|
||||
const TargetInstrInfo &TII;
|
||||
|
||||
private:
|
||||
/// Is64Bit - Is the target 64-bits.
|
||||
@ -56,7 +55,7 @@ private:
|
||||
unsigned BasePtr;
|
||||
|
||||
public:
|
||||
X86RegisterInfo(X86TargetMachine &tm, const TargetInstrInfo &tii);
|
||||
X86RegisterInfo(X86TargetMachine &tm);
|
||||
|
||||
// FIXME: This should be tablegen'd like getDwarfRegNum is
|
||||
int getSEHRegNum(unsigned i) const;
|
||||
|
Loading…
Reference in New Issue
Block a user