1; RUN: opt < %s -inline -pass-remarks=inline -pass-remarks-missed=inline \ 2; RUN: -pass-remarks-analysis=inline -S 2>&1 | \ 3; RUN: FileCheck -check-prefix=CHECK -check-prefix=NO_HOTNESS %s 4; RUN: opt < %s -inline -pass-remarks=inline -pass-remarks-missed=inline \ 5; RUN: -pass-remarks-analysis=inline -pass-remarks-with-hotness -S 2>&1 | \ 6; RUN: FileCheck -check-prefix=CHECK -check-prefix=HOTNESS %s 7 8; HOTNESS: fox will not be inlined into bar because its definition is unavailable 9; NO_HOTNESS-NOT: fox will not be inlined into bar because its definition is unavailable 10; CHECK: foo should always be inlined (cost=always) 11; CHECK: foo inlined into bar 12; CHECK: foz should never be inlined (cost=never) 13; CHECK: foz will not be inlined into bar 14 15; Function Attrs: alwaysinline nounwind uwtable 16define i32 @foo(i32 %x, i32 %y) #0 { 17entry: 18 %x.addr = alloca i32, align 4 19 %y.addr = alloca i32, align 4 20 store i32 %x, i32* %x.addr, align 4 21 store i32 %y, i32* %y.addr, align 4 22 %0 = load i32, i32* %x.addr, align 4 23 %1 = load i32, i32* %y.addr, align 4 24 %add = add nsw i32 %0, %1 25 ret i32 %add 26} 27 28; Function Attrs: noinline nounwind uwtable 29define float @foz(i32 %x, i32 %y) #1 { 30entry: 31 %x.addr = alloca i32, align 4 32 %y.addr = alloca i32, align 4 33 store i32 %x, i32* %x.addr, align 4 34 store i32 %y, i32* %y.addr, align 4 35 %0 = load i32, i32* %x.addr, align 4 36 %1 = load i32, i32* %y.addr, align 4 37 %mul = mul nsw i32 %0, %1 38 %conv = sitofp i32 %mul to float 39 ret float %conv 40} 41 42declare i32 @fox() 43 44; Function Attrs: nounwind uwtable 45define i32 @bar(i32 %j) #2 { 46entry: 47 %j.addr = alloca i32, align 4 48 store i32 %j, i32* %j.addr, align 4 49 %0 = load i32, i32* %j.addr, align 4 50 %1 = load i32, i32* %j.addr, align 4 51 %sub = sub nsw i32 %1, 2 52 %call = call i32 @foo(i32 %0, i32 %sub) 53 %conv = sitofp i32 %call to float 54 %2 = load i32, i32* %j.addr, align 4 55 %sub1 = sub nsw i32 %2, 2 56 %3 = load i32, i32* %j.addr, align 4 57 %call2 = call float @foz(i32 %sub1, i32 %3) 58 %mul = fmul float %conv, %call2 59 %conv3 = fptosi float %mul to i32 60 %call3 = call i32 @fox() 61 %add = add i32 %conv3, %call 62 ret i32 %add 63} 64 65attributes #0 = { alwaysinline nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } 66attributes #1 = { noinline nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } 67attributes #2 = { nounwind uwtable "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" } 68 69!llvm.ident = !{!0} 70 71!0 = !{!"clang version 3.5.0 "} 72