1 ; RUN: opt < %s -inline -S | FileCheck %s
3 ; Check that functions with "returns_twice" calls are only inlined,
4 ; if they are themselves marked as such.
6 declare i32 @a() returns_twice
10 %call = call i32 @a() returns_twice
11 %add = add nsw i32 1, %call
15 define i32 @outer1() {
17 ; CHECK-LABEL: define i32 @outer1(
18 ; CHECK: call i32 @inner1()
19 %call = call i32 @inner1()
20 %add = add nsw i32 1, %call
24 define i32 @inner2() returns_twice {
26 %call = call i32 @a() returns_twice
27 %add = add nsw i32 1, %call
31 define i32 @outer2() {
33 ; CHECK-LABEL: define i32 @outer2(
34 ; CHECK: call i32 @a()
35 %call = call i32 @inner2() returns_twice
36 %add = add nsw i32 1, %call
40 define i32 @inner3() {
42 %invoke = invoke i32 @a() returns_twice
43 to label %cont unwind label %lpad
46 %add = add nsw i32 1, %invoke
50 %lp = landingpad i32 personality i8* null cleanup
54 define i32 @outer3() {
56 ; CHECK-LABEL: define i32 @outer3(
57 ; CHECK: call i32 @inner3()
58 %call = call i32 @inner3()
59 %add = add nsw i32 1, %call
63 define i32 @inner4() returns_twice {
65 %invoke = invoke i32 @a() returns_twice
66 to label %cont unwind label %lpad
69 %add = add nsw i32 1, %invoke
73 %lp = landingpad i32 personality i8* null cleanup
77 define i32 @outer4() {
79 ; CHECK-LABEL: define i32 @outer4(
80 ; CHECK: invoke i32 @a()
81 %call = call i32 @inner4() returns_twice
82 %add = add nsw i32 1, %call