瀏覽代碼

[TII] Allow getMemOpBaseRegImmOfs() to accept negative offsets. NFC.

http://reviews.llvm.org/D17967

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@263021 91177308-0d34-0410-b5e6-96231b3b80d8
Chad Rosier 9 年之前
父節點
當前提交
cd3a68c781

+ 1 - 1
include/llvm/Target/TargetInstrInfo.h

@@ -973,7 +973,7 @@ public:
   /// Get the base register and byte offset of an instruction that reads/writes
   /// Get the base register and byte offset of an instruction that reads/writes
   /// memory.
   /// memory.
   virtual bool getMemOpBaseRegImmOfs(MachineInstr *MemOp, unsigned &BaseReg,
   virtual bool getMemOpBaseRegImmOfs(MachineInstr *MemOp, unsigned &BaseReg,
-                                     unsigned &Offset,
+                                     int64_t &Offset,
                                      const TargetRegisterInfo *TRI) const {
                                      const TargetRegisterInfo *TRI) const {
     return false;
     return false;
   }
   }

+ 5 - 5
lib/CodeGen/ImplicitNullChecks.cpp

@@ -46,10 +46,9 @@
 
 
 using namespace llvm;
 using namespace llvm;
 
 
-static cl::opt<unsigned> PageSize("imp-null-check-page-size",
-                                  cl::desc("The page size of the target in "
-                                           "bytes"),
-                                  cl::init(4096));
+static cl::opt<int> PageSize("imp-null-check-page-size",
+                             cl::desc("The page size of the target in bytes"),
+                             cl::init(4096));
 
 
 #define DEBUG_TYPE "implicit-null-checks"
 #define DEBUG_TYPE "implicit-null-checks"
 
 
@@ -324,7 +323,8 @@ bool ImplicitNullChecks::analyzeBlockForNullChecks(
   for (auto MII = NotNullSucc->begin(), MIE = NotNullSucc->end(); MII != MIE;
   for (auto MII = NotNullSucc->begin(), MIE = NotNullSucc->end(); MII != MIE;
        ++MII) {
        ++MII) {
     MachineInstr *MI = &*MII;
     MachineInstr *MI = &*MII;
-    unsigned BaseReg, Offset;
+    unsigned BaseReg;
+    int64_t Offset;
     if (TII->getMemOpBaseRegImmOfs(MI, BaseReg, Offset, TRI))
     if (TII->getMemOpBaseRegImmOfs(MI, BaseReg, Offset, TRI))
       if (MI->mayLoad() && !MI->isPredicable() && BaseReg == PointerReg &&
       if (MI->mayLoad() && !MI->isPredicable() && BaseReg == PointerReg &&
           Offset < PageSize && MI->getDesc().getNumDefs() <= 1 &&
           Offset < PageSize && MI->getDesc().getNumDefs() <= 1 &&

+ 2 - 2
lib/CodeGen/MachineScheduler.cpp

@@ -1361,7 +1361,7 @@ class LoadClusterMutation : public ScheduleDAGMutation {
   struct LoadInfo {
   struct LoadInfo {
     SUnit *SU;
     SUnit *SU;
     unsigned BaseReg;
     unsigned BaseReg;
-    unsigned Offset;
+    int64_t Offset;
     LoadInfo(SUnit *su, unsigned reg, unsigned ofs)
     LoadInfo(SUnit *su, unsigned reg, unsigned ofs)
       : SU(su), BaseReg(reg), Offset(ofs) {}
       : SU(su), BaseReg(reg), Offset(ofs) {}
 
 
@@ -1389,7 +1389,7 @@ void LoadClusterMutation::clusterNeighboringLoads(ArrayRef<SUnit*> Loads,
   for (unsigned Idx = 0, End = Loads.size(); Idx != End; ++Idx) {
   for (unsigned Idx = 0, End = Loads.size(); Idx != End; ++Idx) {
     SUnit *SU = Loads[Idx];
     SUnit *SU = Loads[Idx];
     unsigned BaseReg;
     unsigned BaseReg;
-    unsigned Offset;
+    int64_t Offset;
     if (TII->getMemOpBaseRegImmOfs(SU->getInstr(), BaseReg, Offset, TRI))
     if (TII->getMemOpBaseRegImmOfs(SU->getInstr(), BaseReg, Offset, TRI))
       LoadRecords.push_back(LoadInfo(SU, BaseReg, Offset));
       LoadRecords.push_back(LoadInfo(SU, BaseReg, Offset));
   }
   }

+ 2 - 1
lib/CodeGen/MachineSink.cpp

@@ -702,7 +702,8 @@ static bool SinkingPreventsImplicitNullCheck(MachineInstr *MI,
       !PredBB->getTerminator()->getMetadata(LLVMContext::MD_make_implicit))
       !PredBB->getTerminator()->getMetadata(LLVMContext::MD_make_implicit))
     return false;
     return false;
 
 
-  unsigned BaseReg, Offset;
+  unsigned BaseReg;
+  int64_t Offset;
   if (!TII->getMemOpBaseRegImmOfs(MI, BaseReg, Offset, TRI))
   if (!TII->getMemOpBaseRegImmOfs(MI, BaseReg, Offset, TRI))
     return false;
     return false;
 
 

+ 3 - 4
lib/Target/AArch64/AArch64InstrInfo.cpp

@@ -1313,10 +1313,9 @@ void AArch64InstrInfo::suppressLdStPair(MachineInstr *MI) const {
       ->setFlags(MOSuppressPair << MachineMemOperand::MOTargetStartBit);
       ->setFlags(MOSuppressPair << MachineMemOperand::MOTargetStartBit);
 }
 }
 
 
-bool
-AArch64InstrInfo::getMemOpBaseRegImmOfs(MachineInstr *LdSt, unsigned &BaseReg,
-                                        unsigned &Offset,
-                                        const TargetRegisterInfo *TRI) const {
+bool AArch64InstrInfo::getMemOpBaseRegImmOfs(
+    MachineInstr *LdSt, unsigned &BaseReg, int64_t &Offset,
+    const TargetRegisterInfo *TRI) const {
   switch (LdSt->getOpcode()) {
   switch (LdSt->getOpcode()) {
   default:
   default:
     return false;
     return false;

+ 1 - 1
lib/Target/AArch64/AArch64InstrInfo.h

@@ -91,7 +91,7 @@ public:
   void suppressLdStPair(MachineInstr *MI) const;
   void suppressLdStPair(MachineInstr *MI) const;
 
 
   bool getMemOpBaseRegImmOfs(MachineInstr *LdSt, unsigned &BaseReg,
   bool getMemOpBaseRegImmOfs(MachineInstr *LdSt, unsigned &BaseReg,
-                             unsigned &Offset,
+                             int64_t &Offset,
                              const TargetRegisterInfo *TRI) const override;
                              const TargetRegisterInfo *TRI) const override;
 
 
   bool getMemOpBaseRegImmOfsWidth(MachineInstr *LdSt, unsigned &BaseReg,
   bool getMemOpBaseRegImmOfsWidth(MachineInstr *LdSt, unsigned &BaseReg,

+ 1 - 1
lib/Target/AArch64/AArch64StorePairSuppress.cpp

@@ -141,7 +141,7 @@ bool AArch64StorePairSuppress::runOnMachineFunction(MachineFunction &MF) {
       if (!isNarrowFPStore(MI))
       if (!isNarrowFPStore(MI))
         continue;
         continue;
       unsigned BaseReg;
       unsigned BaseReg;
-      unsigned Offset;
+      int64_t Offset;
       if (TII->getMemOpBaseRegImmOfs(&MI, BaseReg, Offset, TRI)) {
       if (TII->getMemOpBaseRegImmOfs(&MI, BaseReg, Offset, TRI)) {
         if (PrevBaseReg == BaseReg) {
         if (PrevBaseReg == BaseReg) {
           // If this block can take STPs, skip ahead to the next block.
           // If this block can take STPs, skip ahead to the next block.

+ 3 - 3
lib/Target/AMDGPU/SIInstrInfo.cpp

@@ -202,7 +202,7 @@ static bool isStride64(unsigned Opc) {
 }
 }
 
 
 bool SIInstrInfo::getMemOpBaseRegImmOfs(MachineInstr *LdSt, unsigned &BaseReg,
 bool SIInstrInfo::getMemOpBaseRegImmOfs(MachineInstr *LdSt, unsigned &BaseReg,
-                                        unsigned &Offset,
+                                        int64_t &Offset,
                                         const TargetRegisterInfo *TRI) const {
                                         const TargetRegisterInfo *TRI) const {
   unsigned Opc = LdSt->getOpcode();
   unsigned Opc = LdSt->getOpcode();
 
 
@@ -1160,8 +1160,8 @@ static bool offsetsDoNotOverlap(int WidthA, int OffsetA,
 
 
 bool SIInstrInfo::checkInstOffsetsDoNotOverlap(MachineInstr *MIa,
 bool SIInstrInfo::checkInstOffsetsDoNotOverlap(MachineInstr *MIa,
                                                MachineInstr *MIb) const {
                                                MachineInstr *MIb) const {
-  unsigned BaseReg0, Offset0;
-  unsigned BaseReg1, Offset1;
+  unsigned BaseReg0, BaseReg1;
+  int64_t Offset0, Offset1;
 
 
   if (getMemOpBaseRegImmOfs(MIa, BaseReg0, Offset0, &RI) &&
   if (getMemOpBaseRegImmOfs(MIa, BaseReg0, Offset0, &RI) &&
       getMemOpBaseRegImmOfs(MIb, BaseReg1, Offset1, &RI)) {
       getMemOpBaseRegImmOfs(MIb, BaseReg1, Offset1, &RI)) {

+ 1 - 1
lib/Target/AMDGPU/SIInstrInfo.h

@@ -91,7 +91,7 @@ public:
                                int64_t &Offset2) const override;
                                int64_t &Offset2) const override;
 
 
   bool getMemOpBaseRegImmOfs(MachineInstr *LdSt, unsigned &BaseReg,
   bool getMemOpBaseRegImmOfs(MachineInstr *LdSt, unsigned &BaseReg,
-                             unsigned &Offset,
+                             int64_t &Offset,
                              const TargetRegisterInfo *TRI) const final;
                              const TargetRegisterInfo *TRI) const final;
 
 
   bool shouldClusterLoads(MachineInstr *FirstLdSt,
   bool shouldClusterLoads(MachineInstr *FirstLdSt,

+ 2 - 1
lib/Target/AMDGPU/SIMachineScheduler.cpp

@@ -1879,7 +1879,8 @@ void SIScheduleDAGMI::schedule()
 
 
   for (unsigned i = 0, e = (unsigned)SUnits.size(); i != e; ++i) {
   for (unsigned i = 0, e = (unsigned)SUnits.size(); i != e; ++i) {
     SUnit *SU = &SUnits[i];
     SUnit *SU = &SUnits[i];
-    unsigned BaseLatReg, OffLatReg;
+    unsigned BaseLatReg;
+    int64_t OffLatReg;
     if (SITII->isLowLatencyInstruction(SU->getInstr())) {
     if (SITII->isLowLatencyInstruction(SU->getInstr())) {
       IsLowLatencySU[i] = 1;
       IsLowLatencySU[i] = 1;
       if (SITII->getMemOpBaseRegImmOfs(SU->getInstr(), BaseLatReg,
       if (SITII->getMemOpBaseRegImmOfs(SU->getInstr(), BaseLatReg,

+ 1 - 1
lib/Target/X86/X86InstrInfo.cpp

@@ -4612,7 +4612,7 @@ static unsigned getLoadStoreRegOpcode(unsigned Reg,
 }
 }
 
 
 bool X86InstrInfo::getMemOpBaseRegImmOfs(MachineInstr *MemOp, unsigned &BaseReg,
 bool X86InstrInfo::getMemOpBaseRegImmOfs(MachineInstr *MemOp, unsigned &BaseReg,
-                                         unsigned &Offset,
+                                         int64_t &Offset,
                                          const TargetRegisterInfo *TRI) const {
                                          const TargetRegisterInfo *TRI) const {
   const MCInstrDesc &Desc = MemOp->getDesc();
   const MCInstrDesc &Desc = MemOp->getDesc();
   int MemRefBegin = X86II::getMemoryOperandNo(Desc.TSFlags, MemOp->getOpcode());
   int MemRefBegin = X86II::getMemoryOperandNo(Desc.TSFlags, MemOp->getOpcode());

+ 1 - 1
lib/Target/X86/X86InstrInfo.h

@@ -312,7 +312,7 @@ public:
                      bool AllowModify) const override;
                      bool AllowModify) const override;
 
 
   bool getMemOpBaseRegImmOfs(MachineInstr *LdSt, unsigned &BaseReg,
   bool getMemOpBaseRegImmOfs(MachineInstr *LdSt, unsigned &BaseReg,
-                             unsigned &Offset,
+                             int64_t &Offset,
                              const TargetRegisterInfo *TRI) const override;
                              const TargetRegisterInfo *TRI) const override;
   bool AnalyzeBranchPredicate(MachineBasicBlock &MBB,
   bool AnalyzeBranchPredicate(MachineBasicBlock &MBB,
                               TargetInstrInfo::MachineBranchPredicate &MBP,
                               TargetInstrInfo::MachineBranchPredicate &MBP,