[TargetRegisterInfo] Default trackLivenessAfterRegAlloc() to true
authorFangrui Song <i@maskray.me>
Sun, 19 Jan 2020 21:35:54 +0000 (13:35 -0800)
committerFangrui Song <maskray@google.com>
Sun, 19 Jan 2020 22:20:37 +0000 (14:20 -0800)
Except AMDGPU/R600RegisterInfo (a bunch of MIR tests seem to have
problems), every target overrides it with true. PostMachineScheduler
requires livein information. Not providing it can cause assertion
failures in ScheduleDAGInstrs::addSchedBarrierDeps().

23 files changed:
llvm/include/llvm/CodeGen/TargetRegisterInfo.h
llvm/lib/Target/AArch64/AArch64FalkorHWPFFix.cpp
llvm/lib/Target/AArch64/AArch64RegisterInfo.h
llvm/lib/Target/AMDGPU/R600RegisterInfo.h
llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp
llvm/lib/Target/AMDGPU/SIRegisterInfo.h
llvm/lib/Target/ARC/ARCRegisterInfo.cpp
llvm/lib/Target/ARC/ARCRegisterInfo.h
llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp
llvm/lib/Target/ARM/ARMBaseRegisterInfo.h
llvm/lib/Target/AVR/AVRRegisterInfo.h
llvm/lib/Target/Hexagon/HexagonRegisterInfo.h
llvm/lib/Target/Lanai/LanaiRegisterInfo.cpp
llvm/lib/Target/Lanai/LanaiRegisterInfo.h
llvm/lib/Target/Mips/MipsRegisterInfo.cpp
llvm/lib/Target/Mips/MipsRegisterInfo.h
llvm/lib/Target/PowerPC/PPCRegisterInfo.h
llvm/lib/Target/RISCV/RISCVRegisterInfo.h
llvm/lib/Target/SystemZ/SystemZRegisterInfo.h
llvm/lib/Target/X86/X86RegisterInfo.cpp
llvm/lib/Target/X86/X86RegisterInfo.h
llvm/lib/Target/XCore/XCoreRegisterInfo.cpp
llvm/lib/Target/XCore/XCoreRegisterInfo.h

index c42ca3ad6eb99f8dc25f51cd9942c200ef533fce..ae46c2971457150e91aa9046629579877e8ad535 100644 (file)
@@ -855,7 +855,7 @@ public:
 
   /// Returns true if the live-ins should be tracked after register allocation.
   virtual bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const {
-    return false;
+    return true;
   }
 
   /// True if the stack can be realigned for the target.
index c1fc183b04f6f87e983e7bbe3d2a94ddd5588b98..538863ebe95af18d80a2e9e4f7c682341f9d6d7d 100644 (file)
@@ -823,9 +823,6 @@ bool FalkorHWPFFix::runOnMachineFunction(MachineFunction &Fn) {
   TII = static_cast<const AArch64InstrInfo *>(ST.getInstrInfo());
   TRI = ST.getRegisterInfo();
 
-  assert(TRI->trackLivenessAfterRegAlloc(Fn) &&
-         "Register liveness not available!");
-
   MachineLoopInfo &LI = getAnalysis<MachineLoopInfo>();
 
   Modified = false;
index 2c3f82c530d8ad6dfddb33f1ea7d85d33d9b5ff7..905bfb5f4c0ba5f569b3ac874397af7798f0b432 100644 (file)
@@ -118,10 +118,6 @@ public:
   unsigned getRegPressureLimit(const TargetRegisterClass *RC,
                                MachineFunction &MF) const override;
 
-  bool trackLivenessAfterRegAlloc(const MachineFunction&) const override {
-    return true;
-  }
-
   unsigned getLocalAddressRegister(const MachineFunction &MF) const;
 };
 
index 9378b70ca580777080b0e25a85f4368a102814ec..22a2bda22b89635e48a0ae67cd48fe6778310414 100644 (file)
@@ -40,6 +40,10 @@ struct R600RegisterInfo final : public R600GenRegisterInfo {
   const RegClassWeight &
     getRegClassWeight(const TargetRegisterClass *RC) const override;
 
+  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override {
+    return false;
+  }
+
   // \returns true if \p Reg can be defined in one ALU clause and used in
   // another.
   bool isPhysRegLiveAcrossClauses(unsigned Reg) const;
index fbadad3c84ad82df25780381510d1718314b57f4..220bafe5b492cf315df8449c339541f27ca326ec 100644 (file)
@@ -305,11 +305,6 @@ bool SIRegisterInfo::requiresVirtualBaseRegisters(
   return true;
 }
 
-bool SIRegisterInfo::trackLivenessAfterRegAlloc(const MachineFunction &MF) const {
-  // This helps catch bugs as verifier errors.
-  return true;
-}
-
 int64_t SIRegisterInfo::getMUBUFInstrOffset(const MachineInstr *MI) const {
   assert(SIInstrInfo::isMUBUF(*MI));
 
index ac8c56fa3a0382f0287bdf753dc5b6ded96709a6..c335b49bb7a23d7f6a22e28493f4df6e1e5edd18 100644 (file)
@@ -77,7 +77,6 @@ public:
   bool requiresFrameIndexReplacementScavenging(
     const MachineFunction &MF) const override;
   bool requiresVirtualBaseRegisters(const MachineFunction &Fn) const override;
-  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override;
 
   int64_t getMUBUFInstrOffset(const MachineInstr *MI) const;
 
index 490f089300916fa32709856845e7498365d56e4b..c49af8a45236f03d1b1d7de646a0b5eeeb4a5949 100644 (file)
@@ -153,11 +153,6 @@ bool ARCRegisterInfo::requiresRegisterScavenging(
   return true;
 }
 
-bool ARCRegisterInfo::trackLivenessAfterRegAlloc(
-    const MachineFunction &MF) const {
-  return true;
-}
-
 bool ARCRegisterInfo::useFPForScavengingIndex(const MachineFunction &MF) const {
   return true;
 }
index af41234e9dda8b2eac8709fc52ed34c5a0255aa5..f8bca11fdbc86a5e46503f7b9aef7c62ec2164e3 100644 (file)
@@ -34,8 +34,6 @@ public:
 
   bool requiresRegisterScavenging(const MachineFunction &MF) const override;
 
-  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override;
-
   bool useFPForScavengingIndex(const MachineFunction &MF) const override;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
index 52e6d05c3155880d4fe7ee15a0291f0ae65ab534..7d6fe0c49692b9e023e413a6279e0b258e5cc565 100644 (file)
@@ -479,11 +479,6 @@ requiresRegisterScavenging(const MachineFunction &MF) const {
   return true;
 }
 
-bool ARMBaseRegisterInfo::
-trackLivenessAfterRegAlloc(const MachineFunction &MF) const {
-  return true;
-}
-
 bool ARMBaseRegisterInfo::
 requiresFrameIndexScavenging(const MachineFunction &MF) const {
   return true;
index 477f3ad0a9a7e450d4cb25c41e99ebc21ee5dc53..ef705be80ce8fcd84ffc328a4ff79f4eb078aa67 100644 (file)
@@ -192,8 +192,6 @@ public:
   /// Code Generation virtual methods...
   bool requiresRegisterScavenging(const MachineFunction &MF) const override;
 
-  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override;
-
   bool requiresFrameIndexScavenging(const MachineFunction &MF) const override;
 
   bool requiresVirtualBaseRegisters(const MachineFunction &MF) const override;
index 8e6e63af3d579e4c4e3e590e2cff94b2b4d6250e..1d6a5c14846464fef986c368d4e46484a16750c7 100644 (file)
@@ -51,10 +51,6 @@ public:
   /// \param Reg A 16-bit register to split.
   void splitReg(unsigned Reg, unsigned &LoReg, unsigned &HiReg) const;
 
-  bool trackLivenessAfterRegAlloc(const MachineFunction &) const override {
-    return true;
-  }
-
   bool shouldCoalesce(MachineInstr *MI,
                       const TargetRegisterClass *SrcRC,
                       unsigned SubReg,
index fc166b5a34109577e63679ff68f71c7b2d112ecd..52d15da3bcb538e867d6898424b6574384a22828 100644 (file)
@@ -56,10 +56,6 @@ public:
   /// Returns true if the frame pointer is valid.
   bool useFPForScavengingIndex(const MachineFunction &MF) const override;
 
-  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override {
-    return true;
-  }
-
   bool shouldCoalesce(MachineInstr *MI, const TargetRegisterClass *SrcRC,
         unsigned SubReg, const TargetRegisterClass *DstRC, unsigned DstSubReg,
         const TargetRegisterClass *NewRC, LiveIntervals &LIS) const override;
index 7c28debb94dd41458803335a05909862626e8575..64f87ae5f9630424f1cd7a8c8a24eb5212371da5 100644 (file)
@@ -66,11 +66,6 @@ bool LanaiRegisterInfo::requiresRegisterScavenging(
   return true;
 }
 
-bool LanaiRegisterInfo::trackLivenessAfterRegAlloc(
-    const MachineFunction & /*MF*/) const {
-  return true;
-}
-
 static bool isALUArithLoOpcode(unsigned Opcode) {
   switch (Opcode) {
   case Lanai::ADD_I_LO:
index 4e4da619d366cff9592a339b29ec5b91319e7794..cbc95b273e1dfec171254d08b520b021cc6106ab 100644 (file)
@@ -34,8 +34,6 @@ struct LanaiRegisterInfo : public LanaiGenRegisterInfo {
 
   bool requiresRegisterScavenging(const MachineFunction &MF) const override;
 
-  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override;
-
   void eliminateFrameIndex(MachineBasicBlock::iterator II, int SPAdj,
                            unsigned FIOperandNum,
                            RegScavenger *RS = nullptr) const override;
index 7b02d126eb2812fc4fdb225eac40c619fc17e537..1d1744a49b3a25e9f23ac03240f905c120be7bb2 100644 (file)
@@ -245,11 +245,6 @@ MipsRegisterInfo::requiresRegisterScavenging(const MachineFunction &MF) const {
   return true;
 }
 
-bool
-MipsRegisterInfo::trackLivenessAfterRegAlloc(const MachineFunction &MF) const {
-  return true;
-}
-
 // FrameIndex represent objects inside a abstract stack.
 // We must replace FrameIndex with an stack/frame pointer
 // direct reference.
index 4ed32b09718bf85a600553085b904453ee8c6190..06f214c2d6b12704b2136bda0d07bf29023ae26e 100644 (file)
@@ -58,8 +58,6 @@ public:
 
   bool requiresRegisterScavenging(const MachineFunction &MF) const override;
 
-  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override;
-
   /// Stack Frame Processing Methods
   void eliminateFrameIndex(MachineBasicBlock::iterator II,
                            int SPAdj, unsigned FIOperandNum,
index a5fbb0c6ec641fe6f7aeb7f59601e381db5d8111..be131da61ee85ef20d58d001221839c57ad6bb19 100644 (file)
@@ -101,10 +101,6 @@ public:
 
   bool requiresFrameIndexScavenging(const MachineFunction &MF) const override;
 
-  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override {
-    return true;
-  }
-
   bool requiresVirtualBaseRegisters(const MachineFunction &MF) const override {
     return true;
   }
index 30b639517fde8686d0c62487e2fc7871f8c4a4a0..ee5b3b767d4aaab8ebf38b21ce3b6d929f3ee1af 100644 (file)
@@ -51,10 +51,6 @@ struct RISCVRegisterInfo : public RISCVGenRegisterInfo {
     return true;
   }
 
-  bool trackLivenessAfterRegAlloc(const MachineFunction &) const override {
-    return true;
-  }
-
   const TargetRegisterClass *
   getPointerRegClass(const MachineFunction &MF,
                      unsigned Kind = 0) const override {
index 7044efef1ac64666e24a7783d98e18353af07318..5ee5ac150a45f0689d80d6ec262ccd812235680e 100644 (file)
@@ -72,9 +72,6 @@ public:
   bool requiresFrameIndexScavenging(const MachineFunction &MF) const override {
     return true;
   }
-  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override {
-    return true;
-  }
   const MCPhysReg *getCalleeSavedRegs(const MachineFunction *MF) const override;
   const uint32_t *getCallPreservedMask(const MachineFunction &MF,
                                        CallingConv::ID CC) const override;
index f69626b2622e4c3e42926482a52d1518d2d69e82..22becf4b1e46463e5573a92566a4c3a6b09454c0 100644 (file)
@@ -72,12 +72,6 @@ X86RegisterInfo::X86RegisterInfo(const Triple &TT)
   }
 }
 
-bool
-X86RegisterInfo::trackLivenessAfterRegAlloc(const MachineFunction &MF) const {
-  // ExecutionDomainFix, BreakFalseDeps and PostRAScheduler require liveness.
-  return true;
-}
-
 int
 X86RegisterInfo::getSEHRegNum(unsigned i) const {
   return getEncodingValue(i);
index b82920898069421f77559d9e273b56ccc5d0c909..1c933f4543ece5255638f4056421a79f35ae8c7a 100644 (file)
@@ -54,10 +54,6 @@ public:
   // FIXME: This should be tablegen'd like getDwarfRegNum is
   int getSEHRegNum(unsigned i) const;
 
-  /// Code Generation virtual methods...
-  ///
-  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override;
-
   /// getMatchingSuperRegClass - Return a subclass of the specified register
   /// class A so that each register in it has a sub-register of the
   /// specified sub-register index which is in the specified register class B.
index 56fed26ebd7bfc2040f926c9fdad3fe386c3c593..6799823f6fcb75882cb178df7cf590c7158a7a53 100644 (file)
@@ -245,11 +245,6 @@ XCoreRegisterInfo::requiresRegisterScavenging(const MachineFunction &MF) const {
   return true;
 }
 
-bool
-XCoreRegisterInfo::trackLivenessAfterRegAlloc(const MachineFunction &MF) const {
-  return true;
-}
-
 bool
 XCoreRegisterInfo::useFPForScavengingIndex(const MachineFunction &MF) const {
   return false;
index 35a42e1a1457782ffe065d41670bb54ea0db5a4d..49f3568a92dee81215d8fa7280c31d9ebaa3d6ec 100644 (file)
@@ -34,8 +34,6 @@ public:
 
   bool requiresRegisterScavenging(const MachineFunction &MF) const override;
 
-  bool trackLivenessAfterRegAlloc(const MachineFunction &MF) const override;
-
   bool useFPForScavengingIndex(const MachineFunction &MF) const override;
 
   void eliminateFrameIndex(MachineBasicBlock::iterator II,