1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2; RUN: llc < %s -mtriple=arm64-linux-gnu | FileCheck %s 3; RUN: llc < %s -mtriple=arm64-linux-gnu -global-isel | FileCheck %s 4 5define float @test_fminv_v2f32(<2 x float> %in) { 6; CHECK-LABEL: test_fminv_v2f32: 7; CHECK: // %bb.0: 8; CHECK-NEXT: fminp s0, v0.2s 9; CHECK-NEXT: ret 10 %min = call float @llvm.aarch64.neon.fminv.f32.v2f32(<2 x float> %in) 11 ret float %min 12} 13 14define float @test_fminv_v4f32(<4 x float> %in) { 15; CHECK-LABEL: test_fminv_v4f32: 16; CHECK: // %bb.0: 17; CHECK-NEXT: fminv s0, v0.4s 18; CHECK-NEXT: ret 19 %min = call float @llvm.aarch64.neon.fminv.f32.v4f32(<4 x float> %in) 20 ret float %min 21} 22 23define double @test_fminv_v2f64(<2 x double> %in) { 24; CHECK-LABEL: test_fminv_v2f64: 25; CHECK: // %bb.0: 26; CHECK-NEXT: fminp d0, v0.2d 27; CHECK-NEXT: ret 28 %min = call double @llvm.aarch64.neon.fminv.f64.v2f64(<2 x double> %in) 29 ret double %min 30} 31 32declare float @llvm.aarch64.neon.fminv.f32.v2f32(<2 x float>) 33declare float @llvm.aarch64.neon.fminv.f32.v4f32(<4 x float>) 34declare double @llvm.aarch64.neon.fminv.f64.v2f64(<2 x double>) 35 36define float @test_fmaxv_v2f32(<2 x float> %in) { 37; CHECK-LABEL: test_fmaxv_v2f32: 38; CHECK: // %bb.0: 39; CHECK-NEXT: fmaxp s0, v0.2s 40; CHECK-NEXT: ret 41 %max = call float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float> %in) 42 ret float %max 43} 44 45define float @test_fmaxv_v4f32(<4 x float> %in) { 46; CHECK-LABEL: test_fmaxv_v4f32: 47; CHECK: // %bb.0: 48; CHECK-NEXT: fmaxv s0, v0.4s 49; CHECK-NEXT: ret 50 %max = call float @llvm.aarch64.neon.fmaxv.f32.v4f32(<4 x float> %in) 51 ret float %max 52} 53 54define double @test_fmaxv_v2f64(<2 x double> %in) { 55; CHECK-LABEL: test_fmaxv_v2f64: 56; CHECK: // %bb.0: 57; CHECK-NEXT: fmaxp d0, v0.2d 58; CHECK-NEXT: ret 59 %max = call double @llvm.aarch64.neon.fmaxv.f64.v2f64(<2 x double> %in) 60 ret double %max 61} 62 63declare float @llvm.aarch64.neon.fmaxv.f32.v2f32(<2 x float>) 64declare float @llvm.aarch64.neon.fmaxv.f32.v4f32(<4 x float>) 65declare double @llvm.aarch64.neon.fmaxv.f64.v2f64(<2 x double>) 66 67define float @test_fminnmv_v2f32(<2 x float> %in) { 68; CHECK-LABEL: test_fminnmv_v2f32: 69; CHECK: // %bb.0: 70; CHECK-NEXT: fminnmp s0, v0.2s 71; CHECK-NEXT: ret 72 %minnm = call float @llvm.aarch64.neon.fminnmv.f32.v2f32(<2 x float> %in) 73 ret float %minnm 74} 75 76define float @test_fminnmv_v4f32(<4 x float> %in) { 77; CHECK-LABEL: test_fminnmv_v4f32: 78; CHECK: // %bb.0: 79; CHECK-NEXT: fminnmv s0, v0.4s 80; CHECK-NEXT: ret 81 %minnm = call float @llvm.aarch64.neon.fminnmv.f32.v4f32(<4 x float> %in) 82 ret float %minnm 83} 84 85define double @test_fminnmv_v2f64(<2 x double> %in) { 86; CHECK-LABEL: test_fminnmv_v2f64: 87; CHECK: // %bb.0: 88; CHECK-NEXT: fminnmp d0, v0.2d 89; CHECK-NEXT: ret 90 %minnm = call double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double> %in) 91 ret double %minnm 92} 93 94declare float @llvm.aarch64.neon.fminnmv.f32.v2f32(<2 x float>) 95declare float @llvm.aarch64.neon.fminnmv.f32.v4f32(<4 x float>) 96declare double @llvm.aarch64.neon.fminnmv.f64.v2f64(<2 x double>) 97 98define float @test_fmaxnmv_v2f32(<2 x float> %in) { 99; CHECK-LABEL: test_fmaxnmv_v2f32: 100; CHECK: // %bb.0: 101; CHECK-NEXT: fmaxnmp s0, v0.2s 102; CHECK-NEXT: ret 103 %maxnm = call float @llvm.aarch64.neon.fmaxnmv.f32.v2f32(<2 x float> %in) 104 ret float %maxnm 105} 106 107define float @test_fmaxnmv_v4f32(<4 x float> %in) { 108; CHECK-LABEL: test_fmaxnmv_v4f32: 109; CHECK: // %bb.0: 110; CHECK-NEXT: fmaxnmv s0, v0.4s 111; CHECK-NEXT: ret 112 %maxnm = call float @llvm.aarch64.neon.fmaxnmv.f32.v4f32(<4 x float> %in) 113 ret float %maxnm 114} 115 116define double @test_fmaxnmv_v2f64(<2 x double> %in) { 117; CHECK-LABEL: test_fmaxnmv_v2f64: 118; CHECK: // %bb.0: 119; CHECK-NEXT: fmaxnmp d0, v0.2d 120; CHECK-NEXT: ret 121 %maxnm = call double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double> %in) 122 ret double %maxnm 123} 124 125declare float @llvm.aarch64.neon.fmaxnmv.f32.v2f32(<2 x float>) 126declare float @llvm.aarch64.neon.fmaxnmv.f32.v4f32(<4 x float>) 127declare double @llvm.aarch64.neon.fmaxnmv.f64.v2f64(<2 x double>) 128