Skip to content

Commit 8b4e29b

Browse files
committed
[X86] Add test for #66984 (NFC)
1 parent 3542168 commit 8b4e29b

File tree

1 file changed

+109
-0
lines changed

1 file changed

+109
-0
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3
2+
; RUN: llc -mtriple=i686-windows-msvc < %s | FileCheck %s
3+
4+
@type_info = external global ptr
5+
6+
; FIXME: This is a miscompile.
7+
define void @pr66984(ptr %arg) personality ptr @__CxxFrameHandler3 {
8+
; CHECK-LABEL: pr66984:
9+
; CHECK: # %bb.0: # %bb
10+
; CHECK-NEXT: pushl %ebp
11+
; CHECK-NEXT: movl %esp, %ebp
12+
; CHECK-NEXT: pushl %ebx
13+
; CHECK-NEXT: pushl %edi
14+
; CHECK-NEXT: pushl %esi
15+
; CHECK-NEXT: subl $20, %esp
16+
; CHECK-NEXT: movl %esp, -28(%ebp)
17+
; CHECK-NEXT: movl $-1, -16(%ebp)
18+
; CHECK-NEXT: leal -24(%ebp), %eax
19+
; CHECK-NEXT: movl $___ehhandler$pr66984, -20(%ebp)
20+
; CHECK-NEXT: movl %fs:0, %ecx
21+
; CHECK-NEXT: movl %ecx, -24(%ebp)
22+
; CHECK-NEXT: movl %eax, %fs:0
23+
; CHECK-NEXT: movl $1, -16(%ebp)
24+
; CHECK-NEXT: calll _throw
25+
; CHECK-NEXT: # %bb.1: # %bb14
26+
; CHECK-NEXT: LBB0_3: # Block address taken
27+
; CHECK-NEXT: # %bb17
28+
; CHECK-NEXT: addl $12, %ebp
29+
; CHECK-NEXT: jmp LBB0_4
30+
; CHECK-NEXT: LBB0_4: # %exit
31+
; CHECK-NEXT: $ehgcr_0_4:
32+
; CHECK-NEXT: movl -24(%ebp), %eax
33+
; CHECK-NEXT: movl %eax, %fs:0
34+
; CHECK-NEXT: addl $20, %esp
35+
; CHECK-NEXT: popl %esi
36+
; CHECK-NEXT: popl %edi
37+
; CHECK-NEXT: popl %ebx
38+
; CHECK-NEXT: popl %ebp
39+
; CHECK-NEXT: retl
40+
; CHECK-NEXT: .def "?catch$2@?0?pr66984@4HA";
41+
; CHECK-NEXT: .scl 3;
42+
; CHECK-NEXT: .type 32;
43+
; CHECK-NEXT: .endef
44+
; CHECK-NEXT: .p2align 4, 0x90
45+
; CHECK-NEXT: "?catch$2@?0?pr66984@4HA":
46+
; CHECK-NEXT: LBB0_2: # %bb17
47+
; CHECK-NEXT: pushl %ebp
48+
; CHECK-NEXT: addl $12, %ebp
49+
; CHECK-NEXT: movl %esp, -28(%ebp)
50+
; CHECK-NEXT: movl -32(%ebp), %ecx
51+
; CHECK-NEXT: movl $2, -16(%ebp)
52+
; CHECK-NEXT: calll _cleanup
53+
; CHECK-NEXT: movl $LBB0_3, %eax
54+
; CHECK-NEXT: popl %ebp
55+
; CHECK-NEXT: retl # CATCHRET
56+
; CHECK-NEXT: .def "?dtor$5@?0?pr66984@4HA";
57+
; CHECK-NEXT: .scl 3;
58+
; CHECK-NEXT: .type 32;
59+
; CHECK-NEXT: .endef
60+
; CHECK-NEXT: .p2align 4, 0x90
61+
; CHECK-NEXT: "?dtor$5@?0?pr66984@4HA":
62+
; CHECK-NEXT: LBB0_5: # %bb8
63+
; CHECK-NEXT: pushl %ebp
64+
; CHECK-NEXT: addl $12, %ebp
65+
; CHECK-NEXT: movl 8(%ebp), %eax
66+
; CHECK-NEXT: movl %eax, -32(%ebp)
67+
; CHECK-NEXT: leal -32(%ebp), %ecx
68+
; CHECK-NEXT: calll _foo
69+
; CHECK-NEXT: popl %ebp
70+
; CHECK-NEXT: retl # CLEANUPRET
71+
; CHECK-NEXT: Lfunc_end0:
72+
bb:
73+
%a1 = alloca ptr, align 4
74+
%a2 = alloca ptr, align 4
75+
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %a2)
76+
invoke void @throw()
77+
to label %bb14 unwind label %bb8
78+
79+
bb8: ; preds = %bb7
80+
%i9 = cleanuppad within none []
81+
call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %a1)
82+
store ptr %arg, ptr %a1, align 4
83+
call fastcc void @foo(ptr %a1) [ "funclet"(token %i9) ]
84+
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %a1)
85+
cleanupret from %i9 unwind label %bb15
86+
87+
bb14: ; preds = %bb7
88+
unreachable
89+
90+
bb15: ; preds = %bb13, %bb5
91+
%cs = catchswitch within none [label %bb17] unwind to caller
92+
93+
bb17: ; preds = %bb15
94+
%cp = catchpad within %cs [ptr @type_info, i32 8, ptr %a2]
95+
%p = load ptr, ptr %a2, align 4
96+
call fastcc void @cleanup(ptr %p) [ "funclet"(token %cp) ]
97+
catchret from %cp to label %exit
98+
99+
exit:
100+
call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %a2)
101+
ret void
102+
}
103+
104+
declare i32 @__CxxFrameHandler3(...)
105+
declare void @throw()
106+
declare void @cleanup(ptr)
107+
declare void @foo(ptr)
108+
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
109+
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)

0 commit comments

Comments
 (0)