1 ; RUN: llc < %s -mtriple=aarch64-eabi -mattr=+v8.5a | FileCheck %s
3 declare <2 x float> @llvm.aarch64.neon.frint32x.v2f32(<2 x float>)
4 declare <4 x float> @llvm.aarch64.neon.frint32x.v4f32(<4 x float>)
5 declare <2 x float> @llvm.aarch64.neon.frint32z.v2f32(<2 x float>)
6 declare <4 x float> @llvm.aarch64.neon.frint32z.v4f32(<4 x float>)
8 define dso_local <2 x float> @t_vrnd32x_f32(<2 x float> %a) {
9 ; CHECK-LABEL: t_vrnd32x_f32:
10 ; CHECK: frint32x v0.2s, v0.2s
13 %val = tail call <2 x float> @llvm.aarch64.neon.frint32x.v2f32(<2 x float> %a)
17 define dso_local <4 x float> @t_vrnd32xq_f32(<4 x float> %a) {
18 ; CHECK-LABEL: t_vrnd32xq_f32:
19 ; CHECK: frint32x v0.4s, v0.4s
22 %val = tail call <4 x float> @llvm.aarch64.neon.frint32x.v4f32(<4 x float> %a)
26 define dso_local <2 x float> @t_vrnd32z_f32(<2 x float> %a) {
27 ; CHECK-LABEL: t_vrnd32z_f32:
28 ; CHECK: frint32z v0.2s, v0.2s
31 %val = tail call <2 x float> @llvm.aarch64.neon.frint32z.v2f32(<2 x float> %a)
35 define dso_local <4 x float> @t_vrnd32zq_f32(<4 x float> %a) {
36 ; CHECK-LABEL: t_vrnd32zq_f32:
37 ; CHECK: frint32z v0.4s, v0.4s
40 %val = tail call <4 x float> @llvm.aarch64.neon.frint32z.v4f32(<4 x float> %a)
44 declare <2 x float> @llvm.aarch64.neon.frint64x.v2f32(<2 x float>)
45 declare <4 x float> @llvm.aarch64.neon.frint64x.v4f32(<4 x float>)
46 declare <2 x float> @llvm.aarch64.neon.frint64z.v2f32(<2 x float>)
47 declare <4 x float> @llvm.aarch64.neon.frint64z.v4f32(<4 x float>)
49 define dso_local <2 x float> @t_vrnd64x_f32(<2 x float> %a) {
50 ; CHECK-LABEL: t_vrnd64x_f32:
51 ; CHECK: frint64x v0.2s, v0.2s
54 %val = tail call <2 x float> @llvm.aarch64.neon.frint64x.v2f32(<2 x float> %a)
58 define dso_local <4 x float> @t_vrnd64xq_f32(<4 x float> %a) {
59 ; CHECK-LABEL: t_vrnd64xq_f32:
60 ; CHECK: frint64x v0.4s, v0.4s
63 %val = tail call <4 x float> @llvm.aarch64.neon.frint64x.v4f32(<4 x float> %a)
67 define dso_local <2 x float> @t_vrnd64z_f32(<2 x float> %a) {
68 ; CHECK-LABEL: t_vrnd64z_f32:
69 ; CHECK: frint64z v0.2s, v0.2s
72 %val = tail call <2 x float> @llvm.aarch64.neon.frint64z.v2f32(<2 x float> %a)
76 define dso_local <4 x float> @t_vrnd64zq_f32(<4 x float> %a) {
77 ; CHECK-LABEL: t_vrnd64zq_f32:
78 ; CHECK: frint64z v0.4s, v0.4s
81 %val = tail call <4 x float> @llvm.aarch64.neon.frint64z.v4f32(<4 x float> %a)
85 declare <1 x double> @llvm.aarch64.neon.frint32x.v1f64(<1 x double>)
86 declare <2 x double> @llvm.aarch64.neon.frint32x.v2f64(<2 x double>)
87 declare <1 x double> @llvm.aarch64.neon.frint32z.v1f64(<1 x double>)
88 declare <2 x double> @llvm.aarch64.neon.frint32z.v2f64(<2 x double>)
90 define dso_local <1 x double> @t_vrnd32x_f64(<1 x double> %a) {
91 ; CHECK-LABEL: t_vrnd32x_f64:
92 ; CHECK: frint32x d0, d0
95 %val = tail call <1 x double> @llvm.aarch64.neon.frint32x.v1f64(<1 x double> %a)
99 define dso_local <2 x double> @t_vrnd32xq_f64(<2 x double> %a) {
100 ; CHECK-LABEL: t_vrnd32xq_f64:
101 ; CHECK: frint32x v0.2d, v0.2d
104 %val = tail call <2 x double> @llvm.aarch64.neon.frint32x.v2f64(<2 x double> %a)
105 ret <2 x double> %val
108 define dso_local <1 x double> @t_vrnd32z_f64(<1 x double> %a) {
109 ; CHECK-LABEL: t_vrnd32z_f64:
110 ; CHECK: frint32z d0, d0
113 %val = tail call <1 x double> @llvm.aarch64.neon.frint32z.v1f64(<1 x double> %a)
114 ret <1 x double> %val
117 define dso_local <2 x double> @t_vrnd32zq_f64(<2 x double> %a) {
118 ; CHECK-LABEL: t_vrnd32zq_f64:
119 ; CHECK: frint32z v0.2d, v0.2d
122 %val = tail call <2 x double> @llvm.aarch64.neon.frint32z.v2f64(<2 x double> %a)
123 ret <2 x double> %val
126 declare <1 x double> @llvm.aarch64.neon.frint64x.v1f64(<1 x double>)
127 declare <2 x double> @llvm.aarch64.neon.frint64x.v2f64(<2 x double>)
128 declare <1 x double> @llvm.aarch64.neon.frint64z.v1f64(<1 x double>)
129 declare <2 x double> @llvm.aarch64.neon.frint64z.v2f64(<2 x double>)
131 define dso_local <1 x double> @t_vrnd64x_f64(<1 x double> %a) {
132 ; CHECK-LABEL: t_vrnd64x_f64:
133 ; CHECK: frint64x d0, d0
136 %val = tail call <1 x double> @llvm.aarch64.neon.frint64x.v1f64(<1 x double> %a)
137 ret <1 x double> %val
140 define dso_local <2 x double> @t_vrnd64xq_f64(<2 x double> %a) {
141 ; CHECK-LABEL: t_vrnd64xq_f64:
142 ; CHECK: frint64x v0.2d, v0.2d
145 %val = tail call <2 x double> @llvm.aarch64.neon.frint64x.v2f64(<2 x double> %a)
146 ret <2 x double> %val
149 define dso_local <1 x double> @t_vrnd64z_f64(<1 x double> %a) {
150 ; CHECK-LABEL: t_vrnd64z_f64:
151 ; CHECK: frint64z d0, d0
154 %val = tail call <1 x double> @llvm.aarch64.neon.frint64z.v1f64(<1 x double> %a)
155 ret <1 x double> %val
158 define dso_local <2 x double> @t_vrnd64zq_f64(<2 x double> %a) {
159 ; CHECK-LABEL: t_vrnd64zq_f64:
160 ; CHECK: frint64z v0.2d, v0.2d
163 %val = tail call <2 x double> @llvm.aarch64.neon.frint64z.v2f64(<2 x double> %a)
164 ret <2 x double> %val