[PATCH] D77544: [AMDGPU] Moving SI_RETURN_TO_EPILOG handling out of SIInsertSkips.

Christudasan Devadasan via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 6 05:55:58 PDT 2020


cdevadas created this revision.
cdevadas added a reviewer: arsenm.
Herald added subscribers: llvm-commits, kerbowa, hiraditya, t-tye, tpr, dstuttard, yaxunl, nhaehnle, wdng, jvesely, kzhuravl.
Herald added a project: LLVM.

For now, moving it to SIPreEmitPeephole.
Should find an right place to have this code.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77544

Files:
  llvm/lib/Target/AMDGPU/SIInsertSkips.cpp
  llvm/lib/Target/AMDGPU/SIPreEmitPeephole.cpp


Index: llvm/lib/Target/AMDGPU/SIPreEmitPeephole.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/SIPreEmitPeephole.cpp
+++ llvm/lib/Target/AMDGPU/SIPreEmitPeephole.cpp
@@ -148,6 +148,7 @@
   TII = ST.getInstrInfo();
   TRI = &TII->getRegisterInfo();
   bool Changed = false;
+  MachineBasicBlock *EmptyMBBAtEnd = nullptr;
 
   for (MachineBasicBlock &MBB : MF) {
     MachineBasicBlock::iterator MBBI = MBB.getFirstTerminator();
@@ -160,6 +161,28 @@
     case AMDGPU::S_CBRANCH_VCCNZ:
       Changed |= optimizeVccBranch(MI);
       break;
+
+    case AMDGPU::SI_RETURN_TO_EPILOG:
+      // FIXME: Should move somewhere else
+      assert(!MF.getInfo<SIMachineFunctionInfo>()->returnsVoid());
+
+      // Graphics shaders returning non-void shouldn't contain S_ENDPGM,
+      // because external bytecode will be appended at the end.
+      if (&MBB != &MF.back() || &MI != &MBB.back()) {
+        // SI_RETURN_TO_EPILOG is not the last instruction. Add an empty block
+        // at the end and jump there.
+        if (!EmptyMBBAtEnd) {
+          EmptyMBBAtEnd = MF.CreateMachineBasicBlock();
+          MF.insert(MF.end(), EmptyMBBAtEnd);
+        }
+
+        MBB.addSuccessor(EmptyMBBAtEnd);
+        BuildMI(MBB, &MI, MI.getDebugLoc(), TII->get(AMDGPU::S_BRANCH))
+            .addMBB(EmptyMBBAtEnd);
+        MI.eraseFromParent();
+      }
+      break;
+
     default:
       break;
     }
Index: llvm/lib/Target/AMDGPU/SIInsertSkips.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/SIInsertSkips.cpp
+++ llvm/lib/Target/AMDGPU/SIInsertSkips.cpp
@@ -366,7 +366,6 @@
   MDT = &getAnalysis<MachineDominatorTree>();
   SkipThreshold = SkipThresholdFlag;
 
-  MachineBasicBlock *EmptyMBBAtEnd = nullptr;
   SmallVector<MachineInstr *, 4> KillInstrs;
   bool MadeChange = false;
 
@@ -417,29 +416,6 @@
         break;
       }
 
-      case AMDGPU::SI_RETURN_TO_EPILOG:
-        // FIXME: Should move somewhere else
-        assert(!MF.getInfo<SIMachineFunctionInfo>()->returnsVoid());
-
-        // Graphics shaders returning non-void shouldn't contain S_ENDPGM,
-        // because external bytecode will be appended at the end.
-        if (&MBB != &MF.back() || &MI != &MBB.back()) {
-          // SI_RETURN_TO_EPILOG is not the last instruction. Add an empty block at
-          // the end and jump there.
-          if (!EmptyMBBAtEnd) {
-            EmptyMBBAtEnd = MF.CreateMachineBasicBlock();
-            MF.insert(MF.end(), EmptyMBBAtEnd);
-          }
-
-          MBB.addSuccessor(EmptyMBBAtEnd);
-          BuildMI(MBB, &MI, MI.getDebugLoc(), TII->get(AMDGPU::S_BRANCH))
-            .addMBB(EmptyMBBAtEnd);
-          MI.eraseFromParent();
-
-          MDT->getBase().insertEdge(&MBB, EmptyMBBAtEnd);
-        }
-        break;
-
       default:
         break;
       }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D77544.255303.patch
Type: text/x-patch
Size: 2891 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200406/de24fa24/attachment.bin>


More information about the llvm-commits mailing list