1 ; RUN: llc -mtriple=arm64-linux-gnu -o - %s | FileCheck %s
2 ; RUN: llc -global-isel=1 -mtriple=arm64-linux-gnu -o - %s | FileCheck %s
4 define float @test_fminv_v2f32(<2 x float> %in) {
5 ; CHECK: test_fminv_v2f32:
6 ; CHECK: fminp s0, v0.2s
7 %min = call float @llvm.aarch64.neon.fminv.f32.v2f32(<2 x float> %in)
11 define float @test_fminv_v4f32(<4 x float> %in) {
12 ; CHECK: test_fminv_v4f32:
13 ; CHECK: fminv s0, v0.4s
14 %min = call float @llvm.aarch64.neon.fminv.f32.v4f32(<4 x float> %in)
18 define double @test_fminv_v2f64(<2 x double> %in) {
19 ; CHECK: test_fminv_v2f64:
20 ; CHECK: fminp d0, v0.2d
21 %min = call double @llvm.aarch64.neon.fminv.f64.v2f64(<2 x double> %in)
25 declare float @llvm.aarch64.neon.fminv.f32.v2f32(<2 x float>)
26 declare float @llvm.aarch64.neon.fminv.f32.v4f32(<4 x float>)
27 declare double @llvm.aarch64.neon.fminv.f64.v2f64(<2 x double>)
29 define float @test_fmaxv_v2f32(<2 x float> %in) {
30 ; CHECK: test_fmaxv_v2f32:
31 ; CHECK: fmaxp s0, v0.2s
32 %max = call float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float> %in)
36 define float @test_fmaxv_v4f32(<4 x float> %in) {
37 ; CHECK: test_fmaxv_v4f32:
38 ; CHECK: fmaxv s0, v0.4s
39 %max = call float @llvm.aarch64.neon.fmaxv.f32.v4f32(<4 x float> %in)
43 define double @test_fmaxv_v2f64(<2 x double> %in) {
44 ; CHECK: test_fmaxv_v2f64:
45 ; CHECK: fmaxp d0, v0.2d
46 %max = call double @llvm.aarch64.neon.fmaxv.f64.v2f64(<2 x double> %in)
50 declare float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float>)
51 declare float @llvm.aarch64.neon.fmaxv.f32.v4f32(<4 x float>)
52 declare double @llvm.aarch64.neon.fmaxv.f64.v2f64(<2 x double>)
54 define float @test_fminnmv_v2f32(<2 x float> %in) {
55 ; CHECK: test_fminnmv_v2f32:
56 ; CHECK: fminnmp s0, v0.2s
57 %minnm = call float @llvm.aarch64.neon.fminnmv.f32.v2f32(<2 x float> %in)
61 define float @test_fminnmv_v4f32(<4 x float> %in) {
62 ; CHECK: test_fminnmv_v4f32:
63 ; CHECK: fminnmv s0, v0.4s
64 %minnm = call float @llvm.aarch64.neon.fminnmv.f32.v4f32(<4 x float> %in)
68 define double @test_fminnmv_v2f64(<2 x double> %in) {
69 ; CHECK: test_fminnmv_v2f64:
70 ; CHECK: fminnmp d0, v0.2d
71 %minnm = call double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double> %in)
75 declare float @llvm.aarch64.neon.fminnmv.f32.v2f32(<2 x float>)
76 declare float @llvm.aarch64.neon.fminnmv.f32.v4f32(<4 x float>)
77 declare double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double>)
79 define float @test_fmaxnmv_v2f32(<2 x float> %in) {
80 ; CHECK: test_fmaxnmv_v2f32:
81 ; CHECK: fmaxnmp s0, v0.2s
82 %maxnm = call float @llvm.aarch64.neon.fmaxnmv.f32.v2f32(<2 x float> %in)
86 define float @test_fmaxnmv_v4f32(<4 x float> %in) {
87 ; CHECK: test_fmaxnmv_v4f32:
88 ; CHECK: fmaxnmv s0, v0.4s
89 %maxnm = call float @llvm.aarch64.neon.fmaxnmv.f32.v4f32(<4 x float> %in)
93 define double @test_fmaxnmv_v2f64(<2 x double> %in) {
94 ; CHECK: test_fmaxnmv_v2f64:
95 ; CHECK: fmaxnmp d0, v0.2d
96 %maxnm = call double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double> %in)
100 declare float @llvm.aarch64.neon.fmaxnmv.f32.v2f32(<2 x float>)
101 declare float @llvm.aarch64.neon.fmaxnmv.f32.v4f32(<4 x float>)
102 declare double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double>)