Skip to content

Commit 6fcc562

Browse files
committed
[AArch64] Add SVE tests for double reducts of vector.reduce.fmaximum/fminimum. NFC
Now that the SVE parts are in, we can fill in the double reduction tests without them causing problems.
1 parent b37233a commit 6fcc562

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

llvm/test/CodeGen/AArch64/sve-doublereduct.ll

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,36 @@ define float @fmax_f32(<vscale x 8 x float> %a, <vscale x 4 x float> %b) {
5353
ret float %r
5454
}
5555

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+
5686

5787
define i32 @add_i32(<vscale x 8 x i32> %a, <vscale x 4 x i32> %b) {
5888
; CHECK-LABEL: add_i32:
@@ -237,8 +267,12 @@ declare float @llvm.vector.reduce.fmul.f32.nxv8f32(float, <vscale x 8 x float>)
237267
declare float @llvm.vector.reduce.fmul.f32.nxv4f32(float, <vscale x 4 x float>)
238268
declare float @llvm.vector.reduce.fmin.nxv8f32(<vscale x 8 x float>)
239269
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>)
240272
declare float @llvm.vector.reduce.fmax.nxv8f32(<vscale x 8 x float>)
241273
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>)
242276
declare i32 @llvm.vector.reduce.add.i32.nxv8i32(<vscale x 8 x i32>)
243277
declare i32 @llvm.vector.reduce.add.i32.nxv4i32(<vscale x 4 x i32>)
244278
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>)
261295
declare i32 @llvm.vector.reduce.smax.i32.nxv4i32(<vscale x 4 x i32>)
262296
declare float @llvm.minnum.f32(float, float)
263297
declare float @llvm.maxnum.f32(float, float)
298+
declare float @llvm.minimum.f32(float, float)
299+
declare float @llvm.maximum.f32(float, float)
264300
declare i32 @llvm.umin.i32(i32, i32)
265301
declare i32 @llvm.umax.i32(i32, i32)
266302
declare i32 @llvm.smin.i32(i32, i32)

0 commit comments

Comments
 (0)