• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: opt -S -inline %s | FileCheck %s
2; RUN: opt -S -passes='cgscc(inline)' %s | FileCheck %s
3
4declare void @foo()
5declare void @bar()
6
7define void @callee(i8* %arg) {
8  %cmp = icmp eq i8* %arg, null
9  br i1 %cmp, label %expensive, label %done
10
11; This block is designed to be too expensive to inline.  We can only inline
12; callee if this block is known to be dead.
13expensive:
14  call void @foo()
15  call void @foo()
16  call void @foo()
17  call void @foo()
18  call void @foo()
19  call void @foo()
20  call void @foo()
21  call void @foo()
22  call void @foo()
23  call void @foo()
24  ret void
25
26done:
27  call void @bar()
28  ret void
29}
30
31; Positive test - arg is known non null
32define void @caller(i8* nonnull %arg) {
33; CHECK-LABEL: @caller
34; CHECK: call void @bar()
35  call void @callee(i8* nonnull %arg)
36  ret void
37}
38
39; Negative test - arg is not known to be non null
40define void @caller2(i8* %arg) {
41; CHECK-LABEL: @caller2
42; CHECK: call void @callee(
43  call void @callee(i8* %arg)
44  ret void
45}
46
47