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

Reply via email to