[PATCH] D124383: llvm-reduce: Do not try to delete frame instructions

Matt Arsenault via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 25 06:38:00 PDT 2022


arsenm created this revision.
arsenm added reviewers: markus, qcolombet, MatzeB, aeubanks, reames.
Herald added a project: All.
arsenm requested review of this revision.
Herald added a subscriber: wdng.
Herald added a project: LLVM.

The verifier enforces these appearing as balanced pairs, so just
deleting one has no real chance of producing something valid.


https://reviews.llvm.org/D124383

Files:
  llvm/test/tools/llvm-reduce/mir/remove-frame-destroy.mir
  llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp


Index: llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
===================================================================
--- llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
+++ llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
@@ -46,6 +46,21 @@
   return 0;
 }
 
+static bool shouldNotRemoveInstruction(const TargetInstrInfo &TII,
+                                       const MachineInstr &MI) {
+  if (MI.isTerminator())
+    return true;
+
+  // The MIR is almost certainly going to be invalid if frame instructions are
+  // deleted individually since they need to come in balanced pairs, so don't
+  // try to delete them.
+  if (MI.getOpcode() == TII.getCallFrameSetupOpcode() ||
+      MI.getOpcode() == TII.getCallFrameDestroyOpcode())
+    return true;
+
+  return false;
+}
+
 static void extractInstrFromFunction(Oracle &O, MachineFunction &MF) {
   MachineDominatorTree MDT;
   MDT.runOnMachineFunction(MF);
@@ -62,7 +77,7 @@
   // Mark MIs for deletion according to some criteria.
   for (auto &MBB : MF) {
     for (auto &MI : MBB) {
-      if (MI.isTerminator())
+      if (shouldNotRemoveInstruction(*TII, MI))
         continue;
       if (!O.shouldKeep())
         ToDelete.insert(&MI);
Index: llvm/test/tools/llvm-reduce/mir/remove-frame-destroy.mir
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-reduce/mir/remove-frame-destroy.mir
@@ -0,0 +1,24 @@
+# REQUIRES: amdgpu-registered-target
+# RUN: llvm-reduce --delta-passes=instructions -mtriple=amdgcn-amd-amdhsa --test FileCheck --test-arg --check-prefix=CHECK-INTERESTINGNESS --test-arg %s --test-arg --input-file %s -o %t 2> %t.log
+# RUN: FileCheck --check-prefix=RESULT %s < %t
+
+# CHECK-INTERESTINGNESS: S_NOP 0
+
+# RESULT: ADJCALLSTACKUP
+# RESULT-NEXT: ADJCALLSTACKDOWN
+# RESULT-NEXT: S_ENDPGM 0
+
+---
+name: frame_setup_destroy
+tracksRegLiveness: true
+machineFunctionInfo:
+  stackPtrOffsetReg: '$sgpr32'
+body:             |
+  bb.0:
+    S_NOP 0
+    ADJCALLSTACKUP 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
+    S_NOP 0
+    ADJCALLSTACKDOWN 0, 0, implicit-def dead $scc, implicit-def $sgpr32, implicit $sgpr32
+    S_ENDPGM 0
+
+...


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D124383.424890.patch
Type: text/x-patch
Size: 2233 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220425/4e1d0ae0/attachment.bin>


More information about the llvm-commits mailing list