1*9880d681SAndroid Build Coastguard Worker; RUN: llc -asm-verbose=false < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine float @test_f32(float* %A, float* %B, float* %C) nounwind { 4*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_f32: 5*9880d681SAndroid Build Coastguard Worker;CHECK: fmadd 6*9880d681SAndroid Build Coastguard Worker;CHECK-NOT: fmadd 7*9880d681SAndroid Build Coastguard Worker %tmp1 = load float, float* %A 8*9880d681SAndroid Build Coastguard Worker %tmp2 = load float, float* %B 9*9880d681SAndroid Build Coastguard Worker %tmp3 = load float, float* %C 10*9880d681SAndroid Build Coastguard Worker %tmp4 = call float @llvm.fmuladd.f32(float %tmp1, float %tmp2, float %tmp3) 11*9880d681SAndroid Build Coastguard Worker ret float %tmp4 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @test_v2f32(<2 x float>* %A, <2 x float>* %B, <2 x float>* %C) nounwind { 15*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_v2f32: 16*9880d681SAndroid Build Coastguard Worker;CHECK: fmla.2s 17*9880d681SAndroid Build Coastguard Worker;CHECK-NOT: fmla.2s 18*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x float>, <2 x float>* %A 19*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x float>, <2 x float>* %B 20*9880d681SAndroid Build Coastguard Worker %tmp3 = load <2 x float>, <2 x float>* %C 21*9880d681SAndroid Build Coastguard Worker %tmp4 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %tmp1, <2 x float> %tmp2, <2 x float> %tmp3) 22*9880d681SAndroid Build Coastguard Worker ret <2 x float> %tmp4 23*9880d681SAndroid Build Coastguard Worker} 24*9880d681SAndroid Build Coastguard Worker 25*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @test_v4f32(<4 x float>* %A, <4 x float>* %B, <4 x float>* %C) nounwind { 26*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_v4f32: 27*9880d681SAndroid Build Coastguard Worker;CHECK: fmla.4s 28*9880d681SAndroid Build Coastguard Worker;CHECK-NOT: fmla.4s 29*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x float>, <4 x float>* %A 30*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x float>, <4 x float>* %B 31*9880d681SAndroid Build Coastguard Worker %tmp3 = load <4 x float>, <4 x float>* %C 32*9880d681SAndroid Build Coastguard Worker %tmp4 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %tmp1, <4 x float> %tmp2, <4 x float> %tmp3) 33*9880d681SAndroid Build Coastguard Worker ret <4 x float> %tmp4 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine <8 x float> @test_v8f32(<8 x float>* %A, <8 x float>* %B, <8 x float>* %C) nounwind { 37*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_v8f32: 38*9880d681SAndroid Build Coastguard Worker;CHECK: fmla.4s 39*9880d681SAndroid Build Coastguard Worker;CHECK: fmla.4s 40*9880d681SAndroid Build Coastguard Worker;CHECK-NOT: fmla.4s 41*9880d681SAndroid Build Coastguard Worker %tmp1 = load <8 x float>, <8 x float>* %A 42*9880d681SAndroid Build Coastguard Worker %tmp2 = load <8 x float>, <8 x float>* %B 43*9880d681SAndroid Build Coastguard Worker %tmp3 = load <8 x float>, <8 x float>* %C 44*9880d681SAndroid Build Coastguard Worker %tmp4 = call <8 x float> @llvm.fmuladd.v8f32(<8 x float> %tmp1, <8 x float> %tmp2, <8 x float> %tmp3) 45*9880d681SAndroid Build Coastguard Worker ret <8 x float> %tmp4 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Workerdefine double @test_f64(double* %A, double* %B, double* %C) nounwind { 49*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_f64: 50*9880d681SAndroid Build Coastguard Worker;CHECK: fmadd 51*9880d681SAndroid Build Coastguard Worker;CHECK-NOT: fmadd 52*9880d681SAndroid Build Coastguard Worker %tmp1 = load double, double* %A 53*9880d681SAndroid Build Coastguard Worker %tmp2 = load double, double* %B 54*9880d681SAndroid Build Coastguard Worker %tmp3 = load double, double* %C 55*9880d681SAndroid Build Coastguard Worker %tmp4 = call double @llvm.fmuladd.f64(double %tmp1, double %tmp2, double %tmp3) 56*9880d681SAndroid Build Coastguard Worker ret double %tmp4 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @test_v2f64(<2 x double>* %A, <2 x double>* %B, <2 x double>* %C) nounwind { 60*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_v2f64: 61*9880d681SAndroid Build Coastguard Worker;CHECK: fmla.2d 62*9880d681SAndroid Build Coastguard Worker;CHECK-NOT: fmla.2d 63*9880d681SAndroid Build Coastguard Worker %tmp1 = load <2 x double>, <2 x double>* %A 64*9880d681SAndroid Build Coastguard Worker %tmp2 = load <2 x double>, <2 x double>* %B 65*9880d681SAndroid Build Coastguard Worker %tmp3 = load <2 x double>, <2 x double>* %C 66*9880d681SAndroid Build Coastguard Worker %tmp4 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %tmp1, <2 x double> %tmp2, <2 x double> %tmp3) 67*9880d681SAndroid Build Coastguard Worker ret <2 x double> %tmp4 68*9880d681SAndroid Build Coastguard Worker} 69*9880d681SAndroid Build Coastguard Worker 70*9880d681SAndroid Build Coastguard Workerdefine <4 x double> @test_v4f64(<4 x double>* %A, <4 x double>* %B, <4 x double>* %C) nounwind { 71*9880d681SAndroid Build Coastguard Worker;CHECK-LABEL: test_v4f64: 72*9880d681SAndroid Build Coastguard Worker;CHECK: fmla.2d 73*9880d681SAndroid Build Coastguard Worker;CHECK: fmla.2d 74*9880d681SAndroid Build Coastguard Worker;CHECK-NOT: fmla.2d 75*9880d681SAndroid Build Coastguard Worker %tmp1 = load <4 x double>, <4 x double>* %A 76*9880d681SAndroid Build Coastguard Worker %tmp2 = load <4 x double>, <4 x double>* %B 77*9880d681SAndroid Build Coastguard Worker %tmp3 = load <4 x double>, <4 x double>* %C 78*9880d681SAndroid Build Coastguard Worker %tmp4 = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %tmp1, <4 x double> %tmp2, <4 x double> %tmp3) 79*9880d681SAndroid Build Coastguard Worker ret <4 x double> %tmp4 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.fmuladd.f32(float, float, float) nounwind readnone 83*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.fmuladd.v2f32(<2 x float>, <2 x float>, <2 x float>) nounwind readnone 84*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.fmuladd.v4f32(<4 x float>, <4 x float>, <4 x float>) nounwind readnone 85*9880d681SAndroid Build Coastguard Workerdeclare <8 x float> @llvm.fmuladd.v8f32(<8 x float>, <8 x float>, <8 x float>) nounwind readnone 86*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.fmuladd.f64(double, double, double) nounwind readnone 87*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.fmuladd.v2f64(<2 x double>, <2 x double>, <2 x double>) nounwind readnone 88*9880d681SAndroid Build Coastguard Workerdeclare <4 x double> @llvm.fmuladd.v4f64(<4 x double>, <4 x double>, <4 x double>) nounwind readnone 89