@@ -53,6 +53,36 @@ define float @fmax_f32(<vscale x 8 x float> %a, <vscale x 4 x float> %b) {
53
53
ret float %r
54
54
}
55
55
56
+ define float @fminimum_f32 (<vscale x 8 x float > %a , <vscale x 4 x float > %b ) {
57
+ ; CHECK-LABEL: fminimum_f32:
58
+ ; CHECK: // %bb.0:
59
+ ; CHECK-NEXT: ptrue p0.s
60
+ ; CHECK-NEXT: fmin z0.s, p0/m, z0.s, z1.s
61
+ ; CHECK-NEXT: fminv s2, p0, z2.s
62
+ ; CHECK-NEXT: fminv s0, p0, z0.s
63
+ ; CHECK-NEXT: fminnm s0, s0, s2
64
+ ; CHECK-NEXT: ret
65
+ %r1 = call fast float @llvm.vector.reduce.fminimum.nxv8f32 (<vscale x 8 x float > %a )
66
+ %r2 = call fast float @llvm.vector.reduce.fminimum.nxv4f32 (<vscale x 4 x float > %b )
67
+ %r = call float @llvm.minnum.f32 (float %r1 , float %r2 )
68
+ ret float %r
69
+ }
70
+
71
+ define float @fmaximum_f32 (<vscale x 8 x float > %a , <vscale x 4 x float > %b ) {
72
+ ; CHECK-LABEL: fmaximum_f32:
73
+ ; CHECK: // %bb.0:
74
+ ; CHECK-NEXT: ptrue p0.s
75
+ ; CHECK-NEXT: fmax z0.s, p0/m, z0.s, z1.s
76
+ ; CHECK-NEXT: fmaxv s2, p0, z2.s
77
+ ; CHECK-NEXT: fmaxv s0, p0, z0.s
78
+ ; CHECK-NEXT: fmaxnm s0, s0, s2
79
+ ; CHECK-NEXT: ret
80
+ %r1 = call fast float @llvm.vector.reduce.fmaximum.nxv8f32 (<vscale x 8 x float > %a )
81
+ %r2 = call fast float @llvm.vector.reduce.fmaximum.nxv4f32 (<vscale x 4 x float > %b )
82
+ %r = call float @llvm.maxnum.f32 (float %r1 , float %r2 )
83
+ ret float %r
84
+ }
85
+
56
86
57
87
define i32 @add_i32 (<vscale x 8 x i32 > %a , <vscale x 4 x i32 > %b ) {
58
88
; CHECK-LABEL: add_i32:
@@ -237,8 +267,12 @@ declare float @llvm.vector.reduce.fmul.f32.nxv8f32(float, <vscale x 8 x float>)
237
267
declare float @llvm.vector.reduce.fmul.f32.nxv4f32 (float , <vscale x 4 x float >)
238
268
declare float @llvm.vector.reduce.fmin.nxv8f32 (<vscale x 8 x float >)
239
269
declare float @llvm.vector.reduce.fmin.nxv4f32 (<vscale x 4 x float >)
270
+ declare float @llvm.vector.reduce.fminimum.nxv8f32 (<vscale x 8 x float >)
271
+ declare float @llvm.vector.reduce.fminimum.nxv4f32 (<vscale x 4 x float >)
240
272
declare float @llvm.vector.reduce.fmax.nxv8f32 (<vscale x 8 x float >)
241
273
declare float @llvm.vector.reduce.fmax.nxv4f32 (<vscale x 4 x float >)
274
+ declare float @llvm.vector.reduce.fmaximum.nxv8f32 (<vscale x 8 x float >)
275
+ declare float @llvm.vector.reduce.fmaximum.nxv4f32 (<vscale x 4 x float >)
242
276
declare i32 @llvm.vector.reduce.add.i32.nxv8i32 (<vscale x 8 x i32 >)
243
277
declare i32 @llvm.vector.reduce.add.i32.nxv4i32 (<vscale x 4 x i32 >)
244
278
declare i16 @llvm.vector.reduce.add.i16.nxv32i16 (<vscale x 32 x i16 >)
@@ -261,6 +295,8 @@ declare i32 @llvm.vector.reduce.smax.i32.nxv8i32(<vscale x 8 x i32>)
261
295
declare i32 @llvm.vector.reduce.smax.i32.nxv4i32 (<vscale x 4 x i32 >)
262
296
declare float @llvm.minnum.f32 (float , float )
263
297
declare float @llvm.maxnum.f32 (float , float )
298
+ declare float @llvm.minimum.f32 (float , float )
299
+ declare float @llvm.maximum.f32 (float , float )
264
300
declare i32 @llvm.umin.i32 (i32 , i32 )
265
301
declare i32 @llvm.umax.i32 (i32 , i32 )
266
302
declare i32 @llvm.smin.i32 (i32 , i32 )
0 commit comments