[llvm] e6723d8 - llvm-reduce: Fix crashes on unreachable blocks for MIR instructions
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 7 07:00:34 PDT 2022
Author: Matt Arsenault
Date: 2022-06-07T10:00:26-04:00
New Revision: e6723d80c7518c3d7a5422952fe963d8d125f99d
URL: https://github.com/llvm/llvm-project/commit/e6723d80c7518c3d7a5422952fe963d8d125f99d
DIFF: https://github.com/llvm/llvm-project/commit/e6723d80c7518c3d7a5422952fe963d8d125f99d.diff
LOG: llvm-reduce: Fix crashes on unreachable blocks for MIR instructions
Added:
llvm/test/tools/llvm-reduce/mir/reduce-instruction-unreachable-block.mir
Modified:
llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
Removed:
################################################################################
diff --git a/llvm/test/tools/llvm-reduce/mir/reduce-instruction-unreachable-block.mir b/llvm/test/tools/llvm-reduce/mir/reduce-instruction-unreachable-block.mir
new file mode 100644
index 0000000000000..32abcf14f14d8
--- /dev/null
+++ b/llvm/test/tools/llvm-reduce/mir/reduce-instruction-unreachable-block.mir
@@ -0,0 +1,43 @@
+# REQUIRES: amdgpu-registered-target
+# RUN: llvm-reduce -simplify-mir -mtriple=amdgcn-amd-amdhsa --delta-passes=instructions --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
+
+# Make sure there's no crash with unreachable blocks.
+
+# CHECK-INTERESTINGNESS: S_NOP
+
+# RESULT: bb.0:
+
+# RESULT: %3:vgpr_32 = IMPLICIT_DEF
+# RESULT-NEXT: %4:sreg_64 = IMPLICIT_DEF
+# RESULT-NEXT: %5:vreg_64 = IMPLICIT_DEF
+# RESULT-NEXT: S_CBRANCH_SCC1 %bb.1, implicit undef $scc
+# RESULT-NEXT: S_BRANCH %bb.3
+
+# RESULT: bb.1:
+# RESULT-NEXT: S_BRANCH %bb.3
+
+# RESULT: bb.2:
+# RESULT-NEXT: S_NOP 0, implicit %3, implicit killed %5, implicit %4
+
+---
+name: unreachable_block
+tracksRegLiveness: true
+body: |
+ bb.0:
+ %0:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+ S_CBRANCH_SCC1 %bb.1, implicit undef $scc
+ S_BRANCH %bb.3
+
+ bb.1:
+ %1:sreg_64 = S_MOV_B64 0
+ S_BRANCH %bb.3
+
+ bb.2:
+ %2:vreg_64 = IMPLICIT_DEF
+ S_NOP 0, implicit %0, implicit killed %2, implicit %1
+ S_BRANCH %bb.3
+
+ bb.3:
+
+...
diff --git a/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp b/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
index f5f74f1bb4d6e..c87d5eb9a44f2 100644
--- a/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
+++ b/llvm/tools/llvm-reduce/deltas/ReduceInstructionsMIR.cpp
@@ -106,14 +106,17 @@ static void extractInstrFromFunction(Oracle &O, MachineFunction &MF) {
MachineBasicBlock::reverse_iterator RI(*MI);
MachineBasicBlock *BB = MI->getParent();
++RI;
- while (NewReg == 0 && BB) {
- NewReg = getPrevDefOfRCInMBB(*BB, RI, RegRC, RegTy, ToDelete);
- // Prepare for idom(BB).
- if (auto *IDM = MDT.getNode(BB)->getIDom()) {
- BB = IDM->getBlock();
- RI = BB->rbegin();
- } else {
- BB = nullptr;
+
+ if (MDT.isReachableFromEntry(BB)) {
+ while (NewReg == 0 && BB) {
+ NewReg = getPrevDefOfRCInMBB(*BB, RI, RegRC, RegTy, ToDelete);
+ // Prepare for idom(BB).
+ if (auto *IDM = MDT.getNode(BB)->getIDom()) {
+ BB = IDM->getBlock();
+ RI = BB->rbegin();
+ } else {
+ BB = nullptr;
+ }
}
}
}
More information about the llvm-commits
mailing list