xref: /llvm-project/llvm/test/tools/llvm-reduce/reduce-function-personality.ll (revision 47e44c0c2ebdbdef9046edbe8422a3dd1bea63da)
1; RUN: llvm-reduce --abort-on-invalid-reduction --delta-passes=function-data --test FileCheck --test-arg --check-prefixes=CHECK,INTERESTING --test-arg %s --test-arg --input-file %s -o %t
2; RUN: FileCheck -check-prefixes=CHECK,RESULT %s < %t
3
4; INTERESTING: define void @drop_personality(
5; RESULT: define void @drop_personality() {
6define void @drop_personality() personality ptr @__gxx_personality_v0 {
7  ret void
8}
9
10; CHECK: define void @keep_personality() personality ptr @__gxx_personality_v0 {
11define void @keep_personality() personality ptr @__gxx_personality_v0 {
12  ret void
13}
14
15; Make sure an invalid reduction isn't produced if we need a
16; personality function for different instructions
17
18; CHECK: define void @landingpad_requires_personality()
19; RESULT-SAME: personality ptr @__gxx_personality_v0 {
20define void @landingpad_requires_personality() personality ptr @__gxx_personality_v0 {
21bb0:
22  br label %bb2
23
24bb1:
25  landingpad { ptr, i32 }
26  catch ptr null
27  ret void
28
29bb2:
30  ret void
31}
32
33; CHECK-LABEL: define void @uses_catchpad()
34; RESULT-SAME: personality ptr @__CxxFrameHandler3 {
35define void @uses_catchpad() personality ptr @__CxxFrameHandler3 {
36entry:
37  br label %unreachable
38
39catch.dispatch:
40  %cs = catchswitch within none [label %catch] unwind to caller
41
42catch:
43  %cp = catchpad within %cs [ptr null, i32 64, ptr null]
44  br label %unreachable
45
46unreachable:
47  unreachable
48}
49
50; CHECK-LABEL: define void @uses_resume()
51; RESULT-SAME: personality ptr @__gxx_personality_v0
52define void @uses_resume() personality ptr @__gxx_personality_v0 {
53entry:
54  resume { ptr, i32 } zeroinitializer
55}
56
57declare i32 @__gxx_personality_v0(...)
58declare i32 @__CxxFrameHandler3(...)
59