[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