[llvm] [win] Merge the x64 and AArch64 wineh-reuse-catch-alloca.ll tests (PR #149178)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 16 13:20:27 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-aarch64
Author: Daniel Paoliello (dpaoliello)
<details>
<summary>Changes</summary>
Cleans up debt from #<!-- -->147849 and #<!-- -->147860
I had originally duplicated this test since the WinEH directory wasn't enabled for AArch64, but now that we can run AArch64 tests in that directory, I've unified the tests.
---
Full diff: https://github.com/llvm/llvm-project/pull/149178.diff
2 Files Affected:
- (removed) llvm/test/CodeGen/AArch64/wineh-reuse-catch-alloca.ll (-100)
- (modified) llvm/test/CodeGen/WinEH/wineh-reuse-catch-alloca.ll (+22-12)
``````````diff
diff --git a/llvm/test/CodeGen/AArch64/wineh-reuse-catch-alloca.ll b/llvm/test/CodeGen/AArch64/wineh-reuse-catch-alloca.ll
deleted file mode 100644
index 18b8aab0c70e30..00000000000000
--- a/llvm/test/CodeGen/AArch64/wineh-reuse-catch-alloca.ll
+++ /dev/null
@@ -1,100 +0,0 @@
-; RUN: llc %s --mtriple=aarch64-pc-windows-msvc -o - | FileCheck %s
-
-; Tests the fixed object layouts when two catchpads re-use the same stack
-; allocation for this catch objects.
-
-; Generated from this C++ code, with modifications to the IR (see comments in
-; IR):
-; https://godbolt.org/z/9qv5Yn68j
-; > clang --target=aarch64-pc-windows-msvc test.cpp
-; ```
-; extern "C" void boom();
-; extern "C" int calls_boom();
-; {
-; try { boom(); }
-; catch (int& i) { return i; }
-; catch (long& l) { return l; }
-; return 0;
-; }
-; ```
-
-; Only need 48 bytes on the stack, not 64.
-; CHECK-LABEL: calls_boom:
-; CHECK: sub sp, sp, #48
-; CHECK: .seh_stackalloc 48
-
-; Both the catch blocks load from the same address.
-; CHECK-LABEL: "?catch$3@?0?calls_boom at 4HA":
-; CHECK: ldr x8, [x29, #24]
-; CHECK-LABEL: "?catch$4@?0?calls_boom at 4HA":
-; CHECK: ldr x8, [x29, #24]
-
-; There's enough space for the UnwindHelp to be at -16 instead of -32
-; CHECK-LABEL: $cppxdata$calls_boom:
-; CHECK: .word -16 // UnwindHelp
-
-; Both catches have the same object offset.
-; CHECK-LABEL: $handlerMap$0$calls_boom:
-; CHECK: .word -8 // CatchObjOffset
-; CHECK-NEXT: .word "?catch$3@?0?calls_boom at 4HA"@IMGREL // Handler
-; CHECK: .word -8 // CatchObjOffset
-; CHECK-NEXT: .word "?catch$4@?0?calls_boom at 4HA"@IMGREL // Handler
-
-%rtti.TypeDescriptor2 = type { ptr, ptr, [3 x i8] }
-
-$"??_R0H at 8" = comdat any
-
-$"??_R0J at 8" = comdat any
-
-@"??_7type_info@@6B@" = external constant ptr
-@"??_R0H at 8" = linkonce_odr global %rtti.TypeDescriptor2 { ptr @"??_7type_info@@6B@", ptr null, [3 x i8] c".H\00" }, comdat
-@"??_R0J at 8" = linkonce_odr global %rtti.TypeDescriptor2 { ptr @"??_7type_info@@6B@", ptr null, [3 x i8] c".J\00" }, comdat
-
-define dso_local i32 @calls_boom() personality ptr @__CxxFrameHandler3 {
-entry:
- %retval = alloca i32, align 4
-; MODIFICATION: Remove unusued alloca
-; %l = alloca ptr, align 8
- %i = alloca ptr, align 8
- invoke void @boom()
- to label %invoke.cont unwind label %catch.dispatch
-
-catch.dispatch:
- %0 = catchswitch within none [label %catch1, label %catch] unwind to caller
-
-catch1:
- %1 = catchpad within %0 [ptr @"??_R0H at 8", i32 8, ptr %i]
- %2 = load ptr, ptr %i, align 8
- %3 = load i32, ptr %2, align 4
- store i32 %3, ptr %retval, align 4
- catchret from %1 to label %catchret.dest2
-
-catch:
-; MODIFICATION: Use %i instead of %l
- %4 = catchpad within %0 [ptr @"??_R0J at 8", i32 8, ptr %i]
- %5 = load ptr, ptr %i, align 8
- %6 = load i32, ptr %5, align 4
- store i32 %6, ptr %retval, align 4
- catchret from %4 to label %catchret.dest
-
-invoke.cont:
- br label %try.cont
-
-catchret.dest:
- br label %return
-
-catchret.dest2:
- br label %return
-
-try.cont:
- store i32 0, ptr %retval, align 4
- br label %return
-
-return:
- %7 = load i32, ptr %retval, align 4
- ret i32 %7
-}
-
-declare dso_local void @boom() #1
-
-declare dso_local i32 @__CxxFrameHandler3(...)
diff --git a/llvm/test/CodeGen/WinEH/wineh-reuse-catch-alloca.ll b/llvm/test/CodeGen/WinEH/wineh-reuse-catch-alloca.ll
index 2bd004ed7dec54..9de79ee2641cbc 100644
--- a/llvm/test/CodeGen/WinEH/wineh-reuse-catch-alloca.ll
+++ b/llvm/test/CodeGen/WinEH/wineh-reuse-catch-alloca.ll
@@ -1,4 +1,5 @@
-; RUN: llc %s --mtriple=x86_64-pc-windows-msvc -o - | FileCheck %s
+; RUN: llc %s --mtriple=x86_64-pc-windows-msvc -o - | FileCheck %s --check-prefixes=CHECK,X64
+; RUN: %if aarch64-registered-target %{ llc %s --mtriple=aarch64-pc-windows-msvc -o - | FileCheck %s --check-prefixes=CHECK,ARM64 %}
; Tests the fixed object layouts when two catchpads re-use the same stack
; allocation for this catch objects.
@@ -18,27 +19,36 @@
; }
; ```
-; Minimum stack alloc is 64 bytes, so no change there.
; CHECK-LABEL: calls_boom:
-; CHECK: subq $64, %rsp
-; CHECK: .seh_stackalloc 64
+; Minimum stack alloc is 64 bytes, so no change there.
+; X64: subq $64, %rsp
+; X64: .seh_stackalloc 64
+; Only need 48 bytes on the stack, not 64.
+; ARM64: sub sp, sp, #48
+; ARM64: .seh_stackalloc 48
; Both the catch blocks load from the same address.
; CHECK-LABEL: "?catch$3@?0?calls_boom at 4HA":
-; CHECK: movq -8(%rbp), %rax
+; X64: movq -8(%rbp), %rax
+; ARM64: ldr x8, [x29, #24]
; CHECK-LABEL: "?catch$4@?0?calls_boom at 4HA":
-; CHECK: movq -8(%rbp), %rax
+; X64: movq -8(%rbp), %rax
+; ARM64: ldr x8, [x29, #24]
-; There's enough space for the UnwindHelp to be at 48 instead of 40
; CHECK-LABEL: $cppxdata$calls_boom:
-; CHECK: .long 48 # UnwindHelp
+; There's enough space for the UnwindHelp to be at 48 instead of 40
+; X64: .long 48 # UnwindHelp
+; There's enough space for the UnwindHelp to be at -16 instead of -32
+; ARM64: .word -16 // UnwindHelp
; Both catches have the same object offset.
; CHECK-LABEL: $handlerMap$0$calls_boom:
-; CHECK: .long 56 # CatchObjOffset
-; CHECK-NEXT: .long "?catch$3@?0?calls_boom at 4HA"@IMGREL # Handler
-; CHECK: .long 56 # CatchObjOffset
-; CHECK-NEXT: .long "?catch$4@?0?calls_boom at 4HA"@IMGREL # Handler
+; X64: .long 56 # CatchObjOffset
+; ARM64: .word -8 // CatchObjOffset
+; CHECK-NEXT: "?catch$3@?0?calls_boom at 4HA"@IMGREL
+; X64: .long 56 # CatchObjOffset
+; ARM64: .word -8 // CatchObjOffset
+; CHECK-NEXT: "?catch$4@?0?calls_boom at 4HA"@IMGREL
%rtti.TypeDescriptor2 = type { ptr, ptr, [3 x i8] }
``````````
</details>
https://github.com/llvm/llvm-project/pull/149178
More information about the llvm-commits
mailing list