xref: /llvm-project/llvm/test/Transforms/Inline/2007-04-15-InlineEH.ll (revision 151602c7a9935558ca671b35359989b261045db0)
1; RUN: opt < %s -passes=inline -S | FileCheck %s
2; RUN: opt < %s -passes='cgscc(inline)' -S | FileCheck %s
3; PR1335
4
5target triple = "i686-pc-linux-gnu"
6
7declare i32 @__gxx_personality_v0(...)
8
9declare void @a()
10
11declare void @b()
12
13declare void @c()
14
15define void @f() {
16; CHECK-LABEL: define void @f()
17entry:
18  call void asm "rdtsc\0A\09movl %eax, $0\0A\09movl %edx, $1", "=*imr,=*imr,~{dirflag},~{fpsr},~{flags},~{dx},~{ax}"( ptr elementtype( i32) null, ptr elementtype(i32) null ) nounwind
19; CHECK: call void asm
20  unreachable
21}
22
23define void @g() personality ptr @__gxx_personality_v0 {
24; CHECK-LABEL: define void @g() personality ptr @__gxx_personality_v0
25entry:
26  invoke void @a() to label %invcont1 unwind label %cleanup
27; CHECK-NOT: {{call|invoke}}
28; CHECK: invoke void @a()
29
30invcont1:
31  invoke void @b() to label %invcont2 unwind label %cleanup
32; CHECK-NOT: {{call|invoke}}
33; CHECK: invoke void @b()
34
35invcont2:
36  invoke void @c() to label %invcont3 unwind label %cleanup
37; CHECK-NOT: {{call|invoke}}
38; CHECK: invoke void @c()
39
40invcont3:
41  invoke void @f() to label %invcont4 unwind label %cleanup
42; CHECK-NOT: {{call|invoke}}
43; CHECK: call void asm
44; CHECK-NOT: {{call|invoke}}
45
46invcont4:
47  ret void
48
49cleanup:
50  %ex = landingpad {ptr, i32} cleanup
51  resume { ptr, i32 } %ex
52}
53
54define void @h() {
55; CHECK-LABEL: define void @h() personality ptr @__gxx_personality_v0
56entry:
57  call void @g()
58; CHECK-NOT: {{call|invoke}}
59; CHECK: invoke void @a()
60; CHECK-NOT: {{call|invoke}}
61; CHECK: invoke void @b()
62; CHECK-NOT: {{call|invoke}}
63; CHECK: invoke void @c()
64; CHECK-NOT: {{call|invoke}}
65; CHECK: call void asm
66; CHECK-NOT: {{call|invoke}}
67
68  ret void
69}
70