1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -S -inline -inline-threshold=20 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; Check that we don't drop FastMathFlag when estimating inlining profitability. 3*9880d681SAndroid Build Coastguard Worker; 4*9880d681SAndroid Build Coastguard Worker; In this test we should inline 'foo' to 'boo', because it'll fold to a 5*9880d681SAndroid Build Coastguard Worker; constant. 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdefine float @foo(float* %a, float %b) { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %a0 = load float, float* %a, align 4 12*9880d681SAndroid Build Coastguard Worker %mul = fmul fast float %a0, %b 13*9880d681SAndroid Build Coastguard Worker %tobool = fcmp une float %mul, 0.000000e+00 14*9880d681SAndroid Build Coastguard Worker br i1 %tobool, label %if.then, label %if.end 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerif.then: ; preds = %entry 17*9880d681SAndroid Build Coastguard Worker %a1 = load float, float* %a, align 8 18*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds float, float* %a, i64 1 19*9880d681SAndroid Build Coastguard Worker %a2 = load float, float* %arrayidx1, align 4 20*9880d681SAndroid Build Coastguard Worker %add = fadd fast float %a1, %a2 21*9880d681SAndroid Build Coastguard Worker br label %if.end 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %if.then, %entry 24*9880d681SAndroid Build Coastguard Worker %storemerge = phi float [ %add, %if.then ], [ 1.000000e+00, %entry ] 25*9880d681SAndroid Build Coastguard Worker ret float %storemerge 26*9880d681SAndroid Build Coastguard Worker} 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @boo 29*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: call float @foo 30*9880d681SAndroid Build Coastguard Workerdefine float @boo(float* %a) { 31*9880d681SAndroid Build Coastguard Workerentry: 32*9880d681SAndroid Build Coastguard Worker %call = call float @foo(float* %a, float 0.000000e+00) 33*9880d681SAndroid Build Coastguard Worker ret float %call 34*9880d681SAndroid Build Coastguard Worker} 35