@@ -77,6 +77,18 @@ func.func @log1p_2dvector_fmf(%arg0 : vector<4x3xf32>) {
77
77
78
78
// -----
79
79
80
+ // CHECK-LABEL: func @log1p_scalable_vector(
81
+ // CHECK-SAME: %[[VEC:.*]]: vector<[4]xf32>
82
+ func.func @log1p_scalable_vector (%arg0 : vector <[4 ]xf32 >) -> vector <[4 ]xf32 > {
83
+ // CHECK: %[[ONE:.*]] = llvm.mlir.constant(dense<1.000000e+00> : vector<[4]xf32>) : vector<[4]xf32>
84
+ // CHECK: %[[ADD:.*]] = llvm.fadd %[[ONE]], %[[VEC]] : vector<[4]xf32>
85
+ // CHECK: %[[LOG:.*]] = llvm.intr.log(%[[ADD]]) : (vector<[4]xf32>) -> vector<[4]xf32>
86
+ %0 = math.log1p %arg0 : vector <[4 ]xf32 >
87
+ func.return %0 : vector <[4 ]xf32 >
88
+ }
89
+
90
+ // -----
91
+
80
92
// CHECK-LABEL: func @expm1(
81
93
// CHECK-SAME: f32
82
94
func.func @expm1 (%arg0 : f32 ) {
@@ -113,6 +125,18 @@ func.func @expm1_vector(%arg0 : vector<4xf32>) {
113
125
114
126
// -----
115
127
128
+ // CHECK-LABEL: func @expm1_scalable_vector(
129
+ // CHECK-SAME: %[[VEC:.*]]: vector<[4]xf32>
130
+ func.func @expm1_scalable_vector (%arg0 : vector <[4 ]xf32 >) -> vector <[4 ]xf32 > {
131
+ // CHECK: %[[ONE:.*]] = llvm.mlir.constant(dense<1.000000e+00> : vector<[4]xf32>) : vector<[4]xf32>
132
+ // CHECK: %[[EXP:.*]] = llvm.intr.exp(%[[VEC]]) : (vector<[4]xf32>) -> vector<[4]xf32>
133
+ // CHECK: %[[SUB:.*]] = llvm.fsub %[[EXP]], %[[ONE]] : vector<[4]xf32>
134
+ %0 = math.expm1 %arg0 : vector <[4 ]xf32 >
135
+ func.return %0 : vector <[4 ]xf32 >
136
+ }
137
+
138
+ // -----
139
+
116
140
// CHECK-LABEL: func @expm1_vector_fmf(
117
141
// CHECK-SAME: vector<4xf32>
118
142
func.func @expm1_vector_fmf (%arg0 : vector <4 xf32 >) {
@@ -177,6 +201,16 @@ func.func @cttz_vec(%arg0 : vector<4xi32>) {
177
201
178
202
// -----
179
203
204
+ // CHECK-LABEL: func @cttz_scalable_vec(
205
+ // CHECK-SAME: %[[VEC:.*]]: vector<[4]xi32>
206
+ func.func @cttz_scalable_vec (%arg0 : vector <[4 ]xi32 >) -> vector <[4 ]xi32 > {
207
+ // CHECK: "llvm.intr.cttz"(%[[VEC]]) <{is_zero_poison = false}> : (vector<[4]xi32>) -> vector<[4]xi32>
208
+ %0 = math.cttz %arg0 : vector <[4 ]xi32 >
209
+ func.return %0 : vector <[4 ]xi32 >
210
+ }
211
+
212
+ // -----
213
+
180
214
// CHECK-LABEL: func @ctpop(
181
215
// CHECK-SAME: i32
182
216
func.func @ctpop (%arg0 : i32 ) {
@@ -197,6 +231,16 @@ func.func @ctpop_vector(%arg0 : vector<3xi32>) {
197
231
198
232
// -----
199
233
234
+ // CHECK-LABEL: func @ctpop_scalable_vector(
235
+ // CHECK-SAME: %[[VEC:.*]]: vector<[4]xi32>
236
+ func.func @ctpop_scalable_vector (%arg0 : vector <[4 ]xi32 >) -> vector <[4 ]xi32 > {
237
+ // CHECK: llvm.intr.ctpop(%[[VEC]]) : (vector<[4]xi32>) -> vector<[4]xi32>
238
+ %0 = math.ctpop %arg0 : vector <[4 ]xi32 >
239
+ func.return %0 : vector <[4 ]xi32 >
240
+ }
241
+
242
+ // -----
243
+
200
244
// CHECK-LABEL: func @rsqrt_double(
201
245
// CHECK-SAME: f64
202
246
func.func @rsqrt_double (%arg0 : f64 ) {
@@ -233,6 +277,18 @@ func.func @rsqrt_vector(%arg0 : vector<4xf32>) {
233
277
234
278
// -----
235
279
280
+ // CHECK-LABEL: func @rsqrt_scalable_vector(
281
+ // CHECK-SAME: %[[VEC:.*]]: vector<[4]xf32>
282
+ func.func @rsqrt_scalable_vector (%arg0 : vector <[4 ]xf32 >) -> vector <[4 ]xf32 >{
283
+ // CHECK: %[[ONE:.*]] = llvm.mlir.constant(dense<1.000000e+00> : vector<[4]xf32>) : vector<[4]xf32>
284
+ // CHECK: %[[SQRT:.*]] = llvm.intr.sqrt(%[[VEC]]) : (vector<[4]xf32>) -> vector<[4]xf32>
285
+ // CHECK: %[[DIV:.*]] = llvm.fdiv %[[ONE]], %[[SQRT]] : vector<[4]xf32>
286
+ %0 = math.rsqrt %arg0 : vector <[4 ]xf32 >
287
+ func.return %0 : vector <[4 ]xf32 >
288
+ }
289
+
290
+ // -----
291
+
236
292
// CHECK-LABEL: func @rsqrt_vector_fmf(
237
293
// CHECK-SAME: vector<4xf32>
238
294
func.func @rsqrt_vector_fmf (%arg0 : vector <4 xf32 >) {
@@ -245,6 +301,18 @@ func.func @rsqrt_vector_fmf(%arg0 : vector<4xf32>) {
245
301
246
302
// -----
247
303
304
+ // CHECK-LABEL: func @rsqrt_scalable_vector_fmf(
305
+ // CHECK-SAME: %[[VEC:.*]]: vector<[4]xf32>
306
+ func.func @rsqrt_scalable_vector_fmf (%arg0 : vector <[4 ]xf32 >) -> vector <[4 ]xf32 > {
307
+ // CHECK: %[[ONE:.*]] = llvm.mlir.constant(dense<1.000000e+00> : vector<[4]xf32>) : vector<[4]xf32>
308
+ // CHECK: %[[SQRT:.*]] = llvm.intr.sqrt(%[[VEC]]) {fastmathFlags = #llvm.fastmath<fast>} : (vector<[4]xf32>) -> vector<[4]xf32>
309
+ // CHECK: %[[DIV:.*]] = llvm.fdiv %[[ONE]], %[[SQRT]] {fastmathFlags = #llvm.fastmath<fast>} : vector<[4]xf32>
310
+ %0 = math.rsqrt %arg0 fastmath <fast > : vector <[4 ]xf32 >
311
+ func.return %0 : vector <[4 ]xf32 >
312
+ }
313
+
314
+ // -----
315
+
248
316
// CHECK-LABEL: func @rsqrt_multidim_vector(
249
317
func.func @rsqrt_multidim_vector (%arg0 : vector <4 x3 xf32 >) {
250
318
// CHECK: %[[EXTRACT:.*]] = llvm.extractvalue %{{.*}}[0] : !llvm.array<4 x vector<3xf32>>
@@ -258,6 +326,19 @@ func.func @rsqrt_multidim_vector(%arg0 : vector<4x3xf32>) {
258
326
259
327
// -----
260
328
329
+ // CHECK-LABEL: func @rsqrt_multidim_scalable_vector(
330
+ func.func @rsqrt_multidim_scalable_vector (%arg0 : vector <4 x[4 ]xf32 >) -> vector <4 x[4 ]xf32 > {
331
+ // CHECK: %[[EXTRACT:.*]] = llvm.extractvalue %{{.*}}[0] : !llvm.array<4 x vector<[4]xf32>>
332
+ // CHECK: %[[ONE:.*]] = llvm.mlir.constant(dense<1.000000e+00> : vector<[4]xf32>) : vector<[4]xf32>
333
+ // CHECK: %[[SQRT:.*]] = llvm.intr.sqrt(%[[EXTRACT]]) : (vector<[4]xf32>) -> vector<[4]xf32>
334
+ // CHECK: %[[DIV:.*]] = llvm.fdiv %[[ONE]], %[[SQRT]] : vector<[4]xf32>
335
+ // CHECK: %[[INSERT:.*]] = llvm.insertvalue %[[DIV]], %{{.*}}[0] : !llvm.array<4 x vector<[4]xf32>>
336
+ %0 = math.rsqrt %arg0 : vector <4 x[4 ]xf32 >
337
+ func.return %0 : vector <4 x[4 ]xf32 >
338
+ }
339
+
340
+ // -----
341
+
261
342
// CHECK-LABEL: func @fpowi(
262
343
// CHECK-SAME: f64
263
344
func.func @fpowi (%arg0 : f64 , %arg1 : i32 ) {
0 commit comments