Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s
      2 
      3 define <2 x float> @f1(<2 x float> %a, <2 x float> %b) nounwind readnone ssp {
      4 ; CHECK: fmaxnm.2s	v0, v0, v1
      5 ; CHECK: ret
      6   %vmaxnm2.i = tail call <2 x float> @llvm.aarch64.neon.fmaxnm.v2f32(<2 x float> %a, <2 x float> %b) nounwind
      7   ret <2 x float> %vmaxnm2.i
      8 }
      9 
     10 define <4 x float> @f2(<4 x float> %a, <4 x float> %b) nounwind readnone ssp {
     11 ; CHECK: fmaxnm.4s	v0, v0, v1
     12 ; CHECK: ret
     13   %vmaxnm2.i = tail call <4 x float> @llvm.aarch64.neon.fmaxnm.v4f32(<4 x float> %a, <4 x float> %b) nounwind
     14   ret <4 x float> %vmaxnm2.i
     15 }
     16 
     17 define <2 x double> @f3(<2 x double> %a, <2 x double> %b) nounwind readnone ssp {
     18 ; CHECK: fmaxnm.2d	v0, v0, v1
     19 ; CHECK: ret
     20   %vmaxnm2.i = tail call <2 x double> @llvm.aarch64.neon.fmaxnm.v2f64(<2 x double> %a, <2 x double> %b) nounwind
     21   ret <2 x double> %vmaxnm2.i
     22 }
     23 
     24 define <2 x float> @f4(<2 x float> %a, <2 x float> %b) nounwind readnone ssp {
     25 ; CHECK: fminnm.2s	v0, v0, v1
     26 ; CHECK: ret
     27   %vminnm2.i = tail call <2 x float> @llvm.aarch64.neon.fminnm.v2f32(<2 x float> %a, <2 x float> %b) nounwind
     28   ret <2 x float> %vminnm2.i
     29 }
     30 
     31 define <4 x float> @f5(<4 x float> %a, <4 x float> %b) nounwind readnone ssp {
     32 ; CHECK: fminnm.4s	v0, v0, v1
     33 ; CHECK: ret
     34   %vminnm2.i = tail call <4 x float> @llvm.aarch64.neon.fminnm.v4f32(<4 x float> %a, <4 x float> %b) nounwind
     35   ret <4 x float> %vminnm2.i
     36 }
     37 
     38 define <2 x double> @f6(<2 x double> %a, <2 x double> %b) nounwind readnone ssp {
     39 ; CHECK: fminnm.2d	v0, v0, v1
     40 ; CHECK: ret
     41   %vminnm2.i = tail call <2 x double> @llvm.aarch64.neon.fminnm.v2f64(<2 x double> %a, <2 x double> %b) nounwind
     42   ret <2 x double> %vminnm2.i
     43 }
     44 
     45 declare <2 x double> @llvm.aarch64.neon.fminnm.v2f64(<2 x double>, <2 x double>) nounwind readnone
     46 declare <4 x float> @llvm.aarch64.neon.fminnm.v4f32(<4 x float>, <4 x float>) nounwind readnone
     47 declare <2 x float> @llvm.aarch64.neon.fminnm.v2f32(<2 x float>, <2 x float>) nounwind readnone
     48 declare <2 x double> @llvm.aarch64.neon.fmaxnm.v2f64(<2 x double>, <2 x double>) nounwind readnone
     49 declare <4 x float> @llvm.aarch64.neon.fmaxnm.v4f32(<4 x float>, <4 x float>) nounwind readnone
     50 declare <2 x float> @llvm.aarch64.neon.fmaxnm.v2f32(<2 x float>, <2 x float>) nounwind readnone
     51 
     52 
     53 define double @test_fmaxnmv(<2 x double> %in) {
     54 ; CHECK-LABEL: test_fmaxnmv:
     55 ; CHECK: fmaxnmp.2d d0, v0
     56   %max = call double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double> %in)
     57   ret double %max
     58 }
     59 
     60 define double @test_fminnmv(<2 x double> %in) {
     61 ; CHECK-LABEL: test_fminnmv:
     62 ; CHECK: fminnmp.2d d0, v0
     63   %min = call double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double> %in)
     64   ret double %min
     65 }
     66 
     67 declare double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double>)
     68 declare double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double>)
     69