llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-backend-aarch64 Author: None (llvmbot) <details> <summary>Changes</summary> Backport 528bb2bedaa9e51c8078d41b977d266fa7d65ec7 Requested by: @<!-- -->nikic --- Full diff: https://github.com/llvm/llvm-project/pull/176888.diff 2 Files Affected: - (modified) llvm/lib/CodeGen/BranchFolding.cpp (+2-1) - (added) llvm/test/CodeGen/AArch64/wineh-dangling-eh-pad-reference.ll (+34) ``````````diff diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp index 0b212fb0beb20..2bfb34739af7c 100644 --- a/llvm/lib/CodeGen/BranchFolding.cpp +++ b/llvm/lib/CodeGen/BranchFolding.cpp @@ -1250,7 +1250,8 @@ bool BranchFolder::OptimizeBranches(MachineFunction &MF) { MadeChange |= OptimizeBlock(&MBB); // If it is dead, remove it. - if (MBB.pred_empty() && !MBB.isMachineBlockAddressTaken()) { + if (MBB.pred_empty() && !MBB.isMachineBlockAddressTaken() && + !MBB.isEHPad()) { RemoveDeadBlock(&MBB); MadeChange = true; ++NumDeadBlocks; diff --git a/llvm/test/CodeGen/AArch64/wineh-dangling-eh-pad-reference.ll b/llvm/test/CodeGen/AArch64/wineh-dangling-eh-pad-reference.ll new file mode 100644 index 0000000000000..e20d4ce3633d7 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/wineh-dangling-eh-pad-reference.ll @@ -0,0 +1,34 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 +; RUN: llc -mtriple=aarch64-pc-windows-msvc < %s | FileCheck %s + +declare void @func() + +; Make sure that we do not end up with a dangling EH pad reference. + +define void @test(ptr %p) personality ptr @__CxxFrameHandler3 { +; CHECK-LABEL: test: +; CHECK: .seh_proc "?dtor$1@?0?test@4HA" +; CHECK-LABEL: $stateUnwindMap$test: +; CHECK: .word -1 // ToState +; CHECK: .word "?dtor$1@?0?test@4HA"@IMGREL // Action + + %v0 = load i32, ptr %p + %v1 = load i32, ptr %p + %xor = xor i32 %v0, %v1 + %cmp = icmp eq i32 %xor, 0 + br i1 %cmp, label %exit, label %bb + +bb: + invoke void @func() + to label %exit unwind label %unwind + +unwind: + %cp = cleanuppad within none [] + store volatile i32 0, ptr %p + cleanupret from %cp unwind to caller + +exit: + ret void +} + +declare i32 @__CxxFrameHandler3(...) `````````` </details> https://github.com/llvm/llvm-project/pull/176888 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
