brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 7be40d5 Raw
78 lines · plain
1; RUN: llc -mtriple x86_64-pc-windows-msvc -o - %s | FileCheck %s2 3; struct S { int x; };4; void foo() {5;   struct S __declspec(align(32)) o;6;   __try { o.x; }7;   __finally { o.x; }8; }9; void bar() {10;   struct S o;11;   __try { o.x; }12;   __finally { o.x; }13; }14 15%struct.S = type { i32 }16 17define dso_local void @"?foo@@YAXXZ"() #0 {18entry:19; CHECK-LABEL: foo20; CHECK: movq  %rsp, %rdx21; CHECK-NOT: movq  %rbp, %rdx22 23  %o = alloca %struct.S, align 3224  call void (...) @llvm.localescape(ptr %o)25  %0 = call ptr @llvm.localaddress()26  call void @"?fin$0@0@foo@@"(i8 0, ptr %0)27  ret void28}29 30; void bar(void)31; {32;   int x;33;   void (*fn)(int);34;35;   __try {36;     x = 1;37;     fn(x);38;   } __finally {39;     x = 2;40;   }41; }42 43define dso_local void @"?bar@@YAXXZ"() personality ptr @__C_specific_handler {44entry:45; CHECK-LABEL: bar46; CHECK: movq  %rbp, %rdx47; CHECK-NOT: movq  %rsp, %rdx48  %x = alloca i32, align 449  %fn = alloca ptr, align 850  call void (...) @llvm.localescape(ptr %x)51  store i32 1, ptr %x, align 452  %0 = load ptr, ptr %fn, align 853  %1 = load i32, ptr %x, align 454  invoke void %0(i32 %1)55  to label %invoke.cont unwind label %ehcleanup56  invoke.cont:                                      ; preds = %entry57  %2 = call ptr @llvm.localaddress()58  call void @"?fin$0@0@bar@@"(i8 0, ptr %2)59  ret void60  ehcleanup:                                        ; preds = %entry61  %3 = cleanuppad within none []62  %4 = call ptr @llvm.localaddress()63  call void @"?fin$0@0@bar@@"(i8 1, ptr %4) [ "funclet"(token %3) ]64  cleanupret from %3 unwind to caller65}66 67declare void @"?fin$0@0@foo@@"(i8 %abnormal_termination, ptr %frame_pointer)68 69declare void @"?fin$0@0@bar@@"(i8 %abnormal_termination, ptr %frame_pointer)70 71declare ptr @llvm.localrecover(ptr, ptr, i32)72 73declare ptr @llvm.localaddress()74 75declare void @llvm.localescape(...)76 77declare dso_local i32 @__C_specific_handler(...)78