1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=arm-eabi -mcpu=cortex-a9 -mattr=+vfp4 -enable-unsafe-fp-math %s -o - \ 2*9880d681SAndroid Build Coastguard Worker; RUN: | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; CHECK: test1 5*9880d681SAndroid Build Coastguard Workerdefine float @test1(float %x) { 6*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfma 7*9880d681SAndroid Build Coastguard Worker; CHECK: vmul.f32 8*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfma 9*9880d681SAndroid Build Coastguard Worker %t1 = fmul float %x, 3.0 10*9880d681SAndroid Build Coastguard Worker %t2 = call float @llvm.fma.f32(float %x, float 2.0, float %t1) 11*9880d681SAndroid Build Coastguard Worker ret float %t2 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; CHECK: test2 15*9880d681SAndroid Build Coastguard Workerdefine float @test2(float %x, float %y) { 16*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmul 17*9880d681SAndroid Build Coastguard Worker; CHECK: vfma.f32 18*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vmul 19*9880d681SAndroid Build Coastguard Worker %t1 = fmul float %x, 3.0 20*9880d681SAndroid Build Coastguard Worker %t2 = call float @llvm.fma.f32(float %t1, float 2.0, float %y) 21*9880d681SAndroid Build Coastguard Worker ret float %t2 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Worker; CHECK: test3 25*9880d681SAndroid Build Coastguard Workerdefine float @test3(float %x, float %y) { 26*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfma 27*9880d681SAndroid Build Coastguard Worker; CHECK: vadd.f32 28*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfma 29*9880d681SAndroid Build Coastguard Worker %t2 = call float @llvm.fma.f32(float %x, float 1.0, float %y) 30*9880d681SAndroid Build Coastguard Worker ret float %t2 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker; CHECK: test4 34*9880d681SAndroid Build Coastguard Workerdefine float @test4(float %x, float %y) { 35*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfma 36*9880d681SAndroid Build Coastguard Worker; CHECK: vsub.f32 37*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfma 38*9880d681SAndroid Build Coastguard Worker %t2 = call float @llvm.fma.f32(float %x, float -1.0, float %y) 39*9880d681SAndroid Build Coastguard Worker ret float %t2 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker; CHECK: test5 43*9880d681SAndroid Build Coastguard Workerdefine float @test5(float %x) { 44*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfma 45*9880d681SAndroid Build Coastguard Worker; CHECK: vmul.f32 46*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfma 47*9880d681SAndroid Build Coastguard Worker %t2 = call float @llvm.fma.f32(float %x, float 2.0, float %x) 48*9880d681SAndroid Build Coastguard Worker ret float %t2 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker; CHECK: test6 52*9880d681SAndroid Build Coastguard Workerdefine float @test6(float %x) { 53*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfma 54*9880d681SAndroid Build Coastguard Worker; CHECK: vmul.f32 55*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: vfma 56*9880d681SAndroid Build Coastguard Worker %t1 = fsub float -0.0, %x 57*9880d681SAndroid Build Coastguard Worker %t2 = call float @llvm.fma.f32(float %x, float 5.0, float %t1) 58*9880d681SAndroid Build Coastguard Worker ret float %t2 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.fma.f32(float, float, float) 62