xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/minmax.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=armv8-linux-gnu -mattr=+neon | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t1
4*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.s32 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
5*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @t1(<4 x i32> %a, <4 x i32> %b) {
6*9880d681SAndroid Build Coastguard Worker  %t1 = icmp sgt <4 x i32> %a, %b
7*9880d681SAndroid Build Coastguard Worker  %t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
8*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %t2
9*9880d681SAndroid Build Coastguard Worker}
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t2
12*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.s32 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
13*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @t2(<4 x i32> %a, <4 x i32> %b) {
14*9880d681SAndroid Build Coastguard Worker  %t1 = icmp slt <4 x i32> %a, %b
15*9880d681SAndroid Build Coastguard Worker  %t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
16*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %t2
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t3
20*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.u32 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
21*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @t3(<4 x i32> %a, <4 x i32> %b) {
22*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ugt <4 x i32> %a, %b
23*9880d681SAndroid Build Coastguard Worker  %t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
24*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %t2
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t4
28*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.u32 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
29*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @t4(<4 x i32> %a, <4 x i32> %b) {
30*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ult <4 x i32> %a, %b
31*9880d681SAndroid Build Coastguard Worker  %t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
32*9880d681SAndroid Build Coastguard Worker  ret <4 x i32> %t2
33*9880d681SAndroid Build Coastguard Worker}
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t5
36*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.s32 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
37*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @t5(<2 x i32> %a, <2 x i32> %b) {
38*9880d681SAndroid Build Coastguard Worker  %t1 = icmp sgt <2 x i32> %a, %b
39*9880d681SAndroid Build Coastguard Worker  %t2 = select <2 x i1> %t1, <2 x i32> %a, <2 x i32> %b
40*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %t2
41*9880d681SAndroid Build Coastguard Worker}
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t6
44*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.s32 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
45*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @t6(<2 x i32> %a, <2 x i32> %b) {
46*9880d681SAndroid Build Coastguard Worker  %t1 = icmp slt <2 x i32> %a, %b
47*9880d681SAndroid Build Coastguard Worker  %t2 = select <2 x i1> %t1, <2 x i32> %a, <2 x i32> %b
48*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %t2
49*9880d681SAndroid Build Coastguard Worker}
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t7
52*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.u32 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
53*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @t7(<2 x i32> %a, <2 x i32> %b) {
54*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ugt <2 x i32> %a, %b
55*9880d681SAndroid Build Coastguard Worker  %t2 = select <2 x i1> %t1, <2 x i32> %a, <2 x i32> %b
56*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %t2
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t8
60*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.u32 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
61*9880d681SAndroid Build Coastguard Workerdefine <2 x i32> @t8(<2 x i32> %a, <2 x i32> %b) {
62*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ult <2 x i32> %a, %b
63*9880d681SAndroid Build Coastguard Worker  %t2 = select <2 x i1> %t1, <2 x i32> %a, <2 x i32> %b
64*9880d681SAndroid Build Coastguard Worker  ret <2 x i32> %t2
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t9
68*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.s16 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
69*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @t9(<8 x i16> %a, <8 x i16> %b) {
70*9880d681SAndroid Build Coastguard Worker  %t1 = icmp sgt <8 x i16> %a, %b
71*9880d681SAndroid Build Coastguard Worker  %t2 = select <8 x i1> %t1, <8 x i16> %a, <8 x i16> %b
72*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %t2
73*9880d681SAndroid Build Coastguard Worker}
74*9880d681SAndroid Build Coastguard Worker
75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t10
76*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.s16 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
77*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @t10(<8 x i16> %a, <8 x i16> %b) {
78*9880d681SAndroid Build Coastguard Worker  %t1 = icmp slt <8 x i16> %a, %b
79*9880d681SAndroid Build Coastguard Worker  %t2 = select <8 x i1> %t1, <8 x i16> %a, <8 x i16> %b
80*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %t2
81*9880d681SAndroid Build Coastguard Worker}
82*9880d681SAndroid Build Coastguard Worker
83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t11
84*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.u16 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
85*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @t11(<8 x i16> %a, <8 x i16> %b) {
86*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ugt <8 x i16> %a, %b
87*9880d681SAndroid Build Coastguard Worker  %t2 = select <8 x i1> %t1, <8 x i16> %a, <8 x i16> %b
88*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %t2
89*9880d681SAndroid Build Coastguard Worker}
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t12
92*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.u16 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
93*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @t12(<8 x i16> %a, <8 x i16> %b) {
94*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ult <8 x i16> %a, %b
95*9880d681SAndroid Build Coastguard Worker  %t2 = select <8 x i1> %t1, <8 x i16> %a, <8 x i16> %b
96*9880d681SAndroid Build Coastguard Worker  ret <8 x i16> %t2
97*9880d681SAndroid Build Coastguard Worker}
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t13
100*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.s16
101*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @t13(<4 x i16> %a, <4 x i16> %b) {
102*9880d681SAndroid Build Coastguard Worker  %t1 = icmp sgt <4 x i16> %a, %b
103*9880d681SAndroid Build Coastguard Worker  %t2 = select <4 x i1> %t1, <4 x i16> %a, <4 x i16> %b
104*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %t2
105*9880d681SAndroid Build Coastguard Worker}
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t14
108*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.s16 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
109*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @t14(<4 x i16> %a, <4 x i16> %b) {
110*9880d681SAndroid Build Coastguard Worker  %t1 = icmp slt <4 x i16> %a, %b
111*9880d681SAndroid Build Coastguard Worker  %t2 = select <4 x i1> %t1, <4 x i16> %a, <4 x i16> %b
112*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %t2
113*9880d681SAndroid Build Coastguard Worker}
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t15
116*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.u16 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
117*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @t15(<4 x i16> %a, <4 x i16> %b) {
118*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ugt <4 x i16> %a, %b
119*9880d681SAndroid Build Coastguard Worker  %t2 = select <4 x i1> %t1, <4 x i16> %a, <4 x i16> %b
120*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %t2
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t16
124*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.u16 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
125*9880d681SAndroid Build Coastguard Workerdefine <4 x i16> @t16(<4 x i16> %a, <4 x i16> %b) {
126*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ult <4 x i16> %a, %b
127*9880d681SAndroid Build Coastguard Worker  %t2 = select <4 x i1> %t1, <4 x i16> %a, <4 x i16> %b
128*9880d681SAndroid Build Coastguard Worker  ret <4 x i16> %t2
129*9880d681SAndroid Build Coastguard Worker}
130*9880d681SAndroid Build Coastguard Worker
131*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t17
132*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.s8 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
133*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t17(<16 x i8> %a, <16 x i8> %b) {
134*9880d681SAndroid Build Coastguard Worker  %t1 = icmp sgt <16 x i8> %a, %b
135*9880d681SAndroid Build Coastguard Worker  %t2 = select <16 x i1> %t1, <16 x i8> %a, <16 x i8> %b
136*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %t2
137*9880d681SAndroid Build Coastguard Worker}
138*9880d681SAndroid Build Coastguard Worker
139*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t18
140*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.s8 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
141*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t18(<16 x i8> %a, <16 x i8> %b) {
142*9880d681SAndroid Build Coastguard Worker  %t1 = icmp slt <16 x i8> %a, %b
143*9880d681SAndroid Build Coastguard Worker  %t2 = select <16 x i1> %t1, <16 x i8> %a, <16 x i8> %b
144*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %t2
145*9880d681SAndroid Build Coastguard Worker}
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t19
148*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.u8 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
149*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t19(<16 x i8> %a, <16 x i8> %b) {
150*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ugt <16 x i8> %a, %b
151*9880d681SAndroid Build Coastguard Worker  %t2 = select <16 x i1> %t1, <16 x i8> %a, <16 x i8> %b
152*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %t2
153*9880d681SAndroid Build Coastguard Worker}
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t20
156*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.u8 {{q[0-9]+}}, {{q[0-9]+}}, {{q[0-9]+}}
157*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @t20(<16 x i8> %a, <16 x i8> %b) {
158*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ult <16 x i8> %a, %b
159*9880d681SAndroid Build Coastguard Worker  %t2 = select <16 x i1> %t1, <16 x i8> %a, <16 x i8> %b
160*9880d681SAndroid Build Coastguard Worker  ret <16 x i8> %t2
161*9880d681SAndroid Build Coastguard Worker}
162*9880d681SAndroid Build Coastguard Worker
163*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t21
164*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.s8 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
165*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @t21(<8 x i8> %a, <8 x i8> %b) {
166*9880d681SAndroid Build Coastguard Worker  %t1 = icmp sgt <8 x i8> %a, %b
167*9880d681SAndroid Build Coastguard Worker  %t2 = select <8 x i1> %t1, <8 x i8> %a, <8 x i8> %b
168*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %t2
169*9880d681SAndroid Build Coastguard Worker}
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t22
172*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.s8 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
173*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @t22(<8 x i8> %a, <8 x i8> %b) {
174*9880d681SAndroid Build Coastguard Worker  %t1 = icmp slt <8 x i8> %a, %b
175*9880d681SAndroid Build Coastguard Worker  %t2 = select <8 x i1> %t1, <8 x i8> %a, <8 x i8> %b
176*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %t2
177*9880d681SAndroid Build Coastguard Worker}
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t23
180*9880d681SAndroid Build Coastguard Worker; CHECK: vmax.u8 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
181*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @t23(<8 x i8> %a, <8 x i8> %b) {
182*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ugt <8 x i8> %a, %b
183*9880d681SAndroid Build Coastguard Worker  %t2 = select <8 x i1> %t1, <8 x i8> %a, <8 x i8> %b
184*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %t2
185*9880d681SAndroid Build Coastguard Worker}
186*9880d681SAndroid Build Coastguard Worker
187*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: t24
188*9880d681SAndroid Build Coastguard Worker; CHECK: vmin.u8 {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
189*9880d681SAndroid Build Coastguard Workerdefine <8 x i8> @t24(<8 x i8> %a, <8 x i8> %b) {
190*9880d681SAndroid Build Coastguard Worker  %t1 = icmp ult <8 x i8> %a, %b
191*9880d681SAndroid Build Coastguard Worker  %t2 = select <8 x i1> %t1, <8 x i8> %a, <8 x i8> %b
192*9880d681SAndroid Build Coastguard Worker  ret <8 x i8> %t2
193*9880d681SAndroid Build Coastguard Worker}
194