1; RUN: opt < %s -passes=partial-inliner -skip-partial-inlining-cost-analysis -S | FileCheck %s 2; 3 4define i32 @callee_indr_branch(i32 %v) { 5entry: 6 %cmp = icmp sgt i32 %v, 2000 7 %addr = select i1 %cmp, ptr blockaddress(@callee_indr_branch, %if.then), ptr blockaddress(@callee_indr_branch, %if.end) 8 indirectbr ptr %addr, [ label %if.then, label %if.end] 9 10if.then: ; preds = %entry 11 %mul = mul nsw i32 %v, 10 12 br label %if.then2 13 14if.then2: 15 %sub = sub i32 %v, 10 16 br label %if.end 17 18if.end: ; preds = %if.then, %entry 19 %v2 = phi i32 [ %v, %entry ], [ %mul, %if.then2 ] 20 %add = add nsw i32 %v2, 200 21 ret i32 %add 22} 23 24declare void @use_fp(ptr) 25declare void @llvm.localescape(...) 26declare ptr @llvm.frameaddress(i32) 27declare ptr @llvm.localrecover(ptr, ptr, i32) 28 29 30 31define i32 @callee_frameescape(i32 %v) { 32entry: 33 %a = alloca i32 34 call void (...) @llvm.localescape(ptr %a) 35 %cmp = icmp sgt i32 %v, 2000 36 br i1 %cmp, label %if.then, label %if.end 37 38if.then: ; preds = %entry 39 %mul = mul nsw i32 %v, 10 40 br label %if.then2 41 42if.then2: 43 %sub = sub i32 %v, 10 44 br label %if.end 45 46if.end: ; preds = %if.then, %entry 47 %v2 = phi i32 [ %v, %entry ], [ %mul, %if.then2 ] 48 %add = add nsw i32 %v2, 200 49 ret i32 %add 50} 51 52 53; CHECK-LABEL: @caller 54; CHECK: %r1 = call i32 @callee_indr_branch(i32 %v) 55; CHECK-NEXT: %r2 = call i32 @callee_frameescape(i32 %v) 56define i32 @caller(i32 %v) { 57entry: 58 %r1 = call i32 @callee_indr_branch(i32 %v) 59 %r2 = call i32 @callee_frameescape(i32 %v) 60 %res = add i32 %r1, %r2 61 ret i32 %res 62} 63 64