[llvm] [AMDGPU] Save/Restore SCC bit across waterfall loop. (PR #68363)

Sirish Pande via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 5 16:05:25 PDT 2023


================
@@ -6014,6 +6047,16 @@ loadMBUFScalarOperandsFromVGPR(const SIInstrInfo &TII, MachineInstr &MI,
   unsigned MovExecOpc = ST.isWave32() ? AMDGPU::S_MOV_B32 : AMDGPU::S_MOV_B64;
   const auto *BoolXExecRC = TRI->getRegClass(AMDGPU::SReg_1_XEXECRegClassID);
 
+  // Save SCC. Waterfall Loop may overwrite SCC.
+  Register SaveSCCReg;
+  bool SCCDefined = false;
+  if ((SCCDefined = TII.isSCCDefinedAndUsed(MBB, Begin, End))) {
+    SaveSCCReg = MRI.createVirtualRegister(
+        TRI->getRegClass(AMDGPU::SReg_1_XEXECRegClassID));
----------------
srpande wrote:

Yes, I have that which looks like this:
  if ((SCCDefined = TII.isSCCDefinedAndUsed(MBB, Begin, End))) {
    SaveSCCReg = MRI.createVirtualRegister(&AMDGPU::SReg_32RegClass);
    BuildMI(MBB, Begin, DL, TII.get(AMDGPU::COPY), SaveSCCReg)
        .addReg(AMDGPU::SCC);
  }
I am putting that in another patch, which requires change in fixSCCCopies in SIFixSGPRCopies.cpp

https://github.com/llvm/llvm-project/pull/68363


More information about the llvm-commits mailing list