1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @f1(<2 x float> %a, <2 x float> %b) nounwind readnone ssp { 4*9880d681SAndroid Build Coastguard Worker; CHECK: fmaxnm.2s v0, v0, v1 5*9880d681SAndroid Build Coastguard Worker; CHECK: ret 6*9880d681SAndroid Build Coastguard Worker %vmaxnm2.i = tail call <2 x float> @llvm.aarch64.neon.fmaxnm.v2f32(<2 x float> %a, <2 x float> %b) nounwind 7*9880d681SAndroid Build Coastguard Worker ret <2 x float> %vmaxnm2.i 8*9880d681SAndroid Build Coastguard Worker} 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @f2(<4 x float> %a, <4 x float> %b) nounwind readnone ssp { 11*9880d681SAndroid Build Coastguard Worker; CHECK: fmaxnm.4s v0, v0, v1 12*9880d681SAndroid Build Coastguard Worker; CHECK: ret 13*9880d681SAndroid Build Coastguard Worker %vmaxnm2.i = tail call <4 x float> @llvm.aarch64.neon.fmaxnm.v4f32(<4 x float> %a, <4 x float> %b) nounwind 14*9880d681SAndroid Build Coastguard Worker ret <4 x float> %vmaxnm2.i 15*9880d681SAndroid Build Coastguard Worker} 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f3(<2 x double> %a, <2 x double> %b) nounwind readnone ssp { 18*9880d681SAndroid Build Coastguard Worker; CHECK: fmaxnm.2d v0, v0, v1 19*9880d681SAndroid Build Coastguard Worker; CHECK: ret 20*9880d681SAndroid Build Coastguard Worker %vmaxnm2.i = tail call <2 x double> @llvm.aarch64.neon.fmaxnm.v2f64(<2 x double> %a, <2 x double> %b) nounwind 21*9880d681SAndroid Build Coastguard Worker ret <2 x double> %vmaxnm2.i 22*9880d681SAndroid Build Coastguard Worker} 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine <2 x float> @f4(<2 x float> %a, <2 x float> %b) nounwind readnone ssp { 25*9880d681SAndroid Build Coastguard Worker; CHECK: fminnm.2s v0, v0, v1 26*9880d681SAndroid Build Coastguard Worker; CHECK: ret 27*9880d681SAndroid Build Coastguard Worker %vminnm2.i = tail call <2 x float> @llvm.aarch64.neon.fminnm.v2f32(<2 x float> %a, <2 x float> %b) nounwind 28*9880d681SAndroid Build Coastguard Worker ret <2 x float> %vminnm2.i 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdefine <4 x float> @f5(<4 x float> %a, <4 x float> %b) nounwind readnone ssp { 32*9880d681SAndroid Build Coastguard Worker; CHECK: fminnm.4s v0, v0, v1 33*9880d681SAndroid Build Coastguard Worker; CHECK: ret 34*9880d681SAndroid Build Coastguard Worker %vminnm2.i = tail call <4 x float> @llvm.aarch64.neon.fminnm.v4f32(<4 x float> %a, <4 x float> %b) nounwind 35*9880d681SAndroid Build Coastguard Worker ret <4 x float> %vminnm2.i 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f6(<2 x double> %a, <2 x double> %b) nounwind readnone ssp { 39*9880d681SAndroid Build Coastguard Worker; CHECK: fminnm.2d v0, v0, v1 40*9880d681SAndroid Build Coastguard Worker; CHECK: ret 41*9880d681SAndroid Build Coastguard Worker %vminnm2.i = tail call <2 x double> @llvm.aarch64.neon.fminnm.v2f64(<2 x double> %a, <2 x double> %b) nounwind 42*9880d681SAndroid Build Coastguard Worker ret <2 x double> %vminnm2.i 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Workerdefine float @f7(float %a, float %b) nounwind readnone ssp { 46*9880d681SAndroid Build Coastguard Worker; CHECK: fmaxnm s0, s0, s1 47*9880d681SAndroid Build Coastguard Worker; CHECK: ret 48*9880d681SAndroid Build Coastguard Worker %vmaxnm2.i = tail call float @llvm.aarch64.neon.fmaxnm.f32(float %a, float %b) nounwind 49*9880d681SAndroid Build Coastguard Worker ret float %vmaxnm2.i 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdefine double @f8(double %a, double %b) nounwind readnone ssp { 53*9880d681SAndroid Build Coastguard Worker; CHECK: fminnm d0, d0, d1 54*9880d681SAndroid Build Coastguard Worker; CHECK: ret 55*9880d681SAndroid Build Coastguard Worker %vmaxnm2.i = tail call double @llvm.aarch64.neon.fminnm.f64(double %a, double %b) nounwind 56*9880d681SAndroid Build Coastguard Worker ret double %vmaxnm2.i 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.aarch64.neon.fminnm.v2f64(<2 x double>, <2 x double>) nounwind readnone 60*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.fminnm.v4f32(<4 x float>, <4 x float>) nounwind readnone 61*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.fminnm.v2f32(<2 x float>, <2 x float>) nounwind readnone 62*9880d681SAndroid Build Coastguard Workerdeclare <2 x double> @llvm.aarch64.neon.fmaxnm.v2f64(<2 x double>, <2 x double>) nounwind readnone 63*9880d681SAndroid Build Coastguard Workerdeclare <4 x float> @llvm.aarch64.neon.fmaxnm.v4f32(<4 x float>, <4 x float>) nounwind readnone 64*9880d681SAndroid Build Coastguard Workerdeclare <2 x float> @llvm.aarch64.neon.fmaxnm.v2f32(<2 x float>, <2 x float>) nounwind readnone 65*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.aarch64.neon.fmaxnm.f32(float, float) nounwind readnone 66*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.aarch64.neon.fminnm.f64(double, double) nounwind readnone 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workerdefine double @test_fmaxnmv(<2 x double> %in) { 69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fmaxnmv: 70*9880d681SAndroid Build Coastguard Worker; CHECK: fmaxnmp.2d d0, v0 71*9880d681SAndroid Build Coastguard Worker %max = call double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double> %in) 72*9880d681SAndroid Build Coastguard Worker ret double %max 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine double @test_fminnmv(<2 x double> %in) { 76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_fminnmv: 77*9880d681SAndroid Build Coastguard Worker; CHECK: fminnmp.2d d0, v0 78*9880d681SAndroid Build Coastguard Worker %min = call double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double> %in) 79*9880d681SAndroid Build Coastguard Worker ret double %min 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double>) 83*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double>) 84