llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-aarch64 Author: None (llvmbot) <details> <summary>Changes</summary> Backport f5de33dbf59a30246a6113e507e0cb41c21b9e45 Requested by: @<!-- -->davemgreen --- Full diff: https://github.com/llvm/llvm-project/pull/178433.diff 2 Files Affected: - (modified) llvm/lib/CodeGen/ShrinkWrap.cpp (+5-1) - (added) llvm/test/CodeGen/AArch64/shrink-wrap-unreachable.ll (+36) ``````````diff diff --git a/llvm/lib/CodeGen/ShrinkWrap.cpp b/llvm/lib/CodeGen/ShrinkWrap.cpp index d83bbc2c31b6d..37592489a10ba 100644 --- a/llvm/lib/CodeGen/ShrinkWrap.cpp +++ b/llvm/lib/CodeGen/ShrinkWrap.cpp @@ -784,7 +784,11 @@ void ShrinkWrapImpl::updateSaveRestorePoints(MachineBasicBlock &MBB, if (MLI->getLoopDepth(Save) > MLI->getLoopDepth(Restore)) { // Push Save outside of this loop if immediate dominator is different // from save block. If immediate dominator is not different, bail out. - Save = FindIDom<>(*Save, Save->predecessors(), *MDT); + SmallVector<MachineBasicBlock *> Preds; + for (auto *PBB : Save->predecessors()) + if (MDT->isReachableFromEntry(PBB)) + Preds.push_back(PBB); + Save = FindIDom<>(*Save, Preds, *MDT); if (!Save) break; } else { diff --git a/llvm/test/CodeGen/AArch64/shrink-wrap-unreachable.ll b/llvm/test/CodeGen/AArch64/shrink-wrap-unreachable.ll new file mode 100644 index 0000000000000..414045591b691 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/shrink-wrap-unreachable.ll @@ -0,0 +1,36 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 +; RUN: llc -mtriple=aarch64-linux-gnu -o - %s | FileCheck %s + +; Ensure we do not crash on unreachable blocks. + +define void @func_44(i1 %tobool3.not, ptr %g_530) { +; CHECK-LABEL: func_44: +; CHECK: // %bb.0: // %entry +; CHECK-NEXT: mov x8, xzr +; CHECK-NEXT: .LBB0_1: // %for.cond2 +; CHECK-NEXT: // =>This Inner Loop Header: Depth=1 +; CHECK-NEXT: ldr wzr, [x8] +; CHECK-NEXT: b .LBB0_1 +entry: + br label %for.cond2.outer + +for.cond2.outer: ; preds = %for.inc, %entry + %add23.ph = phi i8 [ 0, %for.inc ], [ 0, %entry ] + br label %for.cond2 + +for.cond2: ; preds = %cleanup12.split, %for.cond2, %for.cond2.outer + %load = load volatile i32, ptr null, align 4 + br i1 %tobool3.not, label %if.end, label %for.cond2 + +if.end: ; preds = %for.cond2 + %tobool7.not = icmp eq i64 0, 0 + br i1 %tobool7.not, label %for.inc, label %cleanup12.split + +for.inc: ; preds = %if.end + %add = or i8 %add23.ph, 0 + br label %for.cond2.outer + +cleanup12.split: ; preds = %if.end + store i64 0, ptr %g_530, align 8 + br label %for.cond2 +} `````````` </details> https://github.com/llvm/llvm-project/pull/178433 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
