Skip to content

Commit 1b8ef6e

Browse files
committed
[AArch64] Add vector compare/select cost-model tests.
1 parent 286aaa0 commit 1b8ef6e

File tree

1 file changed

+154
-0
lines changed

1 file changed

+154
-0
lines changed
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
; RUN: opt < %s -mtriple=aarch64--linux-gnu -cost-model -analyze | FileCheck %s --check-prefix=COST
2+
; RUN: llc < %s -mtriple=aarch64--linux-gnu | FileCheck %s --check-prefix=CODE
3+
4+
; COST-LABEL: v8i8_select_eq
5+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %cmp.1 = icmp eq <8 x i8> %a, %b
6+
; COST-NEXT: Cost Model: Found an estimated cost of 29 for instruction: %s.1 = select <8 x i1> %cmp.1, <8 x i8> %a, <8 x i8> %c
7+
8+
; CODE-LABEL: v8i8_select_eq
9+
; CODE: bb.0
10+
; CODE-NEXT: cmeq v{{.+}}.8b, v{{.+}}.8b, v{{.+}}.8b
11+
; CODE-NEXT: bif v{{.+}}.8b, v{{.+}}.8b, v{{.+}}.8b
12+
; CODE-NEXT: ret
13+
14+
define <8 x i8> @v8i8_select_eq(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
15+
%cmp.1 = icmp eq <8 x i8> %a, %b
16+
%s.1 = select <8 x i1> %cmp.1, <8 x i8> %a, <8 x i8> %c
17+
ret <8 x i8> %s.1
18+
}
19+
20+
; COST-LABEL: v16i8_select_sgt
21+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %cmp.1 = icmp sgt <16 x i8> %a, %b
22+
; COST-NEXT: Cost Model: Found an estimated cost of 61 for instruction: %s.1 = select <16 x i1> %cmp.1, <16 x i8> %a, <16 x i8> %c
23+
24+
; CODE-LABEL: v16i8_select_sgt
25+
; CODE: bb.0
26+
; CODE-NEXT: cmgt v{{.+}}.16b, v{{.+}}.16b, v{{.+}}.16b
27+
; CODE-NEXT: bif v{{.+}}.16b, v{{.+}}.16b, v{{.+}}.16b
28+
; CODE-NEXT: ret
29+
30+
define <16 x i8> @v16i8_select_sgt(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c) {
31+
%cmp.1 = icmp sgt <16 x i8> %a, %b
32+
%s.1 = select <16 x i1> %cmp.1, <16 x i8> %a, <16 x i8> %c
33+
ret <16 x i8> %s.1
34+
}
35+
36+
; COST-LABEL: v4i16_select_ne
37+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %cmp.1 = icmp ne <4 x i16> %a, %b
38+
; COST-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %s.1 = select <4 x i1> %cmp.1, <4 x i16> %a, <4 x i16> %c
39+
40+
; CODE-LABEL: v4i16_select_ne
41+
; CODE: bb.0
42+
; CODE-NEXT: cmeq v{{.+}}.4h, v{{.+}}.4h, v{{.+}}.4h
43+
; CODE-NEXT: mvn v{{.+}}.8b, v{{.+}}.8b
44+
; CODE-NEXT: bif v{{.+}}.8b, v{{.+}}.8b, v{{.+}}.8b
45+
; CODE-NEXT: ret
46+
47+
define <4 x i16> @v4i16_select_ne(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c) {
48+
%cmp.1 = icmp ne <4 x i16> %a, %b
49+
%s.1 = select <4 x i1> %cmp.1, <4 x i16> %a, <4 x i16> %c
50+
ret <4 x i16> %s.1
51+
}
52+
53+
; COST-LABEL: v8i16_select_ugt
54+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %cmp.1 = icmp ugt <8 x i16> %a, %b
55+
; COST-NEXT: Cost Model: Found an estimated cost of 29 for instruction: %s.1 = select <8 x i1> %cmp.1, <8 x i16> %a, <8 x i16> %c
56+
57+
; CODE-LABEL: v8i16_select_ugt
58+
; CODE: bb.0
59+
; CODE-NEXT: cmhi v{{.+}}.8h, v{{.+}}.8h, v{{.+}}.8h
60+
; CODE-NEXT: bif v{{.+}}.16b, v{{.+}}.16b, v{{.+}}.16b
61+
; CODE-NEXT: ret
62+
63+
define <8 x i16> @v8i16_select_ugt(<8 x i16> %a, <8 x i16> %b, <8 x i16> %c) {
64+
%cmp.1 = icmp ugt <8 x i16> %a, %b
65+
%s.1 = select <8 x i1> %cmp.1, <8 x i16> %a, <8 x i16> %c
66+
ret <8 x i16> %s.1
67+
}
68+
69+
; COST-LABEL: v2i32_select_ule
70+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %cmp.1 = icmp ule <2 x i32> %a, %b
71+
; COST-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %s.1 = select <2 x i1> %cmp.1, <2 x i32> %a, <2 x i32> %c
72+
73+
; CODE-LABEL: v2i32_select_ule
74+
; CODE: bb.0
75+
; CODE-NEXT: cmhs v{{.+}}.2s, v{{.+}}.2s, v{{.+}}.2s
76+
; CODE-NEXT: bif v{{.+}}.8b, v{{.+}}.8b, v{{.+}}.8b
77+
; CODE-NEXT: ret
78+
79+
define <2 x i32> @v2i32_select_ule(<2 x i32> %a, <2 x i32> %b, <2 x i32> %c) {
80+
%cmp.1 = icmp ule <2 x i32> %a, %b
81+
%s.1 = select <2 x i1> %cmp.1, <2 x i32> %a, <2 x i32> %c
82+
ret <2 x i32> %s.1
83+
}
84+
85+
; COST-LABEL: v4i32_select_ult
86+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %cmp.1 = icmp ult <4 x i32> %a, %b
87+
; COST-NEXT: Cost Model: Found an estimated cost of 13 for instruction: %s.1 = select <4 x i1> %cmp.1, <4 x i32> %a, <4 x i32> %c
88+
89+
; CODE-LABEL: v4i32_select_ult
90+
; CODE: bb.0
91+
; CODE-NEXT: cmhi v{{.+}}.4s, v{{.+}}.4s, v{{.+}}.4s
92+
; CODE-NEXT: bif v{{.+}}.16b, v{{.+}}.16b, v{{.+}}.16b
93+
; CODE-NEXT: ret
94+
95+
define <4 x i32> @v4i32_select_ult(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c) {
96+
%cmp.1 = icmp ult <4 x i32> %a, %b
97+
%s.1 = select <4 x i1> %cmp.1, <4 x i32> %a, <4 x i32> %c
98+
ret <4 x i32> %s.1
99+
}
100+
101+
; COST-LABEL: v2i64_select_sle
102+
; COST-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %cmp.1 = icmp sle <2 x i64> %a, %b
103+
; COST-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %s.1 = select <2 x i1> %cmp.1, <2 x i64> %a, <2 x i64> %c
104+
105+
; CODE-LABEL: v2i64_select_sle
106+
; CODE: bb.0
107+
; CODE-NEXT: cmge v{{.+}}.2d, v{{.+}}.2d, v{{.+}}.2d
108+
; CODE-NEXT: bif v{{.+}}.16b, v{{.+}}.16b, v{{.+}}.16b
109+
; CODE-NEXT: ret
110+
111+
define <2 x i64> @v2i64_select_sle(<2 x i64> %a, <2 x i64> %b, <2 x i64> %c) {
112+
%cmp.1 = icmp sle <2 x i64> %a, %b
113+
%s.1 = select <2 x i1> %cmp.1, <2 x i64> %a, <2 x i64> %c
114+
ret <2 x i64> %s.1
115+
}
116+
117+
; COST-LABEL: v3i64_select_sle
118+
; COST-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %cmp.1 = icmp sle <3 x i64> %a, %b
119+
; COST-NEXT: Cost Model: Found an estimated cost of 6 for instruction: %s.1 = select <3 x i1> %cmp.1, <3 x i64> %a, <3 x i64> %c
120+
121+
; CODE-LABEL: v3i64_select_sle
122+
; CODE: bb.0
123+
; CODE: ldr
124+
; CODE: mov
125+
; CODE: mov
126+
; CODE: mov
127+
; CODE: cmge
128+
; CODE: cmge
129+
; CODE: bif
130+
; CODE: ext
131+
; CODE: bif
132+
; CODE: ret
133+
134+
define <3 x i64> @v3i64_select_sle(<3 x i64> %a, <3 x i64> %b, <3 x i64> %c) {
135+
%cmp.1 = icmp sle <3 x i64> %a, %b
136+
%s.1 = select <3 x i1> %cmp.1, <3 x i64> %a, <3 x i64> %c
137+
ret <3 x i64> %s.1
138+
}
139+
140+
; COST-LABEL: v2i64_select_no_cmp
141+
; COST-NEXT: Cost Model: Found an estimated cost of 5 for instruction: %s.1 = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
142+
143+
; CODE-LABEL: v2i64_select_no_cmp
144+
; CODE: bb.0
145+
; CODE-NEXT: ushll v{{.+}}.2d, v{{.+}}.2s, #0
146+
; CODE-NEXT: shl v{{.+}}.2d, v{{.+}}.2d, #63
147+
; CODE-NEXT: sshr v{{.+}}.2d, v{{.+}}.2d, #63
148+
; CODE-NEXT: bif v{{.+}}.16b, v{{.+}}.16b, v{{.+}}.16b
149+
; CODE-NEXT: ret
150+
151+
define <2 x i64> @v2i64_select_no_cmp(<2 x i64> %a, <2 x i64> %b, <2 x i1> %cond) {
152+
%s.1 = select <2 x i1> %cond, <2 x i64> %a, <2 x i64> %b
153+
ret <2 x i64> %s.1
154+
}

0 commit comments

Comments
 (0)