Skip to content

Commit 8562d2c

Browse files
committed
[AArch64] Regenerate min/max tests and add vXi64 umin/umax test coverage
1 parent 0e49a40 commit 8562d2c

File tree

1 file changed

+93
-29
lines changed

1 file changed

+93
-29
lines changed

llvm/test/CodeGen/AArch64/minmax.ll

Lines changed: 93 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,171 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
12
; RUN: llc < %s -mtriple=aarch64-linux-gnu | FileCheck %s
23

3-
; CHECK-LABEL: t1
4-
; CHECK: smax
54
define <4 x i32> @t1(<4 x i32> %a, <4 x i32> %b) {
5+
; CHECK-LABEL: t1:
6+
; CHECK: // %bb.0:
7+
; CHECK-NEXT: smax v0.4s, v0.4s, v1.4s
8+
; CHECK-NEXT: ret
69
%t1 = icmp sgt <4 x i32> %a, %b
710
%t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
811
ret <4 x i32> %t2
912
}
1013

11-
; CHECK-LABEL: t2
12-
; CHECK: smin
1314
define <4 x i32> @t2(<4 x i32> %a, <4 x i32> %b) {
15+
; CHECK-LABEL: t2:
16+
; CHECK: // %bb.0:
17+
; CHECK-NEXT: smin v0.4s, v0.4s, v1.4s
18+
; CHECK-NEXT: ret
1419
%t1 = icmp slt <4 x i32> %a, %b
1520
%t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
1621
ret <4 x i32> %t2
1722
}
1823

19-
; CHECK-LABEL: t3
20-
; CHECK: umax
2124
define <4 x i32> @t3(<4 x i32> %a, <4 x i32> %b) {
25+
; CHECK-LABEL: t3:
26+
; CHECK: // %bb.0:
27+
; CHECK-NEXT: umax v0.4s, v0.4s, v1.4s
28+
; CHECK-NEXT: ret
2229
%t1 = icmp ugt <4 x i32> %a, %b
2330
%t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
2431
ret <4 x i32> %t2
2532
}
2633

27-
; CHECK-LABEL: t4
28-
; CHECK: umin
2934
define <8 x i8> @t4(<8 x i8> %a, <8 x i8> %b) {
35+
; CHECK-LABEL: t4:
36+
; CHECK: // %bb.0:
37+
; CHECK-NEXT: umin v0.8b, v0.8b, v1.8b
38+
; CHECK-NEXT: ret
3039
%t1 = icmp ult <8 x i8> %a, %b
3140
%t2 = select <8 x i1> %t1, <8 x i8> %a, <8 x i8> %b
3241
ret <8 x i8> %t2
3342
}
3443

35-
; CHECK-LABEL: t5
36-
; CHECK: smin
3744
define <4 x i16> @t5(<4 x i16> %a, <4 x i16> %b) {
45+
; CHECK-LABEL: t5:
46+
; CHECK: // %bb.0:
47+
; CHECK-NEXT: smin v0.4h, v1.4h, v0.4h
48+
; CHECK-NEXT: ret
3849
%t1 = icmp sgt <4 x i16> %b, %a
3950
%t2 = select <4 x i1> %t1, <4 x i16> %a, <4 x i16> %b
4051
ret <4 x i16> %t2
4152
}
4253

43-
; CHECK-LABEL: t6
44-
; CHECK: smax
4554
define <2 x i32> @t6(<2 x i32> %a, <2 x i32> %b) {
55+
; CHECK-LABEL: t6:
56+
; CHECK: // %bb.0:
57+
; CHECK-NEXT: smax v0.2s, v1.2s, v0.2s
58+
; CHECK-NEXT: ret
4659
%t1 = icmp slt <2 x i32> %b, %a
4760
%t2 = select <2 x i1> %t1, <2 x i32> %a, <2 x i32> %b
4861
ret <2 x i32> %t2
4962
}
5063

51-
; CHECK-LABEL: t7
52-
; CHECK: umin
5364
define <16 x i8> @t7(<16 x i8> %a, <16 x i8> %b) {
65+
; CHECK-LABEL: t7:
66+
; CHECK: // %bb.0:
67+
; CHECK-NEXT: umin v0.16b, v1.16b, v0.16b
68+
; CHECK-NEXT: ret
5469
%t1 = icmp ugt <16 x i8> %b, %a
5570
%t2 = select <16 x i1> %t1, <16 x i8> %a, <16 x i8> %b
5671
ret <16 x i8> %t2
5772
}
5873

59-
; CHECK-LABEL: t8
60-
; CHECK: umax
6174
define <8 x i16> @t8(<8 x i16> %a, <8 x i16> %b) {
75+
; CHECK-LABEL: t8:
76+
; CHECK: // %bb.0:
77+
; CHECK-NEXT: umax v0.8h, v1.8h, v0.8h
78+
; CHECK-NEXT: ret
6279
%t1 = icmp ult <8 x i16> %b, %a
6380
%t2 = select <8 x i1> %t1, <8 x i16> %a, <8 x i16> %b
6481
ret <8 x i16> %t2
6582
}
6683

67-
; CHECK-LABEL: t9
68-
; CHECK: umin
69-
; CHECK: smax
7084
define <4 x i32> @t9(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
85+
; CHECK-LABEL: t9:
86+
; CHECK: // %bb.0:
87+
; CHECK-NEXT: umin v0.4s, v1.4s, v0.4s
88+
; CHECK-NEXT: smax v0.4s, v0.4s, v2.4s
89+
; CHECK-NEXT: ret
7190
%t1 = icmp ugt <4 x i32> %b, %a
7291
%t2 = select <4 x i1> %t1, <4 x i32> %a, <4 x i32> %b
7392
%t3 = icmp sge <4 x i32> %t2, %c
7493
%t4 = select <4 x i1> %t3, <4 x i32> %t2, <4 x i32> %c
7594
ret <4 x i32> %t4
7695
}
7796

78-
; CHECK-LABEL: t10
79-
; CHECK: smax
80-
; CHECK: smax
8197
define <8 x i32> @t10(<8 x i32> %a, <8 x i32> %b) {
98+
; CHECK-LABEL: t10:
99+
; CHECK: // %bb.0:
100+
; CHECK-NEXT: smax v0.4s, v0.4s, v2.4s
101+
; CHECK-NEXT: smax v1.4s, v1.4s, v3.4s
102+
; CHECK-NEXT: ret
82103
%t1 = icmp sgt <8 x i32> %a, %b
83104
%t2 = select <8 x i1> %t1, <8 x i32> %a, <8 x i32> %b
84105
ret <8 x i32> %t2
85106
}
86107

87-
; CHECK-LABEL: t11
88-
; CHECK: smin
89-
; CHECK: smin
90-
; CHECK: smin
91-
; CHECK: smin
92108
define <16 x i32> @t11(<16 x i32> %a, <16 x i32> %b) {
109+
; CHECK-LABEL: t11:
110+
; CHECK: // %bb.0:
111+
; CHECK-NEXT: smin v0.4s, v0.4s, v4.4s
112+
; CHECK-NEXT: smin v1.4s, v1.4s, v5.4s
113+
; CHECK-NEXT: smin v2.4s, v2.4s, v6.4s
114+
; CHECK-NEXT: smin v3.4s, v3.4s, v7.4s
115+
; CHECK-NEXT: ret
93116
%t1 = icmp sle <16 x i32> %a, %b
94117
%t2 = select <16 x i1> %t1, <16 x i32> %a, <16 x i32> %b
95118
ret <16 x i32> %t2
96119
}
97120

98-
; CHECK-LABEL: t12
99-
; CHECK-NOT: umin
100121
; The icmp is used by two instructions, so don't produce a umin node.
101122
define <16 x i8> @t12(<16 x i8> %a, <16 x i8> %b) {
123+
; CHECK-LABEL: t12:
124+
; CHECK: // %bb.0:
125+
; CHECK-NEXT: cmhi v2.16b, v1.16b, v0.16b
126+
; CHECK-NEXT: movi v3.16b, #1
127+
; CHECK-NEXT: bif v0.16b, v1.16b, v2.16b
128+
; CHECK-NEXT: and v1.16b, v2.16b, v3.16b
129+
; CHECK-NEXT: add v0.16b, v1.16b, v0.16b
130+
; CHECK-NEXT: ret
102131
%t1 = icmp ugt <16 x i8> %b, %a
103132
%t2 = select <16 x i1> %t1, <16 x i8> %a, <16 x i8> %b
104133
%t3 = zext <16 x i1> %t1 to <16 x i8>
105134
%t4 = add <16 x i8> %t3, %t2
106135
ret <16 x i8> %t4
107136
}
137+
138+
define <1 x i64> @t13(<1 x i64> %a, <1 x i64> %b) {
139+
; CHECK-LABEL: t13:
140+
; CHECK: // %bb.0:
141+
; CHECK-NEXT: cmhi d2, d1, d0
142+
; CHECK-NEXT: bif v0.8b, v1.8b, v2.8b
143+
; CHECK-NEXT: ret
144+
%t1 = icmp ult <1 x i64> %a, %b
145+
%t2 = select <1 x i1> %t1, <1 x i64> %a, <1 x i64> %b
146+
ret <1 x i64> %t2
147+
}
148+
149+
define <2 x i64> @t14(<2 x i64> %a, <2 x i64> %b) {
150+
; CHECK-LABEL: t14:
151+
; CHECK: // %bb.0:
152+
; CHECK-NEXT: cmhi v2.2d, v0.2d, v1.2d
153+
; CHECK-NEXT: bif v0.16b, v1.16b, v2.16b
154+
; CHECK-NEXT: ret
155+
%t1 = icmp ugt <2 x i64> %a, %b
156+
%t2 = select <2 x i1> %t1, <2 x i64> %a, <2 x i64> %b
157+
ret <2 x i64> %t2
158+
}
159+
160+
define <4 x i64> @t15(<4 x i64> %a, <4 x i64> %b) {
161+
; CHECK-LABEL: t15:
162+
; CHECK: // %bb.0:
163+
; CHECK-NEXT: cmhs v4.2d, v3.2d, v1.2d
164+
; CHECK-NEXT: cmhs v5.2d, v2.2d, v0.2d
165+
; CHECK-NEXT: bif v0.16b, v2.16b, v5.16b
166+
; CHECK-NEXT: bif v1.16b, v3.16b, v4.16b
167+
; CHECK-NEXT: ret
168+
%t1 = icmp ule <4 x i64> %a, %b
169+
%t2 = select <4 x i1> %t1, <4 x i64> %a, <4 x i64> %b
170+
ret <4 x i64> %t2
171+
}

0 commit comments

Comments
 (0)