1; RUN: opt -S -inline %s | FileCheck %s 2 3declare void @foo() 4declare void @bar() 5 6define 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. 12expensive: 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 25done: 26 call void @bar() 27 ret void 28} 29 30; Positive test - arg is known non null 31define 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 39define 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