[Clang][MIPS] Send correct architecture for MinGW toolchains (#121042)
[llvm-project.git] / llvm / test / CodeGen / RISCV / replace-with-veclib-sleef-scalable.ll
blob134c2b8932003f83aed02bee0e1caad6538a0496
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 4
2 ; RUN: opt -mtriple=riscv64-unknown-linux-gnu -mattr=+v -vector-library=sleefgnuabi -replace-with-veclib -S < %s | FileCheck %s
4 ;.
5 ; CHECK: @llvm.compiler.used = appending global [21 x ptr] [ptr @Sleef_cosdx_u10rvvm2, ptr @Sleef_cosfx_u10rvvm2, ptr @Sleef_expfx_u10rvvm2, ptr @Sleef_exp10dx_u10rvvm2, ptr @Sleef_exp10fx_u10rvvm2, ptr @Sleef_exp2dx_u10rvvm2, ptr @Sleef_exp2fx_u10rvvm2, ptr @Sleef_fmadx_rvvm2, ptr @Sleef_fmafx_rvvm2, ptr @Sleef_logdx_u10rvvm2, ptr @Sleef_logfx_u10rvvm2, ptr @Sleef_log10dx_u10rvvm2, ptr @Sleef_log10fx_u10rvvm2, ptr @Sleef_log2dx_u10rvvm2, ptr @Sleef_log2fx_u10rvvm2, ptr @Sleef_powdx_u10rvvm2, ptr @Sleef_powfx_u10rvvm2, ptr @Sleef_sindx_u10rvvm2, ptr @Sleef_sinfx_u10rvvm2, ptr @Sleef_sqrtdx_u05rvvm2, ptr @Sleef_sqrtfx_u05rvvm2], section "llvm.metadata"
6 ;.
7 define <vscale x 2 x double> @llvm_ceil_vscale_f64(<vscale x 2 x double> %in) {
8 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_ceil_vscale_f64(
9 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0:[0-9]+]] {
10 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.ceil.nxv2f64(<vscale x 2 x double> [[IN]])
11 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
13   %1 = call fast <vscale x 2 x double> @llvm.ceil.nxv2f64(<vscale x 2 x double> %in)
14   ret <vscale x 2 x double> %1
17 define <vscale x 4 x float> @llvm_ceil_vscale_f32(<vscale x 4 x float> %in) {
18 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_ceil_vscale_f32(
19 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
20 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.ceil.nxv4f32(<vscale x 4 x float> [[IN]])
21 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
23   %1 = call fast <vscale x 4 x float> @llvm.ceil.nxv4f32(<vscale x 4 x float> %in)
24   ret <vscale x 4 x float> %1
27 define <vscale x 2 x double> @llvm_copysign_vscale_f64(<vscale x 2 x double> %mag, <vscale x 2 x double> %sgn) {
28 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_copysign_vscale_f64(
29 ; CHECK-SAME: <vscale x 2 x double> [[MAG:%.*]], <vscale x 2 x double> [[SGN:%.*]]) #[[ATTR0]] {
30 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.copysign.nxv2f64(<vscale x 2 x double> [[MAG]], <vscale x 2 x double> [[SGN]])
31 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
33   %1 = call fast <vscale x 2 x double> @llvm.copysign.nxv2f64(<vscale x 2 x double> %mag, <vscale x 2 x double> %sgn)
34   ret <vscale x 2 x double> %1
37 define <vscale x 4 x float> @llvm_copysign_vscale_f32(<vscale x 4 x float> %mag, <vscale x 4 x float> %sgn) {
38 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_copysign_vscale_f32(
39 ; CHECK-SAME: <vscale x 4 x float> [[MAG:%.*]], <vscale x 4 x float> [[SGN:%.*]]) #[[ATTR0]] {
40 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.copysign.nxv4f32(<vscale x 4 x float> [[MAG]], <vscale x 4 x float> [[SGN]])
41 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
43   %1 = call fast <vscale x 4 x float> @llvm.copysign.nxv4f32(<vscale x 4 x float> %mag, <vscale x 4 x float> %sgn)
44   ret <vscale x 4 x float> %1
47 define <vscale x 2 x double> @llvm_cos_vscale_f64(<vscale x 2 x double> %in) {
48 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_cos_vscale_f64(
49 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
50 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @Sleef_cosdx_u10rvvm2(<vscale x 2 x double> [[IN]])
51 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
53   %1 = call fast <vscale x 2 x double> @llvm.cos.nxv2f64(<vscale x 2 x double> %in)
54   ret <vscale x 2 x double> %1
57 define <vscale x 4 x float> @llvm_cos_vscale_f32(<vscale x 4 x float> %in) {
58 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_cos_vscale_f32(
59 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
60 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_cosfx_u10rvvm2(<vscale x 4 x float> [[IN]])
61 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
63   %1 = call fast <vscale x 4 x float> @llvm.cos.nxv4f32(<vscale x 4 x float> %in)
64   ret <vscale x 4 x float> %1
67 define <vscale x 2 x double> @llvm_exp_vscale_f64(<vscale x 2 x double> %in) {
68 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_exp_vscale_f64(
69 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
70 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.exp.nxv2f64(<vscale x 2 x double> [[IN]])
71 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
73   %1 = call fast <vscale x 2 x double> @llvm.exp.nxv2f64(<vscale x 2 x double> %in)
74   ret <vscale x 2 x double> %1
77 define <vscale x 4 x float> @llvm_exp_vscale_f32(<vscale x 4 x float> %in) {
78 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_exp_vscale_f32(
79 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
80 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_expfx_u10rvvm2(<vscale x 4 x float> [[IN]])
81 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
83   %1 = call fast <vscale x 4 x float> @llvm.exp.nxv4f32(<vscale x 4 x float> %in)
84   ret <vscale x 4 x float> %1
87 define <vscale x 2 x double> @llvm_exp10_vscale_f64(<vscale x 2 x double> %in) {
88 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_exp10_vscale_f64(
89 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
90 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @Sleef_exp10dx_u10rvvm2(<vscale x 2 x double> [[IN]])
91 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
93   %1 = call fast <vscale x 2 x double> @llvm.exp10.nxv2f64(<vscale x 2 x double> %in)
94   ret <vscale x 2 x double> %1
97 define <vscale x 4 x float> @llvm_exp10_vscale_f32(<vscale x 4 x float> %in) {
98 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_exp10_vscale_f32(
99 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
100 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_exp10fx_u10rvvm2(<vscale x 4 x float> [[IN]])
101 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
103   %1 = call fast <vscale x 4 x float> @llvm.exp10.nxv4f32(<vscale x 4 x float> %in)
104   ret <vscale x 4 x float> %1
107 define <vscale x 2 x double> @llvm_exp2_vscale_f64(<vscale x 2 x double> %in) {
108 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_exp2_vscale_f64(
109 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
110 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @Sleef_exp2dx_u10rvvm2(<vscale x 2 x double> [[IN]])
111 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
113   %1 = call fast <vscale x 2 x double> @llvm.exp2.nxv2f64(<vscale x 2 x double> %in)
114   ret <vscale x 2 x double> %1
117 define <vscale x 4 x float> @llvm_exp2_vscale_f32(<vscale x 4 x float> %in) {
118 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_exp2_vscale_f32(
119 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
120 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_exp2fx_u10rvvm2(<vscale x 4 x float> [[IN]])
121 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
123   %1 = call fast <vscale x 4 x float> @llvm.exp2.nxv4f32(<vscale x 4 x float> %in)
124   ret <vscale x 4 x float> %1
127 define <vscale x 2 x double> @llvm_fabs_vscale_f64(<vscale x 2 x double> %in) {
128 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_fabs_vscale_f64(
129 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
130 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.fabs.nxv2f64(<vscale x 2 x double> [[IN]])
131 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
133   %1 = call fast <vscale x 2 x double> @llvm.fabs.nxv2f64(<vscale x 2 x double> %in)
134   ret <vscale x 2 x double> %1
137 define <vscale x 4 x float> @llvm_fabs_vscale_f32(<vscale x 4 x float> %in) {
138 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_fabs_vscale_f32(
139 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
140 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.fabs.nxv4f32(<vscale x 4 x float> [[IN]])
141 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
143   %1 = call fast <vscale x 4 x float> @llvm.fabs.nxv4f32(<vscale x 4 x float> %in)
144   ret <vscale x 4 x float> %1
147 define <vscale x 2 x double> @llvm_floor_vscale_f64(<vscale x 2 x double> %in) {
148 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_floor_vscale_f64(
149 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
150 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.floor.nxv2f64(<vscale x 2 x double> [[IN]])
151 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
153   %1 = call fast <vscale x 2 x double> @llvm.floor.nxv2f64(<vscale x 2 x double> %in)
154   ret <vscale x 2 x double> %1
157 define <vscale x 4 x float> @llvm_floor_vscale_f32(<vscale x 4 x float> %in) {
158 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_floor_vscale_f32(
159 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
160 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.floor.nxv4f32(<vscale x 4 x float> [[IN]])
161 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
163   %1 = call fast <vscale x 4 x float> @llvm.floor.nxv4f32(<vscale x 4 x float> %in)
164   ret <vscale x 4 x float> %1
167 define <vscale x 2 x double> @llvm_fma_vscale_f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c ) {
168 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_fma_vscale_f64(
169 ; CHECK-SAME: <vscale x 2 x double> [[A:%.*]], <vscale x 2 x double> [[B:%.*]], <vscale x 2 x double> [[C:%.*]]) #[[ATTR0]] {
170 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @Sleef_fmadx_rvvm2(<vscale x 2 x double> [[A]], <vscale x 2 x double> [[B]], <vscale x 2 x double> [[C]])
171 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
173   %1 = call fast <vscale x 2 x double> @llvm.fma.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b, <vscale x 2 x double> %c)
174   ret <vscale x 2 x double> %1
177 define <vscale x 4 x float> @llvm_fma_vscale_f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c) {
178 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_fma_vscale_f32(
179 ; CHECK-SAME: <vscale x 4 x float> [[A:%.*]], <vscale x 4 x float> [[B:%.*]], <vscale x 4 x float> [[C:%.*]]) #[[ATTR0]] {
180 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_fmafx_rvvm2(<vscale x 4 x float> [[A]], <vscale x 4 x float> [[B]], <vscale x 4 x float> [[C]])
181 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
183   %1 = call fast <vscale x 4 x float> @llvm.fma.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b, <vscale x 4 x float> %c)
184   ret <vscale x 4 x float> %1
187 define <vscale x 2 x double> @llvm_log_vscale_f64(<vscale x 2 x double> %in) {
188 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_log_vscale_f64(
189 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
190 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @Sleef_logdx_u10rvvm2(<vscale x 2 x double> [[IN]])
191 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
193   %1 = call fast <vscale x 2 x double> @llvm.log.nxv2f64(<vscale x 2 x double> %in)
194   ret <vscale x 2 x double> %1
197 define <vscale x 4 x float> @llvm_log_vscale_f32(<vscale x 4 x float> %in) {
198 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_log_vscale_f32(
199 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
200 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_logfx_u10rvvm2(<vscale x 4 x float> [[IN]])
201 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
203   %1 = call fast <vscale x 4 x float> @llvm.log.nxv4f32(<vscale x 4 x float> %in)
204   ret <vscale x 4 x float> %1
207 define <vscale x 2 x double> @llvm_log10_vscale_f64(<vscale x 2 x double> %in) {
208 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_log10_vscale_f64(
209 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
210 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @Sleef_log10dx_u10rvvm2(<vscale x 2 x double> [[IN]])
211 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
213   %1 = call fast <vscale x 2 x double> @llvm.log10.nxv2f64(<vscale x 2 x double> %in)
214   ret <vscale x 2 x double> %1
217 define <vscale x 4 x float> @llvm_log10_vscale_f32(<vscale x 4 x float> %in) {
218 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_log10_vscale_f32(
219 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
220 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_log10fx_u10rvvm2(<vscale x 4 x float> [[IN]])
221 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
223   %1 = call fast <vscale x 4 x float> @llvm.log10.nxv4f32(<vscale x 4 x float> %in)
224   ret <vscale x 4 x float> %1
227 define <vscale x 2 x double> @llvm_log2_vscale_f64(<vscale x 2 x double> %in) {
228 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_log2_vscale_f64(
229 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
230 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @Sleef_log2dx_u10rvvm2(<vscale x 2 x double> [[IN]])
231 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
233   %1 = call fast <vscale x 2 x double> @llvm.log2.nxv2f64(<vscale x 2 x double> %in)
234   ret <vscale x 2 x double> %1
237 define <vscale x 4 x float> @llvm_log2_vscale_f32(<vscale x 4 x float> %in) {
238 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_log2_vscale_f32(
239 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
240 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_log2fx_u10rvvm2(<vscale x 4 x float> [[IN]])
241 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
243   %1 = call fast <vscale x 4 x float> @llvm.log2.nxv4f32(<vscale x 4 x float> %in)
244   ret <vscale x 4 x float> %1
247 define <vscale x 2 x double> @llvm_maxnum_vscale_f64(<vscale x 2 x double> %in0, <vscale x 2 x double> %in1) {
248 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_maxnum_vscale_f64(
249 ; CHECK-SAME: <vscale x 2 x double> [[IN0:%.*]], <vscale x 2 x double> [[IN1:%.*]]) #[[ATTR0]] {
250 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double> [[IN0]], <vscale x 2 x double> [[IN1]])
251 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
253   %1 = call fast <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double> %in0, <vscale x 2 x double> %in1)
254   ret <vscale x 2 x double> %1
257 define <vscale x 4 x float> @llvm_maxnum_vscale_f32(<vscale x 4 x float> %in0, <vscale x 4 x float> %in1) {
258 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_maxnum_vscale_f32(
259 ; CHECK-SAME: <vscale x 4 x float> [[IN0:%.*]], <vscale x 4 x float> [[IN1:%.*]]) #[[ATTR0]] {
260 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float> [[IN0]], <vscale x 4 x float> [[IN1]])
261 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
263   %1 = call fast <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float> %in0, <vscale x 4 x float> %in1)
264   ret <vscale x 4 x float> %1
267 define <vscale x 2 x double> @llvm_minnum_vscale_f64(<vscale x 2 x double> %in0, <vscale x 2 x double> %in1) {
268 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_minnum_vscale_f64(
269 ; CHECK-SAME: <vscale x 2 x double> [[IN0:%.*]], <vscale x 2 x double> [[IN1:%.*]]) #[[ATTR0]] {
270 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double> [[IN0]], <vscale x 2 x double> [[IN1]])
271 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
273   %1 = call fast <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double> %in0, <vscale x 2 x double> %in1)
274   ret <vscale x 2 x double> %1
277 define <vscale x 4 x float> @llvm_minnum_vscale_f32(<vscale x 4 x float> %in0, <vscale x 4 x float> %in1) {
278 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_minnum_vscale_f32(
279 ; CHECK-SAME: <vscale x 4 x float> [[IN0:%.*]], <vscale x 4 x float> [[IN1:%.*]]) #[[ATTR0]] {
280 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float> [[IN0]], <vscale x 4 x float> [[IN1]])
281 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
283   %1 = call fast <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float> %in0, <vscale x 4 x float> %in1)
284   ret <vscale x 4 x float> %1
287 define <vscale x 2 x double> @llvm_nearbyint_vscale_f64(<vscale x 2 x double> %in) {
288 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_nearbyint_vscale_f64(
289 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
290 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.nearbyint.nxv2f64(<vscale x 2 x double> [[IN]])
291 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
293   %1 = call fast <vscale x 2 x double> @llvm.nearbyint.nxv2f64(<vscale x 2 x double> %in)
294   ret <vscale x 2 x double> %1
297 define <vscale x 4 x float> @llvm_nearbyint_vscale_f32(<vscale x 4 x float> %in) {
298 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_nearbyint_vscale_f32(
299 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
300 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.nearbyint.nxv4f32(<vscale x 4 x float> [[IN]])
301 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
303   %1 = call fast <vscale x 4 x float> @llvm.nearbyint.nxv4f32(<vscale x 4 x float> %in)
304   ret <vscale x 4 x float> %1
307 define <vscale x 2 x double> @llvm_pow_vscale_f64(<vscale x 2 x double> %in, <vscale x 2 x double> %pow) {
308 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_pow_vscale_f64(
309 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]], <vscale x 2 x double> [[POW:%.*]]) #[[ATTR0]] {
310 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @Sleef_powdx_u10rvvm2(<vscale x 2 x double> [[IN]], <vscale x 2 x double> [[POW]])
311 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
313   %1 = call fast <vscale x 2 x double> @llvm.pow.nxv2f64(<vscale x 2 x double> %in, <vscale x 2 x double> %pow)
314   ret <vscale x 2 x double> %1
317 define <vscale x 4 x float> @llvm_pow_vscale_f32(<vscale x 4 x float> %in, <vscale x 4 x float> %pow) {
318 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_pow_vscale_f32(
319 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]], <vscale x 4 x float> [[POW:%.*]]) #[[ATTR0]] {
320 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_powfx_u10rvvm2(<vscale x 4 x float> [[IN]], <vscale x 4 x float> [[POW]])
321 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
323   %1 = call fast <vscale x 4 x float> @llvm.pow.nxv4f32(<vscale x 4 x float> %in, <vscale x 4 x float> %pow)
324   ret <vscale x 4 x float> %1
327 define <vscale x 2 x double> @llvm_rint_vscale_f64(<vscale x 2 x double> %in) {
328 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_rint_vscale_f64(
329 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
330 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.rint.nxv2f64(<vscale x 2 x double> [[IN]])
331 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
333   %1 = call fast <vscale x 2 x double> @llvm.rint.nxv2f64(<vscale x 2 x double> %in)
334   ret <vscale x 2 x double> %1
337 define <vscale x 4 x float> @llvm_rint_vscale_f32(<vscale x 4 x float> %in) {
338 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_rint_vscale_f32(
339 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
340 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.rint.nxv4f32(<vscale x 4 x float> [[IN]])
341 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
343   %1 = call fast <vscale x 4 x float> @llvm.rint.nxv4f32(<vscale x 4 x float> %in)
344   ret <vscale x 4 x float> %1
347 define <vscale x 2 x double> @llvm_round_vscale_f64(<vscale x 2 x double> %in) {
348 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_round_vscale_f64(
349 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
350 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.round.nxv2f64(<vscale x 2 x double> [[IN]])
351 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
353   %1 = call fast <vscale x 2 x double> @llvm.round.nxv2f64(<vscale x 2 x double> %in)
354   ret <vscale x 2 x double> %1
357 define <vscale x 4 x float> @llvm_round_vscale_f32(<vscale x 4 x float> %in) {
358 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_round_vscale_f32(
359 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
360 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.round.nxv4f32(<vscale x 4 x float> [[IN]])
361 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
363   %1 = call fast <vscale x 4 x float> @llvm.round.nxv4f32(<vscale x 4 x float> %in)
364   ret <vscale x 4 x float> %1
367 define <vscale x 2 x double> @llvm_sin_vscale_f64(<vscale x 2 x double> %in) {
368 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_sin_vscale_f64(
369 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
370 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @Sleef_sindx_u10rvvm2(<vscale x 2 x double> [[IN]])
371 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
373   %1 = call fast <vscale x 2 x double> @llvm.sin.nxv2f64(<vscale x 2 x double> %in)
374   ret <vscale x 2 x double> %1
377 define <vscale x 4 x float> @llvm_sin_vscale_f32(<vscale x 4 x float> %in) {
378 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_sin_vscale_f32(
379 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
380 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_sinfx_u10rvvm2(<vscale x 4 x float> [[IN]])
381 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
383   %1 = call fast <vscale x 4 x float> @llvm.sin.nxv4f32(<vscale x 4 x float> %in)
384   ret <vscale x 4 x float> %1
387 define <vscale x 2 x double> @llvm_sqrt_vscale_f64(<vscale x 2 x double> %in) {
388 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_sqrt_vscale_f64(
389 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
390 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @Sleef_sqrtdx_u05rvvm2(<vscale x 2 x double> [[IN]])
391 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
393   %1 = call fast <vscale x 2 x double> @llvm.sqrt.nxv2f64(<vscale x 2 x double> %in)
394   ret <vscale x 2 x double> %1
397 define <vscale x 4 x float> @llvm_sqrt_vscale_f32(<vscale x 4 x float> %in) {
398 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_sqrt_vscale_f32(
399 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
400 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @Sleef_sqrtfx_u05rvvm2(<vscale x 4 x float> [[IN]])
401 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
403   %1 = call fast <vscale x 4 x float> @llvm.sqrt.nxv4f32(<vscale x 4 x float> %in)
404   ret <vscale x 4 x float> %1
407 define <vscale x 2 x double> @llvm_trunc_vscale_f64(<vscale x 2 x double> %in) {
408 ; CHECK-LABEL: define <vscale x 2 x double> @llvm_trunc_vscale_f64(
409 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
410 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 2 x double> @llvm.trunc.nxv2f64(<vscale x 2 x double> [[IN]])
411 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
413   %1 = call fast <vscale x 2 x double> @llvm.trunc.nxv2f64(<vscale x 2 x double> %in)
414   ret <vscale x 2 x double> %1
417 define <vscale x 4 x float> @llvm_trunc_vscale_f32(<vscale x 4 x float> %in) {
418 ; CHECK-LABEL: define <vscale x 4 x float> @llvm_trunc_vscale_f32(
419 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
420 ; CHECK-NEXT:    [[TMP1:%.*]] = call fast <vscale x 4 x float> @llvm.trunc.nxv4f32(<vscale x 4 x float> [[IN]])
421 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
423   %1 = call fast <vscale x 4 x float> @llvm.trunc.nxv4f32(<vscale x 4 x float> %in)
424   ret <vscale x 4 x float> %1
427 define <vscale x 2 x double> @frem_f64(<vscale x 2 x double> %in) {
428 ; CHECK-LABEL: define <vscale x 2 x double> @frem_f64(
429 ; CHECK-SAME: <vscale x 2 x double> [[IN:%.*]]) #[[ATTR0]] {
430 ; CHECK-NEXT:    [[TMP1:%.*]] = frem <vscale x 2 x double> [[IN]], [[IN]]
431 ; CHECK-NEXT:    ret <vscale x 2 x double> [[TMP1]]
433   %1= frem <vscale x 2 x double> %in, %in
434   ret <vscale x 2 x double> %1
437 define <vscale x 4 x float> @frem_f32(<vscale x 4 x float> %in) {
438 ; CHECK-LABEL: define <vscale x 4 x float> @frem_f32(
439 ; CHECK-SAME: <vscale x 4 x float> [[IN:%.*]]) #[[ATTR0]] {
440 ; CHECK-NEXT:    [[TMP1:%.*]] = frem <vscale x 4 x float> [[IN]], [[IN]]
441 ; CHECK-NEXT:    ret <vscale x 4 x float> [[TMP1]]
443   %1= frem <vscale x 4 x float> %in, %in
444   ret <vscale x 4 x float> %1
447 declare <vscale x 2 x double> @llvm.ceil.nxv2f64(<vscale x 2 x double>)
448 declare <vscale x 4 x float> @llvm.ceil.nxv4f32(<vscale x 4 x float>)
449 declare <vscale x 2 x double> @llvm.copysign.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
450 declare <vscale x 4 x float> @llvm.copysign.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
451 declare <vscale x 2 x double> @llvm.cos.nxv2f64(<vscale x 2 x double>)
452 declare <vscale x 4 x float> @llvm.cos.nxv4f32(<vscale x 4 x float>)
453 declare <vscale x 2 x double> @llvm.exp.nxv2f64(<vscale x 2 x double>)
454 declare <vscale x 4 x float> @llvm.exp.nxv4f32(<vscale x 4 x float>)
455 declare <vscale x 2 x double> @llvm.exp2.nxv2f64(<vscale x 2 x double>)
456 declare <vscale x 4 x float> @llvm.exp2.nxv4f32(<vscale x 4 x float>)
457 declare <vscale x 2 x double> @llvm.exp10.nxv2f64(<vscale x 2 x double>)
458 declare <vscale x 4 x float> @llvm.exp10.nxv4f32(<vscale x 4 x float>)
459 declare <vscale x 2 x double> @llvm.fabs.nxv2f64(<vscale x 2 x double>)
460 declare <vscale x 4 x float> @llvm.fabs.nxv4f32(<vscale x 4 x float>)
461 declare <vscale x 2 x double> @llvm.floor.nxv2f64(<vscale x 2 x double>)
462 declare <vscale x 4 x float> @llvm.floor.nxv4f32(<vscale x 4 x float>)
463 declare <vscale x 2 x double> @llvm.fma.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x double>)
464 declare <vscale x 4 x float> @llvm.fma.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x float>)
465 declare <vscale x 2 x double> @llvm.log.nxv2f64(<vscale x 2 x double>)
466 declare <vscale x 4 x float> @llvm.log.nxv4f32(<vscale x 4 x float>)
467 declare <vscale x 2 x double> @llvm.log10.nxv2f64(<vscale x 2 x double>)
468 declare <vscale x 4 x float> @llvm.log10.nxv4f32(<vscale x 4 x float>)
469 declare <vscale x 2 x double> @llvm.log2.nxv2f64(<vscale x 2 x double>)
470 declare <vscale x 4 x float> @llvm.log2.nxv4f32(<vscale x 4 x float>)
471 declare <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
472 declare <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
473 declare <vscale x 2 x double> @llvm.minnum.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
474 declare <vscale x 4 x float> @llvm.minnum.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
475 declare <vscale x 2 x double> @llvm.nearbyint.nxv2f64(<vscale x 2 x double>)
476 declare <vscale x 4 x float> @llvm.nearbyint.nxv4f32(<vscale x 4 x float>)
477 declare <vscale x 2 x double> @llvm.pow.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>)
478 declare <vscale x 4 x float> @llvm.pow.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>)
479 declare <vscale x 2 x double> @llvm.rint.nxv2f64(<vscale x 2 x double>)
480 declare <vscale x 4 x float> @llvm.rint.nxv4f32(<vscale x 4 x float>)
481 declare <vscale x 2 x double> @llvm.round.nxv2f64(<vscale x 2 x double>)
482 declare <vscale x 4 x float> @llvm.round.nxv4f32(<vscale x 4 x float>)
483 declare <vscale x 2 x double> @llvm.sin.nxv2f64(<vscale x 2 x double>)
484 declare <vscale x 4 x float> @llvm.sin.nxv4f32(<vscale x 4 x float>)
485 declare <vscale x 2 x double> @llvm.sqrt.nxv2f64(<vscale x 2 x double>)
486 declare <vscale x 4 x float> @llvm.sqrt.nxv4f32(<vscale x 4 x float>)
487 declare <vscale x 2 x double> @llvm.trunc.nxv2f64(<vscale x 2 x double>)
488 declare <vscale x 4 x float> @llvm.trunc.nxv4f32(<vscale x 4 x float>)
490 ; CHECK: attributes #[[ATTR0]] = { "target-features"="+v" }
491 ; CHECK: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind speculatable willreturn memory(none) "target-features"="+v" }