[llvm] [AMDGPU] Save and restore SCC using only 32-bit SGPR. (PR #68367)

Pierre van Houtryve via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 10 05:31:42 PDT 2023


================
@@ -5094,6 +5094,39 @@ unsigned SIInstrInfo::getVALUOp(const MachineInstr &MI) const {
       "Unexpected scalar opcode without corresponding vector one!");
 }
 
+bool SIInstrInfo::isSCCDefinedBefore(MachineBasicBlock &MBB,
+                                     MachineBasicBlock::iterator Before) const {
+
+  for (MachineBasicBlock::iterator I = Before, B = MBB.begin(); I != B; --I) {
+    MachineInstr &MI = *I;
+    if (!MI.hasImplicitDef())
+      continue;
+    for (MachineOperand &Op : MI.implicit_operands()) {
+      if (Op.getReg() == AMDGPU::SCC && Op.isDef() && !Op.isDead())
+        return true;
+    }
+  }
+  return false;
+}
+
+bool SIInstrInfo::isSCCUsedAfter(MachineBasicBlock &MBB,
+                                 MachineBasicBlock::iterator After) const {
+  for (MachineBasicBlock::iterator I = After, E = MBB.end(); I != E; ++I) {
+    MachineInstr &MI = *I;
+    if (MI.hasRegisterImplicitUseOperand(AMDGPU::SCC))
+      return true;
+  }
+  return false;
+}
+
+bool SIInstrInfo::isSCCDefinedAndUsed(MachineBasicBlock &MBB,
+                                      MachineBasicBlock::iterator Before,
+                                      MachineBasicBlock::iterator After) const {
+  if (isSCCDefinedBefore(MBB, Before) && isSCCUsedAfter(MBB, After))
+    return true;
+  return false;
----------------
Pierre-vh wrote:

`return isSCCDefinedBefore(MBB, Before) && isSCCUsedAfter(MBB, After)`

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


More information about the llvm-commits mailing list