diff options
32 files changed, 86 insertions, 86 deletions
diff --git a/include/llvm/Target/TargetInstrInfo.h b/include/llvm/Target/TargetInstrInfo.h index 271f9e7..980a537 100644 --- a/include/llvm/Target/TargetInstrInfo.h +++ b/include/llvm/Target/TargetInstrInfo.h @@ -44,7 +44,9 @@ class TargetInstrInfo : public MCInstrInfo {    TargetInstrInfo(const TargetInstrInfo &);  // DO NOT IMPLEMENT    void operator=(const TargetInstrInfo &);   // DO NOT IMPLEMENT  public: -  TargetInstrInfo(const MCInstrDesc *desc, unsigned NumOpcodes); +  TargetInstrInfo(const MCInstrDesc *desc, unsigned NumOpcodes, +                  int CallFrameSetupOpcode = -1, +                  int CallFrameDestroyOpcode = -1);    virtual ~TargetInstrInfo();    /// getRegClass - Givem a machine instruction descriptor, returns the register @@ -86,6 +88,15 @@ private:                                                  AliasAnalysis *AA) const;  public: +  /// getCallFrameSetup/DestroyOpcode - These methods return the opcode of the +  /// frame setup/destroy instructions if they exist (-1 otherwise).  Some +  /// targets use pseudo instructions in order to abstract away the difference +  /// between operating with a frame pointer and operating without, through the +  /// use of these two instructions. +  /// +  int getCallFrameSetupOpcode() const { return CallFrameSetupOpcode; } +  int getCallFrameDestroyOpcode() const { return CallFrameDestroyOpcode; } +    /// isCoalescableExtInstr - Return true if the instruction is a "coalescable"    /// extension instruction. That is, it's like a copy where it's legal for the    /// source to overlap the destination. e.g. X86::MOVSX64rr32. If this returns @@ -656,6 +667,9 @@ public:    virtual    bool hasLowDefLatency(const InstrItineraryData *ItinData,                          const MachineInstr *DefMI, unsigned DefIdx) const; + +private: +  int CallFrameSetupOpcode, CallFrameDestroyOpcode;  };  /// TargetInstrInfoImpl - This is the default implementation of @@ -664,7 +678,9 @@ public:  /// libcodegen, not in libtarget.  class TargetInstrInfoImpl : public TargetInstrInfo {  protected: -  TargetInstrInfoImpl(const MCInstrDesc *desc, unsigned NumOpcodes) +  TargetInstrInfoImpl(const MCInstrDesc *desc, unsigned NumOpcodes, +                      int CallFrameSetupOpcode = -1, +                      int CallFrameDestroyOpcode = -1)    : TargetInstrInfo(desc, NumOpcodes) {}  public:    virtual void ReplaceTailWithBranchTo(MachineBasicBlock::iterator OldInst, diff --git a/include/llvm/Target/TargetRegisterInfo.h b/include/llvm/Target/TargetRegisterInfo.h index 1ca7651..2965b1d 100644 --- a/include/llvm/Target/TargetRegisterInfo.h +++ b/include/llvm/Target/TargetRegisterInfo.h @@ -275,15 +275,12 @@ private:    const TargetRegisterInfoDesc *InfoDesc;     // Extra desc array for codegen    const char *const *SubRegIndexNames;        // Names of subreg indexes.    regclass_iterator RegClassBegin, RegClassEnd;   // List of regclasses -  int CallFrameSetupOpcode, CallFrameDestroyOpcode;  protected:    TargetRegisterInfo(const TargetRegisterInfoDesc *ID,                       regclass_iterator RegClassBegin,                       regclass_iterator RegClassEnd, -                     const char *const *subregindexnames, -                     int CallFrameSetupOpcode = -1, -                     int CallFrameDestroyOpcode = -1); +                     const char *const *subregindexnames);    virtual ~TargetRegisterInfo();  public: @@ -661,15 +658,6 @@ public:      return false; // Must return a value in order to compile with VS 2005    } -  /// getCallFrameSetup/DestroyOpcode - These methods return the opcode of the -  /// frame setup/destroy instructions if they exist (-1 otherwise).  Some -  /// targets use pseudo instructions in order to abstract away the difference -  /// between operating with a frame pointer and operating without, through the -  /// use of these two instructions. -  /// -  int getCallFrameSetupOpcode() const { return CallFrameSetupOpcode; } -  int getCallFrameDestroyOpcode() const { return CallFrameDestroyOpcode; } -    /// eliminateCallFramePseudoInstr - This method is called during prolog/epilog    /// code insertion to eliminate call frame setup and destroy pseudo    /// instructions (but only if the Target is using them).  It is responsible @@ -681,9 +669,6 @@ public:    eliminateCallFramePseudoInstr(MachineFunction &MF,                                  MachineBasicBlock &MBB,                                  MachineBasicBlock::iterator MI) const { -    assert(getCallFrameSetupOpcode()== -1 && getCallFrameDestroyOpcode()== -1 && -           "eliminateCallFramePseudoInstr must be implemented if using" -           " call frame setup/destroy pseudo instructions!");      assert(0 && "Call Frame Pseudo Instructions do not exist on this target!");    } diff --git a/lib/CodeGen/PrologEpilogInserter.cpp b/lib/CodeGen/PrologEpilogInserter.cpp index f1f3c99..a901c5f 100644 --- a/lib/CodeGen/PrologEpilogInserter.cpp +++ b/lib/CodeGen/PrologEpilogInserter.cpp @@ -145,6 +145,7 @@ void PEI::getAnalysisUsage(AnalysisUsage &AU) const {  /// pseudo instructions.  void PEI::calculateCallsInformation(MachineFunction &Fn) {    const TargetRegisterInfo *RegInfo = Fn.getTarget().getRegisterInfo(); +  const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo();    const TargetFrameLowering *TFI = Fn.getTarget().getFrameLowering();    MachineFrameInfo *MFI = Fn.getFrameInfo(); @@ -152,8 +153,8 @@ void PEI::calculateCallsInformation(MachineFunction &Fn) {    bool AdjustsStack = MFI->adjustsStack();    // Get the function call frame set-up and tear-down instruction opcode -  int FrameSetupOpcode   = RegInfo->getCallFrameSetupOpcode(); -  int FrameDestroyOpcode = RegInfo->getCallFrameDestroyOpcode(); +  int FrameSetupOpcode   = TII.getCallFrameSetupOpcode(); +  int FrameDestroyOpcode = TII.getCallFrameDestroyOpcode();    // Early exit for targets which have no call frame setup/destroy pseudo    // instructions. @@ -705,12 +706,13 @@ void PEI::replaceFrameIndices(MachineFunction &Fn) {    const TargetMachine &TM = Fn.getTarget();    assert(TM.getRegisterInfo() && "TM::getRegisterInfo() must be implemented!"); +  const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo();    const TargetRegisterInfo &TRI = *TM.getRegisterInfo();    const TargetFrameLowering *TFI = TM.getFrameLowering();    bool StackGrowsDown =      TFI->getStackGrowthDirection() == TargetFrameLowering::StackGrowsDown; -  int FrameSetupOpcode   = TRI.getCallFrameSetupOpcode(); -  int FrameDestroyOpcode = TRI.getCallFrameDestroyOpcode(); +  int FrameSetupOpcode   = TII.getCallFrameSetupOpcode(); +  int FrameDestroyOpcode = TII.getCallFrameDestroyOpcode();    for (MachineFunction::iterator BB = Fn.begin(),           E = Fn.end(); BB != E; ++BB) { diff --git a/lib/Target/ARM/ARMBaseInstrInfo.cpp b/lib/Target/ARM/ARMBaseInstrInfo.cpp index 31ea95a..6a6ba92 100644 --- a/lib/Target/ARM/ARMBaseInstrInfo.cpp +++ b/lib/Target/ARM/ARMBaseInstrInfo.cpp @@ -77,7 +77,8 @@ static const ARM_MLxEntry ARM_MLxTable[] = {  };  ARMBaseInstrInfo::ARMBaseInstrInfo(const ARMSubtarget& STI) -  : TargetInstrInfoImpl(ARMInsts, array_lengthof(ARMInsts)), +  : TargetInstrInfoImpl(ARMInsts, array_lengthof(ARMInsts), +                        ARM::ADJCALLSTACKDOWN, ARM::ADJCALLSTACKUP),      Subtarget(STI) {    for (unsigned i = 0, e = array_lengthof(ARM_MLxTable); i != e; ++i) {      if (!MLxEntryMap.insert(std::make_pair(ARM_MLxTable[i].MLxOpc, i)).second) diff --git a/lib/Target/ARM/ARMBaseRegisterInfo.cpp b/lib/Target/ARM/ARMBaseRegisterInfo.cpp index fa937f3..f231089 100644 --- a/lib/Target/ARM/ARMBaseRegisterInfo.cpp +++ b/lib/Target/ARM/ARMBaseRegisterInfo.cpp @@ -58,8 +58,7 @@ EnableBasePointer("arm-use-base-pointer", cl::Hidden, cl::init(true),  ARMBaseRegisterInfo::ARMBaseRegisterInfo(const ARMBaseInstrInfo &tii,                                           const ARMSubtarget &sti) -  : ARMGenRegisterInfo(ARM::ADJCALLSTACKDOWN, ARM::ADJCALLSTACKUP), -    TII(tii), STI(sti), +  : ARMGenRegisterInfo(), TII(tii), STI(sti),      FramePtr((STI.isTargetDarwin() || STI.isThumb()) ? ARM::R7 : ARM::R11),      BasePtr(ARM::R6) {  } diff --git a/lib/Target/ARM/ARMFastISel.cpp b/lib/Target/ARM/ARMFastISel.cpp index e0409e9..f469d7e 100644 --- a/lib/Target/ARM/ARMFastISel.cpp +++ b/lib/Target/ARM/ARMFastISel.cpp @@ -1549,7 +1549,7 @@ bool ARMFastISel::ProcessCallArgs(SmallVectorImpl<Value*> &Args,    NumBytes = CCInfo.getNextStackOffset();    // Issue CALLSEQ_START -  unsigned AdjStackDown = TM.getRegisterInfo()->getCallFrameSetupOpcode(); +  unsigned AdjStackDown = TII.getCallFrameSetupOpcode();    AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,                            TII.get(AdjStackDown))                    .addImm(NumBytes)); @@ -1647,7 +1647,7 @@ bool ARMFastISel::FinishCall(MVT RetVT, SmallVectorImpl<unsigned> &UsedRegs,                               const Instruction *I, CallingConv::ID CC,                               unsigned &NumBytes) {    // Issue CALLSEQ_END -  unsigned AdjStackUp = TM.getRegisterInfo()->getCallFrameDestroyOpcode(); +  unsigned AdjStackUp = TII.getCallFrameDestroyOpcode();    AddOptionalDefs(BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL,                            TII.get(AdjStackUp))                    .addImm(NumBytes).addImm(0)); diff --git a/lib/Target/Alpha/AlphaInstrInfo.cpp b/lib/Target/Alpha/AlphaInstrInfo.cpp index 589e2d9..220f167 100644 --- a/lib/Target/Alpha/AlphaInstrInfo.cpp +++ b/lib/Target/Alpha/AlphaInstrInfo.cpp @@ -25,7 +25,8 @@  using namespace llvm;  AlphaInstrInfo::AlphaInstrInfo() -  : TargetInstrInfoImpl(AlphaInsts, array_lengthof(AlphaInsts)), +  : TargetInstrInfoImpl(AlphaInsts, array_lengthof(AlphaInsts), +                        Alpha::ADJUSTSTACKDOWN, Alpha::ADJUSTSTACKUP),      RI(*this) { } diff --git a/lib/Target/Alpha/AlphaRegisterInfo.cpp b/lib/Target/Alpha/AlphaRegisterInfo.cpp index b0bb7c0..0289307 100644 --- a/lib/Target/Alpha/AlphaRegisterInfo.cpp +++ b/lib/Target/Alpha/AlphaRegisterInfo.cpp @@ -41,7 +41,7 @@  using namespace llvm;  AlphaRegisterInfo::AlphaRegisterInfo(const TargetInstrInfo &tii) -  : AlphaGenRegisterInfo(Alpha::ADJUSTSTACKDOWN, Alpha::ADJUSTSTACKUP), +  : AlphaGenRegisterInfo(),      TII(tii) {  } diff --git a/lib/Target/Blackfin/BlackfinInstrInfo.cpp b/lib/Target/Blackfin/BlackfinInstrInfo.cpp index 0b50a95..60da4c4 100644 --- a/lib/Target/Blackfin/BlackfinInstrInfo.cpp +++ b/lib/Target/Blackfin/BlackfinInstrInfo.cpp @@ -26,7 +26,8 @@  using namespace llvm;  BlackfinInstrInfo::BlackfinInstrInfo(BlackfinSubtarget &ST) -  : TargetInstrInfoImpl(BlackfinInsts, array_lengthof(BlackfinInsts)), +  : TargetInstrInfoImpl(BlackfinInsts, array_lengthof(BlackfinInsts), +                        BF::ADJCALLSTACKDOWN, BF::ADJCALLSTACKUP),      RI(ST, *this),      Subtarget(ST) {} diff --git a/lib/Target/Blackfin/BlackfinRegisterInfo.cpp b/lib/Target/Blackfin/BlackfinRegisterInfo.cpp index e0fcce0..2f4a453 100644 --- a/lib/Target/Blackfin/BlackfinRegisterInfo.cpp +++ b/lib/Target/Blackfin/BlackfinRegisterInfo.cpp @@ -38,9 +38,7 @@ using namespace llvm;  BlackfinRegisterInfo::BlackfinRegisterInfo(BlackfinSubtarget &st,                                             const TargetInstrInfo &tii) -  : BlackfinGenRegisterInfo(BF::ADJCALLSTACKDOWN, BF::ADJCALLSTACKUP), -    Subtarget(st), -    TII(tii) {} +  : BlackfinGenRegisterInfo(), Subtarget(st), TII(tii) {}  const unsigned*  BlackfinRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const { diff --git a/lib/Target/CellSPU/SPUInstrInfo.cpp b/lib/Target/CellSPU/SPUInstrInfo.cpp index 1107cff..5087b47 100644 --- a/lib/Target/CellSPU/SPUInstrInfo.cpp +++ b/lib/Target/CellSPU/SPUInstrInfo.cpp @@ -53,7 +53,8 @@ namespace {  }  SPUInstrInfo::SPUInstrInfo(SPUTargetMachine &tm) -  : TargetInstrInfoImpl(SPUInsts, sizeof(SPUInsts)/sizeof(SPUInsts[0])), +  : TargetInstrInfoImpl(SPUInsts, sizeof(SPUInsts)/sizeof(SPUInsts[0]), +                        SPU::ADJCALLSTACKDOWN, SPU::ADJCALLSTACKUP),      TM(tm),      RI(*TM.getSubtargetImpl(), *this)  { /* NOP */ } diff --git a/lib/Target/CellSPU/SPURegisterInfo.cpp b/lib/Target/CellSPU/SPURegisterInfo.cpp index e37bc9b..fefd141 100644 --- a/lib/Target/CellSPU/SPURegisterInfo.cpp +++ b/lib/Target/CellSPU/SPURegisterInfo.cpp @@ -189,9 +189,7 @@ unsigned SPURegisterInfo::getRegisterNumbering(unsigned RegEnum) {  SPURegisterInfo::SPURegisterInfo(const SPUSubtarget &subtarget,                                   const TargetInstrInfo &tii) : -  SPUGenRegisterInfo(SPU::ADJCALLSTACKDOWN, SPU::ADJCALLSTACKUP), -  Subtarget(subtarget), -  TII(tii) +  SPUGenRegisterInfo(), Subtarget(subtarget), TII(tii)  {  } diff --git a/lib/Target/MBlaze/MBlazeInstrInfo.cpp b/lib/Target/MBlaze/MBlazeInstrInfo.cpp index adc81ff..a3af5d9 100644 --- a/lib/Target/MBlaze/MBlazeInstrInfo.cpp +++ b/lib/Target/MBlaze/MBlazeInstrInfo.cpp @@ -27,7 +27,8 @@  using namespace llvm;  MBlazeInstrInfo::MBlazeInstrInfo(MBlazeTargetMachine &tm) -  : TargetInstrInfoImpl(MBlazeInsts, array_lengthof(MBlazeInsts)), +  : TargetInstrInfoImpl(MBlazeInsts, array_lengthof(MBlazeInsts), +                        MBlaze::ADJCALLSTACKDOWN, MBlaze::ADJCALLSTACKUP),      TM(tm), RI(*TM.getSubtargetImpl(), *this) {}  static bool isZeroImm(const MachineOperand &op) { diff --git a/lib/Target/MBlaze/MBlazeRegisterInfo.cpp b/lib/Target/MBlaze/MBlazeRegisterInfo.cpp index c370065..441ece1 100644 --- a/lib/Target/MBlaze/MBlazeRegisterInfo.cpp +++ b/lib/Target/MBlaze/MBlazeRegisterInfo.cpp @@ -45,8 +45,7 @@ using namespace llvm;  MBlazeRegisterInfo::  MBlazeRegisterInfo(const MBlazeSubtarget &ST, const TargetInstrInfo &tii) -  : MBlazeGenRegisterInfo(MBlaze::ADJCALLSTACKDOWN, MBlaze::ADJCALLSTACKUP), -    Subtarget(ST), TII(tii) {} +  : MBlazeGenRegisterInfo(), Subtarget(ST), TII(tii) {}  /// getRegisterNumbering - Given the enum value for some register, e.g.  /// MBlaze::R0, return the number that it corresponds to (e.g. 0). diff --git a/lib/Target/MSP430/MSP430InstrInfo.cpp b/lib/Target/MSP430/MSP430InstrInfo.cpp index b883f46..bf201b0 100644 --- a/lib/Target/MSP430/MSP430InstrInfo.cpp +++ b/lib/Target/MSP430/MSP430InstrInfo.cpp @@ -28,7 +28,8 @@  using namespace llvm;  MSP430InstrInfo::MSP430InstrInfo(MSP430TargetMachine &tm) -  : TargetInstrInfoImpl(MSP430Insts, array_lengthof(MSP430Insts)), +  : TargetInstrInfoImpl(MSP430Insts, array_lengthof(MSP430Insts), +                        MSP430::ADJCALLSTACKDOWN, MSP430::ADJCALLSTACKUP),      RI(tm, *this), TM(tm) {}  void MSP430InstrInfo::storeRegToStackSlot(MachineBasicBlock &MBB, diff --git a/lib/Target/MSP430/MSP430RegisterInfo.cpp b/lib/Target/MSP430/MSP430RegisterInfo.cpp index eaa9947..da0c3c6 100644 --- a/lib/Target/MSP430/MSP430RegisterInfo.cpp +++ b/lib/Target/MSP430/MSP430RegisterInfo.cpp @@ -35,8 +35,7 @@ using namespace llvm;  // FIXME: Provide proper call frame setup / destroy opcodes.  MSP430RegisterInfo::MSP430RegisterInfo(MSP430TargetMachine &tm,                                         const TargetInstrInfo &tii) -  : MSP430GenRegisterInfo(MSP430::ADJCALLSTACKDOWN, MSP430::ADJCALLSTACKUP), -    TM(tm), TII(tii) { +  : MSP430GenRegisterInfo(), TM(tm), TII(tii) {    StackAlign = TM.getFrameLowering()->getStackAlignment();  } @@ -121,12 +120,12 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,        Amount = (Amount+StackAlign-1)/StackAlign*StackAlign;        MachineInstr *New = 0; -      if (Old->getOpcode() == getCallFrameSetupOpcode()) { +      if (Old->getOpcode() == TII.getCallFrameSetupOpcode()) {          New = BuildMI(MF, Old->getDebugLoc(),                        TII.get(MSP430::SUB16ri), MSP430::SPW)            .addReg(MSP430::SPW).addImm(Amount);        } else { -        assert(Old->getOpcode() == getCallFrameDestroyOpcode()); +        assert(Old->getOpcode() == TII.getCallFrameDestroyOpcode());          // factor out the amount the callee already popped.          uint64_t CalleeAmt = Old->getOperand(1).getImm();          Amount -= CalleeAmt; @@ -144,7 +143,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,          MBB.insert(I, New);        }      } -  } else if (I->getOpcode() == getCallFrameDestroyOpcode()) { +  } else if (I->getOpcode() == TII.getCallFrameDestroyOpcode()) {      // If we are performing frame pointer elimination and if the callee pops      // something off the stack pointer, add it back.      if (uint64_t CalleeAmt = I->getOperand(1).getImm()) { diff --git a/lib/Target/Mips/MipsInstrInfo.cpp b/lib/Target/Mips/MipsInstrInfo.cpp index a56c68b..508d1c2 100644 --- a/lib/Target/Mips/MipsInstrInfo.cpp +++ b/lib/Target/Mips/MipsInstrInfo.cpp @@ -25,7 +25,8 @@  using namespace llvm;  MipsInstrInfo::MipsInstrInfo(MipsTargetMachine &tm) -  : TargetInstrInfoImpl(MipsInsts, array_lengthof(MipsInsts)), +  : TargetInstrInfoImpl(MipsInsts, array_lengthof(MipsInsts), +                        Mips::ADJCALLSTACKDOWN, Mips::ADJCALLSTACKUP),      TM(tm), RI(*TM.getSubtargetImpl(), *this) {}  static bool isZeroImm(const MachineOperand &op) { diff --git a/lib/Target/Mips/MipsRegisterInfo.cpp b/lib/Target/Mips/MipsRegisterInfo.cpp index 1025583..40774c9 100644 --- a/lib/Target/Mips/MipsRegisterInfo.cpp +++ b/lib/Target/Mips/MipsRegisterInfo.cpp @@ -44,8 +44,7 @@ using namespace llvm;  MipsRegisterInfo::MipsRegisterInfo(const MipsSubtarget &ST,                                     const TargetInstrInfo &tii) -  : MipsGenRegisterInfo(Mips::ADJCALLSTACKDOWN, Mips::ADJCALLSTACKUP), -    Subtarget(ST), TII(tii) {} +  : MipsGenRegisterInfo(), Subtarget(ST), TII(tii) {}  /// getRegisterNumbering - Given the enum value for some register, e.g.  /// Mips::RA, return the number that it corresponds to (e.g. 31). diff --git a/lib/Target/PowerPC/PPCInstrInfo.cpp b/lib/Target/PowerPC/PPCInstrInfo.cpp index dade833..1ddc0f0 100644 --- a/lib/Target/PowerPC/PPCInstrInfo.cpp +++ b/lib/Target/PowerPC/PPCInstrInfo.cpp @@ -39,8 +39,9 @@ extern cl::opt<bool> EnablePPC64RS;  // FIXME (64-bit): See PPCRegisterInfo.cpp.  using namespace llvm;  PPCInstrInfo::PPCInstrInfo(PPCTargetMachine &tm) -  : TargetInstrInfoImpl(PPCInsts, array_lengthof(PPCInsts)), TM(tm), -    RI(*TM.getSubtargetImpl(), *this) {} +  : TargetInstrInfoImpl(PPCInsts, array_lengthof(PPCInsts), +                        PPC::ADJCALLSTACKDOWN, PPC::ADJCALLSTACKUP), +    TM(tm), RI(*TM.getSubtargetImpl(), *this) {}  /// CreateTargetHazardRecognizer - Return the hazard recognizer to use for  /// this target when scheduling the DAG. diff --git a/lib/Target/PowerPC/PPCRegisterInfo.cpp b/lib/Target/PowerPC/PPCRegisterInfo.cpp index 91408cc..db139da 100644 --- a/lib/Target/PowerPC/PPCRegisterInfo.cpp +++ b/lib/Target/PowerPC/PPCRegisterInfo.cpp @@ -114,8 +114,7 @@ unsigned PPCRegisterInfo::getRegisterNumbering(unsigned RegEnum) {  PPCRegisterInfo::PPCRegisterInfo(const PPCSubtarget &ST,                                   const TargetInstrInfo &tii) -  : PPCGenRegisterInfo(PPC::ADJCALLSTACKDOWN, PPC::ADJCALLSTACKUP), -    Subtarget(ST), TII(tii) { +  : PPCGenRegisterInfo(), Subtarget(ST), TII(tii) {    ImmToIdxMap[PPC::LD]   = PPC::LDX;    ImmToIdxMap[PPC::STD]  = PPC::STDX;    ImmToIdxMap[PPC::LBZ]  = PPC::LBZX;   ImmToIdxMap[PPC::STB]  = PPC::STBX;    ImmToIdxMap[PPC::LHZ]  = PPC::LHZX;   ImmToIdxMap[PPC::LHA]  = PPC::LHAX; diff --git a/lib/Target/Sparc/SparcInstrInfo.cpp b/lib/Target/Sparc/SparcInstrInfo.cpp index c323af8..e555b79 100644 --- a/lib/Target/Sparc/SparcInstrInfo.cpp +++ b/lib/Target/Sparc/SparcInstrInfo.cpp @@ -27,7 +27,8 @@  using namespace llvm;  SparcInstrInfo::SparcInstrInfo(SparcSubtarget &ST) -  : TargetInstrInfoImpl(SparcInsts, array_lengthof(SparcInsts)), +  : TargetInstrInfoImpl(SparcInsts, array_lengthof(SparcInsts), +                        SP::ADJCALLSTACKDOWN, SP::ADJCALLSTACKUP),      RI(ST, *this), Subtarget(ST) {  } diff --git a/lib/Target/Sparc/SparcRegisterInfo.cpp b/lib/Target/Sparc/SparcRegisterInfo.cpp index 127b951..3b0b5fa 100644 --- a/lib/Target/Sparc/SparcRegisterInfo.cpp +++ b/lib/Target/Sparc/SparcRegisterInfo.cpp @@ -32,8 +32,7 @@ using namespace llvm;  SparcRegisterInfo::SparcRegisterInfo(SparcSubtarget &st,                                       const TargetInstrInfo &tii) -  : SparcGenRegisterInfo(SP::ADJCALLSTACKDOWN, SP::ADJCALLSTACKUP), -    Subtarget(st), TII(tii) { +  : SparcGenRegisterInfo(), Subtarget(st), TII(tii) {  }  const unsigned* SparcRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) diff --git a/lib/Target/SystemZ/SystemZInstrInfo.cpp b/lib/Target/SystemZ/SystemZInstrInfo.cpp index b70e075..71ba9f9 100644 --- a/lib/Target/SystemZ/SystemZInstrInfo.cpp +++ b/lib/Target/SystemZ/SystemZInstrInfo.cpp @@ -29,7 +29,8 @@  using namespace llvm;  SystemZInstrInfo::SystemZInstrInfo(SystemZTargetMachine &tm) -  : TargetInstrInfoImpl(SystemZInsts, array_lengthof(SystemZInsts)), +  : TargetInstrInfoImpl(SystemZInsts, array_lengthof(SystemZInsts), +                        SystemZ::ADJCALLSTACKUP, SystemZ::ADJCALLSTACKDOWN),      RI(tm, *this), TM(tm) {  } diff --git a/lib/Target/SystemZ/SystemZRegisterInfo.cpp b/lib/Target/SystemZ/SystemZRegisterInfo.cpp index 319cc46..21421a9 100644 --- a/lib/Target/SystemZ/SystemZRegisterInfo.cpp +++ b/lib/Target/SystemZ/SystemZRegisterInfo.cpp @@ -34,8 +34,7 @@ using namespace llvm;  SystemZRegisterInfo::SystemZRegisterInfo(SystemZTargetMachine &tm,                                           const SystemZInstrInfo &tii) -  : SystemZGenRegisterInfo(SystemZ::ADJCALLSTACKUP, SystemZ::ADJCALLSTACKDOWN), -    TM(tm), TII(tii) { +  : SystemZGenRegisterInfo(), TM(tm), TII(tii) {  }  const unsigned* diff --git a/lib/Target/TargetInstrInfo.cpp b/lib/Target/TargetInstrInfo.cpp index 66f8f60..d30bb6c 100644 --- a/lib/Target/TargetInstrInfo.cpp +++ b/lib/Target/TargetInstrInfo.cpp @@ -24,7 +24,10 @@ using namespace llvm;  //  TargetInstrInfo  //===----------------------------------------------------------------------===// -TargetInstrInfo::TargetInstrInfo(const MCInstrDesc* Desc, unsigned numOpcodes) { +TargetInstrInfo::TargetInstrInfo(const MCInstrDesc* Desc, unsigned numOpcodes, +                                 int CFSetupOpcode, int CFDestroyOpcode) +  : CallFrameSetupOpcode(CFSetupOpcode), +    CallFrameDestroyOpcode(CFDestroyOpcode) {    InitMCInstrInfo(Desc, numOpcodes);  } diff --git a/lib/Target/TargetRegisterInfo.cpp b/lib/Target/TargetRegisterInfo.cpp index d01130a..90a8f8d 100644 --- a/lib/Target/TargetRegisterInfo.cpp +++ b/lib/Target/TargetRegisterInfo.cpp @@ -22,12 +22,9 @@ using namespace llvm;  TargetRegisterInfo::TargetRegisterInfo(const TargetRegisterInfoDesc *ID,                               regclass_iterator RCB, regclass_iterator RCE, -                             const char *const *subregindexnames, -                             int CFSO, int CFDO) +                             const char *const *subregindexnames)    : InfoDesc(ID), SubRegIndexNames(subregindexnames),      RegClassBegin(RCB), RegClassEnd(RCE) { -  CallFrameSetupOpcode   = CFSO; -  CallFrameDestroyOpcode = CFDO;  }  TargetRegisterInfo::~TargetRegisterInfo() {} diff --git a/lib/Target/X86/X86FastISel.cpp b/lib/Target/X86/X86FastISel.cpp index 09ce538..cdaa292 100644 --- a/lib/Target/X86/X86FastISel.cpp +++ b/lib/Target/X86/X86FastISel.cpp @@ -1630,7 +1630,7 @@ bool X86FastISel::DoSelectCall(const Instruction *I, const char *MemIntName) {    unsigned NumBytes = CCInfo.getNextStackOffset();    // Issue CALLSEQ_START -  unsigned AdjStackDown = TM.getRegisterInfo()->getCallFrameSetupOpcode(); +  unsigned AdjStackDown = TII.getCallFrameSetupOpcode();    BuildMI(*FuncInfo.MBB, FuncInfo.InsertPt, DL, TII.get(AdjStackDown))      .addImm(NumBytes); @@ -1803,7 +1803,7 @@ bool X86FastISel::DoSelectCall(const Instruction *I, const char *MemIntName) {      MIB.addReg(RegArgs[i]);    // Issue CALLSEQ_END -  unsigned AdjStackUp = TM.getRegisterInfo()->getCallFrameDestroyOpcode(); +  unsigned AdjStackUp = TII.getCallFrameDestroyOpcode();    unsigned NumBytesCallee = 0;    if (!Subtarget->is64Bit() && CS.paramHasAttr(1, Attribute::StructRet))      NumBytesCallee = 4; diff --git a/lib/Target/X86/X86InstrInfo.cpp b/lib/Target/X86/X86InstrInfo.cpp index 3112dc7..d44bd35 100644 --- a/lib/Target/X86/X86InstrInfo.cpp +++ b/lib/Target/X86/X86InstrInfo.cpp @@ -54,7 +54,13 @@ ReMatPICStubLoad("remat-pic-stub-load",                   cl::init(false), cl::Hidden);  X86InstrInfo::X86InstrInfo(X86TargetMachine &tm) -  : TargetInstrInfoImpl(X86Insts, array_lengthof(X86Insts)), +  : TargetInstrInfoImpl(X86Insts, array_lengthof(X86Insts), +                        (tm.getSubtarget<X86Subtarget>().is64Bit() +                         ? X86::ADJCALLSTACKDOWN64 +                         : X86::ADJCALLSTACKDOWN32), +                        (tm.getSubtarget<X86Subtarget>().is64Bit() +                         ? X86::ADJCALLSTACKUP64 +                         : X86::ADJCALLSTACKUP32)),      TM(tm), RI(tm, *this) {    enum {      TB_NOT_REVERSABLE = 1U << 31, diff --git a/lib/Target/X86/X86RegisterInfo.cpp b/lib/Target/X86/X86RegisterInfo.cpp index d771d40..90b333f 100644 --- a/lib/Target/X86/X86RegisterInfo.cpp +++ b/lib/Target/X86/X86RegisterInfo.cpp @@ -54,13 +54,7 @@ ForceStackAlign("force-align-stack",  X86RegisterInfo::X86RegisterInfo(X86TargetMachine &tm,                                   const TargetInstrInfo &tii) -  : X86GenRegisterInfo(tm.getSubtarget<X86Subtarget>().is64Bit() ? -                         X86::ADJCALLSTACKDOWN64 : -                         X86::ADJCALLSTACKDOWN32, -                       tm.getSubtarget<X86Subtarget>().is64Bit() ? -                         X86::ADJCALLSTACKUP64 : -                         X86::ADJCALLSTACKUP32), -    TM(tm), TII(tii) { +  : X86GenRegisterInfo(), TM(tm), TII(tii) {    // Cache some information.    const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();    Is64Bit = Subtarget->is64Bit(); @@ -608,7 +602,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,    const TargetFrameLowering *TFI = MF.getTarget().getFrameLowering();    bool reseveCallFrame = TFI->hasReservedCallFrame(MF);    int Opcode = I->getOpcode(); -  bool isDestroy = Opcode == getCallFrameDestroyOpcode(); +  bool isDestroy = Opcode == TII.getCallFrameDestroyOpcode();    DebugLoc DL = I->getDebugLoc();    uint64_t Amount = !reseveCallFrame ? I->getOperand(0).getImm() : 0;    uint64_t CalleeAmt = isDestroy ? I->getOperand(1).getImm() : 0; @@ -629,13 +623,13 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,      Amount = (Amount + StackAlign - 1) / StackAlign * StackAlign;      MachineInstr *New = 0; -    if (Opcode == getCallFrameSetupOpcode()) { +    if (Opcode == TII.getCallFrameSetupOpcode()) {        New = BuildMI(MF, DL, TII.get(getSUBriOpcode(Is64Bit, Amount)),                      StackPtr)          .addReg(StackPtr)          .addImm(Amount);      } else { -      assert(Opcode == getCallFrameDestroyOpcode()); +      assert(Opcode == TII.getCallFrameDestroyOpcode());        // Factor out the amount the callee already popped.        Amount -= CalleeAmt; @@ -658,7 +652,7 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,      return;    } -  if (Opcode == getCallFrameDestroyOpcode() && CalleeAmt) { +  if (Opcode == TII.getCallFrameDestroyOpcode() && CalleeAmt) {      // If we are performing frame pointer elimination and if the callee pops      // something off the stack pointer, add it back.  We do this until we have      // more advanced stack pointer tracking ability. diff --git a/lib/Target/XCore/XCoreInstrInfo.cpp b/lib/Target/XCore/XCoreInstrInfo.cpp index 97a1d52..cb54520 100644 --- a/lib/Target/XCore/XCoreInstrInfo.cpp +++ b/lib/Target/XCore/XCoreInstrInfo.cpp @@ -40,7 +40,8 @@ namespace XCore {  using namespace llvm;  XCoreInstrInfo::XCoreInstrInfo() -  : TargetInstrInfoImpl(XCoreInsts, array_lengthof(XCoreInsts)), +  : TargetInstrInfoImpl(XCoreInsts, array_lengthof(XCoreInsts), +                        XCore::ADJCALLSTACKDOWN, XCore::ADJCALLSTACKUP),      RI(*this) {  } diff --git a/lib/Target/XCore/XCoreRegisterInfo.cpp b/lib/Target/XCore/XCoreRegisterInfo.cpp index ecb9e80..2bf43b4 100644 --- a/lib/Target/XCore/XCoreRegisterInfo.cpp +++ b/lib/Target/XCore/XCoreRegisterInfo.cpp @@ -40,8 +40,7 @@  using namespace llvm;  XCoreRegisterInfo::XCoreRegisterInfo(const TargetInstrInfo &tii) -  : XCoreGenRegisterInfo(XCore::ADJCALLSTACKDOWN, XCore::ADJCALLSTACKUP), -    TII(tii) { +  : XCoreGenRegisterInfo(), TII(tii) {  }  // helper functions diff --git a/utils/TableGen/RegisterInfoEmitter.cpp b/utils/TableGen/RegisterInfoEmitter.cpp index bf27053..abb8624 100644 --- a/utils/TableGen/RegisterInfoEmitter.cpp +++ b/utils/TableGen/RegisterInfoEmitter.cpp @@ -214,8 +214,7 @@ RegisterInfoEmitter::runTargetHeader(raw_ostream &OS, CodeGenTarget &Target,    OS << "namespace llvm {\n\n";    OS << "struct " << ClassName << " : public TargetRegisterInfo {\n" -     << "  explicit " << ClassName -     << "(int CallFrameSetupOpcode = -1, int CallFrameDestroyOpcode = -1);\n" +     << "  explicit " << ClassName << "();\n"       << "  virtual int getDwarfRegNumFull(unsigned RegNum, "       << "unsigned Flavour) const;\n"       << "  virtual int getLLVMRegNumFull(unsigned DwarfRegNum, " @@ -660,11 +659,10 @@ RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,    // Emit the constructor of the class...    OS << ClassName << "::" << ClassName -     << "(int CallFrameSetupOpcode, int CallFrameDestroyOpcode)\n" +     << "()\n"       << "  : TargetRegisterInfo(" << TargetName << "RegInfoDesc"       << ", RegisterClasses, RegisterClasses+" << RegisterClasses.size() <<",\n" -     << "                 SubRegIndexTable,\n" -     << "                 CallFrameSetupOpcode, CallFrameDestroyOpcode) {\n" +     << "                 SubRegIndexTable) {\n"       << "  InitMCRegisterInfo(" << TargetName << "RegDesc, "       << Regs.size()+1 << ");\n"       << "}\n\n";  | 
