1 ; RUN: opt -S -inline %s | FileCheck %s 2 3 declare void @foo() 4 declare void @bar() 5 6 define void @callee(i8* %arg) { 7 %cmp = icmp eq i8* %arg, null 8 br i1 %cmp, label %expensive, label %done 9 10 ; This block is designed to be too expensive to inline. We can only inline 11 ; callee if this block is known to be dead. 12 expensive: 13 call void @foo() 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 ret void 24 25 done: 26 call void @bar() 27 ret void 28 } 29 30 ; Positive test - arg is known non null 31 define void @caller(i8* nonnull %arg) { 32 ; CHECK-LABEL: @caller 33 ; CHECK: call void @bar() 34 call void @callee(i8* nonnull %arg) 35 ret void 36 } 37 38 ; Negative test - arg is not known to be non null 39 define void @caller2(i8* %arg) { 40 ; CHECK-LABEL: @caller2 41 ; CHECK: call void @callee( 42 call void @callee(i8* %arg) 43 ret void 44 } 45 46