diff options
| author | Anton Korobeynikov <asl@math.spbu.ru> | 2010-11-18 21:19:35 +0000 | 
|---|---|---|
| committer | Anton Korobeynikov <asl@math.spbu.ru> | 2010-11-18 21:19:35 +0000 | 
| commit | d0c38176690e9602a93a20a43f1bd084564a8116 (patch) | |
| tree | d4c7a39ff5665d4adb34f193c2256f1c6d033181 /lib/Target/Blackfin | |
| parent | b9064bb96458ab48a878e1a7e678cada2e22ab7a (diff) | |
| download | external_llvm-d0c38176690e9602a93a20a43f1bd084564a8116.zip external_llvm-d0c38176690e9602a93a20a43f1bd084564a8116.tar.gz external_llvm-d0c38176690e9602a93a20a43f1bd084564a8116.tar.bz2  | |
Move hasFP() and few related hooks to TargetFrameInfo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@119740 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/Blackfin')
| -rw-r--r-- | lib/Target/Blackfin/BlackfinFrameInfo.cpp | 14 | ||||
| -rw-r--r-- | lib/Target/Blackfin/BlackfinFrameInfo.h | 2 | ||||
| -rw-r--r-- | lib/Target/Blackfin/BlackfinRegisterInfo.cpp | 24 | ||||
| -rw-r--r-- | lib/Target/Blackfin/BlackfinRegisterInfo.h | 2 | ||||
| -rw-r--r-- | lib/Target/Blackfin/BlackfinRegisterInfo.td | 20 | 
5 files changed, 35 insertions, 27 deletions
diff --git a/lib/Target/Blackfin/BlackfinFrameInfo.cpp b/lib/Target/Blackfin/BlackfinFrameInfo.cpp index 83f28b0..4f9054b 100644 --- a/lib/Target/Blackfin/BlackfinFrameInfo.cpp +++ b/lib/Target/Blackfin/BlackfinFrameInfo.cpp @@ -16,10 +16,20 @@  #include "llvm/CodeGen/MachineFrameInfo.h"  #include "llvm/CodeGen/MachineFunction.h"  #include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/Target/TargetOptions.h"  using namespace llvm; +// hasFP - Return true if the specified function should have a dedicated frame +// pointer register.  This is true if the function has variable sized allocas or +// if frame pointer elimination is disabled. +bool BlackfinFrameInfo::hasFP(const MachineFunction &MF) const { +  const MachineFrameInfo *MFI = MF.getFrameInfo(); +  return DisableFramePointerElim(MF) || +    MFI->adjustsStack() || MFI->hasVarSizedObjects(); +} +  // Emit a prologue that sets up a stack frame.  // On function entry, R0-R2 and P0 may hold arguments.  // R3, P1, and P2 may be used as scratch registers @@ -40,7 +50,7 @@ void BlackfinFrameInfo::emitPrologue(MachineFunction &MF) const {      MFI->setStackSize(FrameSize);    } -  if (!RegInfo->hasFP(MF)) { +  if (!hasFP(MF)) {      assert(!MFI->adjustsStack() &&             "FP elimination on a non-leaf function is not supported");      RegInfo->adjustRegister(MBB, MBBI, dl, BF::SP, BF::P1, -FrameSize); @@ -85,7 +95,7 @@ void BlackfinFrameInfo::emitEpilogue(MachineFunction &MF,    int FrameSize = MFI->getStackSize();    assert(FrameSize%4 == 0 && "Misaligned frame size"); -  if (!RegInfo->hasFP(MF)) { +  if (!hasFP(MF)) {      assert(!MFI->adjustsStack() &&             "FP elimination on a non-leaf function is not supported");      RegInfo->adjustRegister(MBB, MBBI, dl, BF::SP, BF::P1, FrameSize); diff --git a/lib/Target/Blackfin/BlackfinFrameInfo.h b/lib/Target/Blackfin/BlackfinFrameInfo.h index ff8ba2d..3b53f34 100644 --- a/lib/Target/Blackfin/BlackfinFrameInfo.h +++ b/lib/Target/Blackfin/BlackfinFrameInfo.h @@ -34,6 +34,8 @@ public:    /// the function.    void emitPrologue(MachineFunction &MF) const;    void emitEpilogue(MachineFunction &MF, MachineBasicBlock &MBB) const; + +  bool hasFP(const MachineFunction &MF) const;  };  } // End llvm namespace diff --git a/lib/Target/Blackfin/BlackfinRegisterInfo.cpp b/lib/Target/Blackfin/BlackfinRegisterInfo.cpp index 4f827b7..23df625 100644 --- a/lib/Target/Blackfin/BlackfinRegisterInfo.cpp +++ b/lib/Target/Blackfin/BlackfinRegisterInfo.cpp @@ -50,6 +50,8 @@ BlackfinRegisterInfo::getCalleeSavedRegs(const MachineFunction *MF) const {  BitVector  BlackfinRegisterInfo::getReservedRegs(const MachineFunction &MF) const { +  const TargetFrameInfo *TFI = MF.getTarget().getFrameInfo(); +    using namespace BF;    BitVector Reserved(getNumRegs());    Reserved.set(AZ); @@ -70,20 +72,11 @@ BlackfinRegisterInfo::getReservedRegs(const MachineFunction &MF) const {    Reserved.set(L3);    Reserved.set(SP);    Reserved.set(RETS); -  if (hasFP(MF)) +  if (TFI->hasFP(MF))      Reserved.set(FP);    return Reserved;  } -// hasFP - Return true if the specified function should have a dedicated frame -// pointer register.  This is true if the function has variable sized allocas or -// if frame pointer elimination is disabled. -bool BlackfinRegisterInfo::hasFP(const MachineFunction &MF) const { -  const MachineFrameInfo *MFI = MF.getFrameInfo(); -  return DisableFramePointerElim(MF) || -    MFI->adjustsStack() || MFI->hasVarSizedObjects(); -} -  bool BlackfinRegisterInfo::  requiresRegisterScavenging(const MachineFunction &MF) const {    return true; @@ -161,7 +154,9 @@ void BlackfinRegisterInfo::  eliminateCallFramePseudoInstr(MachineFunction &MF,                                MachineBasicBlock &MBB,                                MachineBasicBlock::iterator I) const { -  if (!hasReservedCallFrame(MF)) { +  const TargetFrameInfo *TFI = MF.getTarget().getFrameInfo(); + +  if (!TFI->hasReservedCallFrame(MF)) {      int64_t Amount = I->getOperand(0).getImm();      if (Amount != 0) {        assert(Amount%4 == 0 && "Unaligned call frame size"); @@ -196,6 +191,7 @@ BlackfinRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,    MachineInstr &MI = *II;    MachineBasicBlock &MBB = *MI.getParent();    MachineFunction &MF = *MBB.getParent(); +  const TargetFrameInfo *TFI = MF.getTarget().getFrameInfo();    DebugLoc DL = MI.getDebugLoc();    unsigned FIPos; @@ -208,7 +204,7 @@ BlackfinRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,    int Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex)      + MI.getOperand(FIPos+1).getImm();    unsigned BaseReg = BF::FP; -  if (hasFP(MF)) { +  if (TFI->hasFP(MF)) {      assert(SPAdj==0 && "Unexpected SP adjust in function with frame pointer");    } else {      BaseReg = BF::SP; @@ -348,7 +344,9 @@ unsigned BlackfinRegisterInfo::getRARegister() const {  unsigned  BlackfinRegisterInfo::getFrameRegister(const MachineFunction &MF) const { -  return hasFP(MF) ? BF::FP : BF::SP; +  const TargetFrameInfo *TFI = MF.getTarget().getFrameInfo(); + +  return TFI->hasFP(MF) ? BF::FP : BF::SP;  }  unsigned BlackfinRegisterInfo::getEHExceptionRegister() const { diff --git a/lib/Target/Blackfin/BlackfinRegisterInfo.h b/lib/Target/Blackfin/BlackfinRegisterInfo.h index be08292..0c47d25 100644 --- a/lib/Target/Blackfin/BlackfinRegisterInfo.h +++ b/lib/Target/Blackfin/BlackfinRegisterInfo.h @@ -41,8 +41,6 @@ namespace llvm {        return &BF::PRegClass;      } -    bool hasFP(const MachineFunction &MF) const; -      // bool hasReservedCallFrame(MachineFunction &MF) const;      bool requiresRegisterScavenging(const MachineFunction &MF) const; diff --git a/lib/Target/Blackfin/BlackfinRegisterInfo.td b/lib/Target/Blackfin/BlackfinRegisterInfo.td index e1cfae9..f34e19c 100644 --- a/lib/Target/Blackfin/BlackfinRegisterInfo.td +++ b/lib/Target/Blackfin/BlackfinRegisterInfo.td @@ -252,9 +252,9 @@ def P : RegisterClass<"BF", [i32], 32, [P0, P1, P2, P3, P4, P5, FP, SP]> {      PClass::iterator      PClass::allocation_order_end(const MachineFunction &MF) const {        const TargetMachine &TM = MF.getTarget(); -      const TargetRegisterInfo *RI = TM.getRegisterInfo(); +      const TargetFrameInfo *TFI = TM.getFrameInfo();        return allocation_order_begin(MF) -             + (RI->hasFP(MF) ? 7 : 6); +             + (TFI->hasFP(MF) ? 7 : 6);      }    }];  } @@ -275,9 +275,9 @@ def DP : RegisterClass<"BF", [i32], 32,      DPClass::iterator      DPClass::allocation_order_end(const MachineFunction &MF) const {        const TargetMachine &TM = MF.getTarget(); -      const TargetRegisterInfo *RI = TM.getRegisterInfo(); +      const TargetFrameInfo *TFI = TM.getFrameInfo();        return allocation_order_begin(MF) -             + (RI->hasFP(MF) ? 15 : 14); +             + (TFI->hasFP(MF) ? 15 : 14);      }    }];  } @@ -295,9 +295,9 @@ def GR : RegisterClass<"BF", [i32], 32,      GRClass::iterator      GRClass::allocation_order_end(const MachineFunction &MF) const {        const TargetMachine &TM = MF.getTarget(); -      const TargetRegisterInfo *RI = TM.getRegisterInfo(); +      const TargetFrameInfo *TFI = TM.getFrameInfo();        return allocation_order_begin(MF) -             + (RI->hasFP(MF) ? 31 : 30); +             + (TFI->hasFP(MF) ? 31 : 30);      }    }];  } @@ -318,9 +318,9 @@ def ALL : RegisterClass<"BF", [i32], 32,      ALLClass::iterator      ALLClass::allocation_order_end(const MachineFunction &MF) const {        const TargetMachine &TM = MF.getTarget(); -      const TargetRegisterInfo *RI = TM.getRegisterInfo(); +      const TargetFrameInfo *TFI = TM.getFrameInfo();        return allocation_order_begin(MF) -             + (RI->hasFP(MF) ? 31 : 30); +             + (TFI->hasFP(MF) ? 31 : 30);      }    }];  } @@ -334,9 +334,9 @@ def PI : RegisterClass<"BF", [i32], 32,      PIClass::iterator      PIClass::allocation_order_end(const MachineFunction &MF) const {        const TargetMachine &TM = MF.getTarget(); -      const TargetRegisterInfo *RI = TM.getRegisterInfo(); +      const TargetFrameInfo *TFI = TM.getFrameInfo();        return allocation_order_begin(MF) -             + (RI->hasFP(MF) ? 11 : 10); +             + (TFI->hasFP(MF) ? 11 : 10);      }    }];  }  | 
