1; RUN: opt < %s -inline -S | FileCheck %s
2
3; Check that functions with "returns_twice" calls are only inlined,
4; if they are themselve marked as such.
5
6declare i32 @a() returns_twice
7declare i32 @b() returns_twice
8
9define i32 @f() {
10entry:
11  %call = call i32 @a() returns_twice
12  %add = add nsw i32 1, %call
13  ret i32 %add
14}
15
16define i32 @g() {
17entry:
18; CHECK-LABEL: define i32 @g(
19; CHECK: call i32 @f()
20; CHECK-NOT: call i32 @a()
21  %call = call i32 @f()
22  %add = add nsw i32 1, %call
23  ret i32 %add
24}
25
26define i32 @h() returns_twice {
27entry:
28  %call = call i32 @b() returns_twice
29  %add = add nsw i32 1, %call
30  ret i32 %add
31}
32
33define i32 @i() {
34entry:
35; CHECK-LABEL: define i32 @i(
36; CHECK: call i32 @b()
37; CHECK-NOT: call i32 @h()
38  %call = call i32 @h() returns_twice
39  %add = add nsw i32 1, %call
40  ret i32 %add
41}
42