Follow up to d0858bffa11, add missing REQUIRES x86
[llvm-project.git] / llvm / test / Transforms / InstSimplify / ConstProp / active-lane-mask.ll
blob4a879e837f8354abbc1205afde49bbe0dc86654c
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt -passes=instsimplify -S -o - %s | FileCheck %s
4 target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
6 define <16 x i1> @v16i1_0() {
7 ; CHECK-LABEL: @v16i1_0(
8 ; CHECK-NEXT:  entry:
9 ; CHECK-NEXT:    ret <16 x i1> zeroinitializer
11 entry:
12   %int = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 0, i32 0)
13   ret <16 x i1> %int
16 define <16 x i1> @v16i1_1() {
17 ; CHECK-LABEL: @v16i1_1(
18 ; CHECK-NEXT:  entry:
19 ; CHECK-NEXT:    ret <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>
21 entry:
22   %int = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 0, i32 1)
23   ret <16 x i1> %int
26 define <16 x i1> @v16i1_8() {
27 ; CHECK-LABEL: @v16i1_8(
28 ; CHECK-NEXT:  entry:
29 ; CHECK-NEXT:    ret <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>
31 entry:
32   %int = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 0, i32 8)
33   ret <16 x i1> %int
36 define <16 x i1> @v16i1_15() {
37 ; CHECK-LABEL: @v16i1_15(
38 ; CHECK-NEXT:  entry:
39 ; CHECK-NEXT:    ret <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false>
41 entry:
42   %int = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 0, i32 15)
43   ret <16 x i1> %int
46 define <16 x i1> @v16i1_16() {
47 ; CHECK-LABEL: @v16i1_16(
48 ; CHECK-NEXT:  entry:
49 ; CHECK-NEXT:    ret <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
51 entry:
52   %int = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 0, i32 16)
53   ret <16 x i1> %int
56 define <16 x i1> @v16i1_100() {
57 ; CHECK-LABEL: @v16i1_100(
58 ; CHECK-NEXT:  entry:
59 ; CHECK-NEXT:    ret <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
61 entry:
62   %int = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 0, i32 100)
63   ret <16 x i1> %int
66 define <16 x i1> @v16i1_m1() {
67 ; CHECK-LABEL: @v16i1_m1(
68 ; CHECK-NEXT:  entry:
69 ; CHECK-NEXT:    ret <16 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
71 entry:
72   %int = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 0, i32 -1)
73   ret <16 x i1> %int
76 define <16 x i1> @v16i1_10_11() {
77 ; CHECK-LABEL: @v16i1_10_11(
78 ; CHECK-NEXT:  entry:
79 ; CHECK-NEXT:    ret <16 x i1> <i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>
81 entry:
82   %int = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 10, i32 11)
83   ret <16 x i1> %int
86 define <16 x i1> @v16i1_12_11() {
87 ; CHECK-LABEL: @v16i1_12_11(
88 ; CHECK-NEXT:  entry:
89 ; CHECK-NEXT:    ret <16 x i1> zeroinitializer
91 entry:
92   %int = call <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32 12, i32 11)
93   ret <16 x i1> %int
98 define <8 x i1> @v8i1_0() {
99 ; CHECK-LABEL: @v8i1_0(
100 ; CHECK-NEXT:  entry:
101 ; CHECK-NEXT:    ret <8 x i1> zeroinitializer
103 entry:
104   %int = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 0, i32 0)
105   ret <8 x i1> %int
108 define <8 x i1> @v8i1_1() {
109 ; CHECK-LABEL: @v8i1_1(
110 ; CHECK-NEXT:  entry:
111 ; CHECK-NEXT:    ret <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>
113 entry:
114   %int = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 0, i32 1)
115   ret <8 x i1> %int
118 define <8 x i1> @v8i1_4() {
119 ; CHECK-LABEL: @v8i1_4(
120 ; CHECK-NEXT:  entry:
121 ; CHECK-NEXT:    ret <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false>
123 entry:
124   %int = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 0, i32 4)
125   ret <8 x i1> %int
128 define <8 x i1> @v8i1_7() {
129 ; CHECK-LABEL: @v8i1_7(
130 ; CHECK-NEXT:  entry:
131 ; CHECK-NEXT:    ret <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false>
133 entry:
134   %int = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 0, i32 7)
135   ret <8 x i1> %int
138 define <8 x i1> @v8i1_8() {
139 ; CHECK-LABEL: @v8i1_8(
140 ; CHECK-NEXT:  entry:
141 ; CHECK-NEXT:    ret <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
143 entry:
144   %int = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 0, i32 8)
145   ret <8 x i1> %int
148 define <8 x i1> @v8i1_100() {
149 ; CHECK-LABEL: @v8i1_100(
150 ; CHECK-NEXT:  entry:
151 ; CHECK-NEXT:    ret <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
153 entry:
154   %int = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 0, i32 100)
155   ret <8 x i1> %int
158 define <8 x i1> @v8i1_m1() {
159 ; CHECK-LABEL: @v8i1_m1(
160 ; CHECK-NEXT:  entry:
161 ; CHECK-NEXT:    ret <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
163 entry:
164   %int = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 0, i32 -1)
165   ret <8 x i1> %int
168 define <8 x i1> @v8i1_10_11() {
169 ; CHECK-LABEL: @v8i1_10_11(
170 ; CHECK-NEXT:  entry:
171 ; CHECK-NEXT:    ret <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>
173 entry:
174   %int = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 10, i32 11)
175   ret <8 x i1> %int
178 define <8 x i1> @v8i1_12_11() {
179 ; CHECK-LABEL: @v8i1_12_11(
180 ; CHECK-NEXT:  entry:
181 ; CHECK-NEXT:    ret <8 x i1> zeroinitializer
183 entry:
184   %int = call <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32 12, i32 11)
185   ret <8 x i1> %int
190 define <4 x i1> @v4i1_0() {
191 ; CHECK-LABEL: @v4i1_0(
192 ; CHECK-NEXT:  entry:
193 ; CHECK-NEXT:    ret <4 x i1> zeroinitializer
195 entry:
196   %int = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 0, i32 0)
197   ret <4 x i1> %int
200 define <4 x i1> @v4i1_1() {
201 ; CHECK-LABEL: @v4i1_1(
202 ; CHECK-NEXT:  entry:
203 ; CHECK-NEXT:    ret <4 x i1> <i1 true, i1 false, i1 false, i1 false>
205 entry:
206   %int = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 0, i32 1)
207   ret <4 x i1> %int
210 define <4 x i1> @v4i1_3() {
211 ; CHECK-LABEL: @v4i1_3(
212 ; CHECK-NEXT:  entry:
213 ; CHECK-NEXT:    ret <4 x i1> <i1 true, i1 true, i1 true, i1 false>
215 entry:
216   %int = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 0, i32 3)
217   ret <4 x i1> %int
220 define <4 x i1> @v4i1_4() {
221 ; CHECK-LABEL: @v4i1_4(
222 ; CHECK-NEXT:  entry:
223 ; CHECK-NEXT:    ret <4 x i1> <i1 true, i1 true, i1 true, i1 true>
225 entry:
226   %int = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 0, i32 4)
227   ret <4 x i1> %int
230 define <4 x i1> @v4i1_100() {
231 ; CHECK-LABEL: @v4i1_100(
232 ; CHECK-NEXT:  entry:
233 ; CHECK-NEXT:    ret <4 x i1> <i1 true, i1 true, i1 true, i1 true>
235 entry:
236   %int = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 0, i32 100)
237   ret <4 x i1> %int
240 define <4 x i1> @v4i1_m1() {
241 ; CHECK-LABEL: @v4i1_m1(
242 ; CHECK-NEXT:  entry:
243 ; CHECK-NEXT:    ret <4 x i1> <i1 true, i1 true, i1 true, i1 true>
245 entry:
246   %int = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 0, i32 -1)
247   ret <4 x i1> %int
250 define <4 x i1> @v4i1_10_11() {
251 ; CHECK-LABEL: @v4i1_10_11(
252 ; CHECK-NEXT:  entry:
253 ; CHECK-NEXT:    ret <4 x i1> <i1 true, i1 false, i1 false, i1 false>
255 entry:
256   %int = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 10, i32 11)
257   ret <4 x i1> %int
260 define <4 x i1> @v4i1_12_11() {
261 ; CHECK-LABEL: @v4i1_12_11(
262 ; CHECK-NEXT:  entry:
263 ; CHECK-NEXT:    ret <4 x i1> zeroinitializer
265 entry:
266   %int = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 12, i32 11)
267   ret <4 x i1> %int
272 define <4 x i1> @v4i1_nc1(i32 %x) {
273 ; CHECK-LABEL: @v4i1_nc1(
274 ; CHECK-NEXT:  entry:
275 ; CHECK-NEXT:    [[INT:%.*]] = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 [[X:%.*]], i32 11)
276 ; CHECK-NEXT:    ret <4 x i1> [[INT]]
278 entry:
279   %int = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %x, i32 11)
280   ret <4 x i1> %int
283 define <4 x i1> @v4i1_nc2(i32 %x) {
284 ; CHECK-LABEL: @v4i1_nc2(
285 ; CHECK-NEXT:  entry:
286 ; CHECK-NEXT:    [[INT:%.*]] = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 11, i32 [[X:%.*]])
287 ; CHECK-NEXT:    ret <4 x i1> [[INT]]
289 entry:
290   %int = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 11, i32 %x)
291   ret <4 x i1> %int
295 define <4 x float> @poisonc(<4 x float> %a, i32 %n) {
296 entry:
297   %new0 = shl i1 0, 1
298   %last = zext i1 %new0 to i32
299   %var27 = call <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32 %last, i32 1024)
300   %var33 = select <4 x i1> %var27, <4 x float> %a, <4 x float> zeroinitializer
301   ret <4 x float> %var33
304 declare <4 x i1> @llvm.get.active.lane.mask.v4i1.i32(i32, i32)
305 declare <8 x i1> @llvm.get.active.lane.mask.v8i1.i32(i32, i32)
306 declare <16 x i1> @llvm.get.active.lane.mask.v16i1.i32(i32, i32)