xref: /llvm-project/llvm/test/CodeGen/ARM/vecreduce-minmax.ll (revision 71dc3de533b9247223c083a3b058859c9759099c)
1*71dc3de5SCaleb Zulawski; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*71dc3de5SCaleb Zulawski; RUN: llc < %s -mtriple=armv7-none-eabi -float-abi=hard -mattr=+neon -verify-machineinstrs | FileCheck %s
3*71dc3de5SCaleb Zulawski
4*71dc3de5SCaleb Zulawskidefine i8 @test_umin_v8i8(<8 x i8> %x) {
5*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_umin_v8i8:
6*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
7*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d0, d0
8*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d16, d16
9*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d16, d16
10*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.u8 r0, d16[0]
11*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
12*71dc3de5SCaleb Zulawskientry:
13*71dc3de5SCaleb Zulawski  %z = call i8 @llvm.vector.reduce.umin.v8i8(<8 x i8> %x)
14*71dc3de5SCaleb Zulawski  ret i8 %z
15*71dc3de5SCaleb Zulawski}
16*71dc3de5SCaleb Zulawski
17*71dc3de5SCaleb Zulawskidefine i8 @test_smin_v8i8(<8 x i8> %x) {
18*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_smin_v8i8:
19*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
20*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.s8 d16, d0, d0
21*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.s8 d16, d16, d16
22*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.s8 d16, d16, d16
23*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.s8 r0, d16[0]
24*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
25*71dc3de5SCaleb Zulawskientry:
26*71dc3de5SCaleb Zulawski  %z = call i8 @llvm.vector.reduce.smin.v8i8(<8 x i8> %x)
27*71dc3de5SCaleb Zulawski  ret i8 %z
28*71dc3de5SCaleb Zulawski}
29*71dc3de5SCaleb Zulawski
30*71dc3de5SCaleb Zulawskidefine i8 @test_umax_v8i8(<8 x i8> %x) {
31*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_umax_v8i8:
32*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
33*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.u8 d16, d0, d0
34*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.u8 d16, d16, d16
35*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.u8 d16, d16, d16
36*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.u8 r0, d16[0]
37*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
38*71dc3de5SCaleb Zulawskientry:
39*71dc3de5SCaleb Zulawski  %z = call i8 @llvm.vector.reduce.umax.v8i8(<8 x i8> %x)
40*71dc3de5SCaleb Zulawski  ret i8 %z
41*71dc3de5SCaleb Zulawski}
42*71dc3de5SCaleb Zulawski
43*71dc3de5SCaleb Zulawskidefine i8 @test_smax_v8i8(<8 x i8> %x) {
44*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_smax_v8i8:
45*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
46*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.s8 d16, d0, d0
47*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.s8 d16, d16, d16
48*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.s8 d16, d16, d16
49*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.s8 r0, d16[0]
50*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
51*71dc3de5SCaleb Zulawskientry:
52*71dc3de5SCaleb Zulawski  %z = call i8 @llvm.vector.reduce.smax.v8i8(<8 x i8> %x)
53*71dc3de5SCaleb Zulawski  ret i8 %z
54*71dc3de5SCaleb Zulawski}
55*71dc3de5SCaleb Zulawski
56*71dc3de5SCaleb Zulawskidefine i16 @test_umin_v4i16(<4 x i16> %x) {
57*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_umin_v4i16:
58*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
59*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u16 d16, d0, d0
60*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u16 d16, d16, d16
61*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.u16 r0, d16[0]
62*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
63*71dc3de5SCaleb Zulawskientry:
64*71dc3de5SCaleb Zulawski  %z = call i16 @llvm.vector.reduce.umin.v4i16(<4 x i16> %x)
65*71dc3de5SCaleb Zulawski  ret i16 %z
66*71dc3de5SCaleb Zulawski}
67*71dc3de5SCaleb Zulawski
68*71dc3de5SCaleb Zulawskidefine i16 @test_smin_v4i16(<4 x i16> %x) {
69*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_smin_v4i16:
70*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
71*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.s16 d16, d0, d0
72*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.s16 d16, d16, d16
73*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.s16 r0, d16[0]
74*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
75*71dc3de5SCaleb Zulawskientry:
76*71dc3de5SCaleb Zulawski  %z = call i16 @llvm.vector.reduce.smin.v4i16(<4 x i16> %x)
77*71dc3de5SCaleb Zulawski  ret i16 %z
78*71dc3de5SCaleb Zulawski}
79*71dc3de5SCaleb Zulawski
80*71dc3de5SCaleb Zulawskidefine i16 @test_umax_v4i16(<4 x i16> %x) {
81*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_umax_v4i16:
82*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
83*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.u16 d16, d0, d0
84*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.u16 d16, d16, d16
85*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.u16 r0, d16[0]
86*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
87*71dc3de5SCaleb Zulawskientry:
88*71dc3de5SCaleb Zulawski  %z = call i16 @llvm.vector.reduce.umax.v4i16(<4 x i16> %x)
89*71dc3de5SCaleb Zulawski  ret i16 %z
90*71dc3de5SCaleb Zulawski}
91*71dc3de5SCaleb Zulawski
92*71dc3de5SCaleb Zulawskidefine i16 @test_smax_v4i16(<4 x i16> %x) {
93*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_smax_v4i16:
94*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
95*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.s16 d16, d0, d0
96*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.s16 d16, d16, d16
97*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.s16 r0, d16[0]
98*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
99*71dc3de5SCaleb Zulawskientry:
100*71dc3de5SCaleb Zulawski  %z = call i16 @llvm.vector.reduce.smax.v4i16(<4 x i16> %x)
101*71dc3de5SCaleb Zulawski  ret i16 %z
102*71dc3de5SCaleb Zulawski}
103*71dc3de5SCaleb Zulawski
104*71dc3de5SCaleb Zulawskidefine i32 @test_umin_v2i32(<2 x i32> %x) {
105*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_umin_v2i32:
106*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
107*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u32 d16, d0, d0
108*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.32 r0, d16[0]
109*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
110*71dc3de5SCaleb Zulawskientry:
111*71dc3de5SCaleb Zulawski  %z = call i32 @llvm.vector.reduce.umin.v2i32(<2 x i32> %x)
112*71dc3de5SCaleb Zulawski  ret i32 %z
113*71dc3de5SCaleb Zulawski}
114*71dc3de5SCaleb Zulawski
115*71dc3de5SCaleb Zulawskidefine i32 @test_smin_v2i32(<2 x i32> %x) {
116*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_smin_v2i32:
117*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
118*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.s32 d16, d0, d0
119*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.32 r0, d16[0]
120*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
121*71dc3de5SCaleb Zulawskientry:
122*71dc3de5SCaleb Zulawski  %z = call i32 @llvm.vector.reduce.smin.v2i32(<2 x i32> %x)
123*71dc3de5SCaleb Zulawski  ret i32 %z
124*71dc3de5SCaleb Zulawski}
125*71dc3de5SCaleb Zulawski
126*71dc3de5SCaleb Zulawskidefine i32 @test_umax_v2i32(<2 x i32> %x) {
127*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_umax_v2i32:
128*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
129*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.u32 d16, d0, d0
130*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.32 r0, d16[0]
131*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
132*71dc3de5SCaleb Zulawskientry:
133*71dc3de5SCaleb Zulawski  %z = call i32 @llvm.vector.reduce.umax.v2i32(<2 x i32> %x)
134*71dc3de5SCaleb Zulawski  ret i32 %z
135*71dc3de5SCaleb Zulawski}
136*71dc3de5SCaleb Zulawski
137*71dc3de5SCaleb Zulawskidefine i32 @test_smax_v2i32(<2 x i32> %x) {
138*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_smax_v2i32:
139*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
140*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.s32 d16, d0, d0
141*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.32 r0, d16[0]
142*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
143*71dc3de5SCaleb Zulawskientry:
144*71dc3de5SCaleb Zulawski  %z = call i32 @llvm.vector.reduce.smax.v2i32(<2 x i32> %x)
145*71dc3de5SCaleb Zulawski  ret i32 %z
146*71dc3de5SCaleb Zulawski}
147*71dc3de5SCaleb Zulawski
148*71dc3de5SCaleb Zulawskidefine i8 @test_umin_v16i8(<16 x i8> %x) {
149*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_umin_v16i8:
150*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
151*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d0, d1
152*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d16, d16
153*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d16, d16
154*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d16, d16
155*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.u8 r0, d16[0]
156*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
157*71dc3de5SCaleb Zulawskientry:
158*71dc3de5SCaleb Zulawski  %z = call i8 @llvm.vector.reduce.umin.v16i8(<16 x i8> %x)
159*71dc3de5SCaleb Zulawski  ret i8 %z
160*71dc3de5SCaleb Zulawski}
161*71dc3de5SCaleb Zulawski
162*71dc3de5SCaleb Zulawskidefine i16 @test_smin_v8i16(<8 x i16> %x) {
163*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_smin_v8i16:
164*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
165*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.s16 d16, d0, d1
166*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.s16 d16, d16, d16
167*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.s16 d16, d16, d16
168*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.s16 r0, d16[0]
169*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
170*71dc3de5SCaleb Zulawskientry:
171*71dc3de5SCaleb Zulawski  %z = call i16 @llvm.vector.reduce.smin.v8i16(<8 x i16> %x)
172*71dc3de5SCaleb Zulawski  ret i16 %z
173*71dc3de5SCaleb Zulawski}
174*71dc3de5SCaleb Zulawski
175*71dc3de5SCaleb Zulawskidefine i32 @test_umax_v4i32(<4 x i32> %x) {
176*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_umax_v4i32:
177*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
178*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.u32 d16, d0, d1
179*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmax.u32 d16, d16, d16
180*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.32 r0, d16[0]
181*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
182*71dc3de5SCaleb Zulawskientry:
183*71dc3de5SCaleb Zulawski  %z = call i32 @llvm.vector.reduce.umax.v4i32(<4 x i32> %x)
184*71dc3de5SCaleb Zulawski  ret i32 %z
185*71dc3de5SCaleb Zulawski}
186*71dc3de5SCaleb Zulawski
187*71dc3de5SCaleb Zulawskidefine i8 @test_umin_v32i8(<32 x i8> %x) {
188*71dc3de5SCaleb Zulawski; CHECK-LABEL: test_umin_v32i8:
189*71dc3de5SCaleb Zulawski; CHECK:       @ %bb.0: @ %entry
190*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmin.u8 q8, q0, q1
191*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d16, d17
192*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d16, d16
193*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d16, d16
194*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vpmin.u8 d16, d16, d16
195*71dc3de5SCaleb Zulawski; CHECK-NEXT:    vmov.u8 r0, d16[0]
196*71dc3de5SCaleb Zulawski; CHECK-NEXT:    bx lr
197*71dc3de5SCaleb Zulawskientry:
198*71dc3de5SCaleb Zulawski  %z = call i8 @llvm.vector.reduce.umin.v32i8(<32 x i8> %x)
199*71dc3de5SCaleb Zulawski  ret i8 %z
200*71dc3de5SCaleb Zulawski}
201*71dc3de5SCaleb Zulawski
202*71dc3de5SCaleb Zulawskideclare i8 @llvm.vector.reduce.umin.v8i8(<8 x i8>)
203*71dc3de5SCaleb Zulawskideclare i8 @llvm.vector.reduce.smin.v8i8(<8 x i8>)
204*71dc3de5SCaleb Zulawskideclare i8 @llvm.vector.reduce.umax.v8i8(<8 x i8>)
205*71dc3de5SCaleb Zulawskideclare i8 @llvm.vector.reduce.smax.v8i8(<8 x i8>)
206*71dc3de5SCaleb Zulawskideclare i16 @llvm.vector.reduce.umin.v4i16(<4 x i16>)
207*71dc3de5SCaleb Zulawskideclare i16 @llvm.vector.reduce.smin.v4i16(<4 x i16>)
208*71dc3de5SCaleb Zulawskideclare i16 @llvm.vector.reduce.umax.v4i16(<4 x i16>)
209*71dc3de5SCaleb Zulawskideclare i16 @llvm.vector.reduce.smax.v4i16(<4 x i16>)
210*71dc3de5SCaleb Zulawskideclare i32 @llvm.vector.reduce.umin.v2i32(<2 x i32>)
211*71dc3de5SCaleb Zulawskideclare i32 @llvm.vector.reduce.smin.v2i32(<2 x i32>)
212*71dc3de5SCaleb Zulawskideclare i32 @llvm.vector.reduce.umax.v2i32(<2 x i32>)
213*71dc3de5SCaleb Zulawskideclare i32 @llvm.vector.reduce.smax.v2i32(<2 x i32>)
214*71dc3de5SCaleb Zulawski
215*71dc3de5SCaleb Zulawskideclare i8 @llvm.vector.reduce.umin.v16i8(<16 x i8>)
216*71dc3de5SCaleb Zulawskideclare i16 @llvm.vector.reduce.smin.v8i16(<8 x i16>)
217*71dc3de5SCaleb Zulawskideclare i32 @llvm.vector.reduce.umax.v4i32(<4 x i32>)
218*71dc3de5SCaleb Zulawski
219*71dc3de5SCaleb Zulawskideclare i8 @llvm.vector.reduce.umin.v32i8(<32 x i8>)
220