diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMBaseInstrInfo.h | 15 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/Thumb1InstrInfo.cpp | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/Thumb1RegisterInfo.cpp | 10 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/Thumb2InstrInfo.cpp | 21 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/Thumb2InstrInfo.h | 6 | 
6 files changed, 40 insertions, 27 deletions
diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp index a8a519a5ec3..72f40a017b4 100644 --- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp +++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp @@ -30,16 +30,6 @@ static cl::opt<bool>  EnableARM3Addr("enable-arm-3-addr-conv", cl::Hidden,                 cl::desc("Enable ARM 2-addr to 3-addr conv")); -static inline -const MachineInstrBuilder &AddDefaultPred(const MachineInstrBuilder &MIB) { -  return MIB.addImm((int64_t)ARMCC::AL).addReg(0); -} - -static inline -const MachineInstrBuilder &AddDefaultCC(const MachineInstrBuilder &MIB) { -  return MIB.addReg(0); -} -  ARMBaseInstrInfo::ARMBaseInstrInfo(const ARMSubtarget &STI)    : TargetInstrInfoImpl(ARMInsts, array_lengthof(ARMInsts)) {  } diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.h b/llvm/lib/Target/ARM/ARMBaseInstrInfo.h index c300264c822..1b0ef21fbae 100644 --- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.h +++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.h @@ -14,9 +14,10 @@  #ifndef ARMBASEINSTRUCTIONINFO_H  #define ARMBASEINSTRUCTIONINFO_H -#include "llvm/Target/TargetInstrInfo.h" -#include "ARMRegisterInfo.h"  #include "ARM.h" +#include "ARMRegisterInfo.h" +#include "llvm/CodeGen/MachineInstrBuilder.h" +#include "llvm/Target/TargetInstrInfo.h"  namespace llvm {    class ARMSubtarget; @@ -187,6 +188,16 @@ namespace ARMII {    };  } +static inline +const MachineInstrBuilder &AddDefaultPred(const MachineInstrBuilder &MIB) { +  return MIB.addImm((int64_t)ARMCC::AL).addReg(0); +} + +static inline +const MachineInstrBuilder &AddDefaultCC(const MachineInstrBuilder &MIB) { +  return MIB.addReg(0); +} +  class ARMBaseInstrInfo : public TargetInstrInfoImpl {  protected:    // Can be only subclassed. diff --git a/llvm/lib/Target/ARM/Thumb1InstrInfo.cpp b/llvm/lib/Target/ARM/Thumb1InstrInfo.cpp index 356e2e2c50a..ddc6e0d154a 100644 --- a/llvm/lib/Target/ARM/Thumb1InstrInfo.cpp +++ b/llvm/lib/Target/ARM/Thumb1InstrInfo.cpp @@ -22,11 +22,6 @@  using namespace llvm; -static inline -const MachineInstrBuilder &AddDefaultPred(const MachineInstrBuilder &MIB) { -  return MIB.addImm((int64_t)ARMCC::AL).addReg(0); -} -  Thumb1InstrInfo::Thumb1InstrInfo(const ARMSubtarget &STI)    : ARMBaseInstrInfo(STI), RI(*this, STI) {  } diff --git a/llvm/lib/Target/ARM/Thumb1RegisterInfo.cpp b/llvm/lib/Target/ARM/Thumb1RegisterInfo.cpp index 9c933063230..e2c511a849f 100644 --- a/llvm/lib/Target/ARM/Thumb1RegisterInfo.cpp +++ b/llvm/lib/Target/ARM/Thumb1RegisterInfo.cpp @@ -47,16 +47,6 @@ Thumb1RegisterInfo::Thumb1RegisterInfo(const ARMBaseInstrInfo &tii,    : ARMBaseRegisterInfo(tii, sti) {  } -static inline -const MachineInstrBuilder &AddDefaultPred(const MachineInstrBuilder &MIB) { -  return MIB.addImm((int64_t)ARMCC::AL).addReg(0); -} - -static inline -const MachineInstrBuilder &AddDefaultCC(const MachineInstrBuilder &MIB) { -  return MIB.addReg(ARM::CPSR); -} -  /// emitLoadConstPool - Emits a load from constpool to materialize the  /// specified immediate.  void Thumb1RegisterInfo::emitLoadConstPool(MachineBasicBlock &MBB, diff --git a/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp b/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp index 6103463e87b..081cf4f5503 100644 --- a/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp +++ b/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp @@ -87,3 +87,24 @@ Thumb2InstrInfo::BlockHasNoFallThrough(const MachineBasicBlock &MBB) const {    return false;  } + +bool +Thumb2InstrInfo::copyRegToReg(MachineBasicBlock &MBB, +                              MachineBasicBlock::iterator I, +                              unsigned DestReg, unsigned SrcReg, +                              const TargetRegisterClass *DestRC, +                              const TargetRegisterClass *SrcRC) const { +  DebugLoc DL = DebugLoc::getUnknownLoc(); +  if (I != MBB.end()) DL = I->getDebugLoc(); + +  if ((DestRC == ARM::GPRRegisterClass && +       SrcRC == ARM::tGPRRegisterClass) || +      (DestRC == ARM::tGPRRegisterClass && +       SrcRC == ARM::GPRRegisterClass)) { +    AddDefaultCC(AddDefaultPred(BuildMI(MBB, I, DL, get(getOpcode(ARMII::MOVr)), +                                        DestReg).addReg(SrcReg))); +    return true; +  } + +  return ARMBaseInstrInfo::copyRegToReg(MBB, I, DestReg, SrcReg, DestRC, SrcRC); +} diff --git a/llvm/lib/Target/ARM/Thumb2InstrInfo.h b/llvm/lib/Target/ARM/Thumb2InstrInfo.h index d408a7cffaf..ac31707ab78 100644 --- a/llvm/lib/Target/ARM/Thumb2InstrInfo.h +++ b/llvm/lib/Target/ARM/Thumb2InstrInfo.h @@ -37,6 +37,12 @@ public:    // Return true if the block does not fall through.    bool BlockHasNoFallThrough(const MachineBasicBlock &MBB) const; +  bool copyRegToReg(MachineBasicBlock &MBB, +                    MachineBasicBlock::iterator I, +                    unsigned DestReg, unsigned SrcReg, +                    const TargetRegisterClass *DestRC, +                    const TargetRegisterClass *SrcRC) const; +    /// getRegisterInfo - TargetInstrInfo is a superset of MRegister info.  As    /// such, whenever a client has an instance of instruction info, it should    /// always be able to get register info as well (through this method).  | 

