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> @vctp8_0() {
7 ; CHECK-LABEL: @vctp8_0(
9 ; CHECK-NEXT: ret <16 x i1> zeroinitializer
12 %int = call <16 x i1> @llvm.arm.mve.vctp8(i32 0)
16 define <16 x i1> @vctp8_1() {
17 ; CHECK-LABEL: @vctp8_1(
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>
22 %int = call <16 x i1> @llvm.arm.mve.vctp8(i32 1)
26 define <16 x i1> @vctp8_8() {
27 ; CHECK-LABEL: @vctp8_8(
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>
32 %int = call <16 x i1> @llvm.arm.mve.vctp8(i32 8)
36 define <16 x i1> @vctp8_15() {
37 ; CHECK-LABEL: @vctp8_15(
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>
42 %int = call <16 x i1> @llvm.arm.mve.vctp8(i32 15)
46 define <16 x i1> @vctp8_16() {
47 ; CHECK-LABEL: @vctp8_16(
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>
52 %int = call <16 x i1> @llvm.arm.mve.vctp8(i32 16)
56 define <16 x i1> @vctp8_100() {
57 ; CHECK-LABEL: @vctp8_100(
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>
62 %int = call <16 x i1> @llvm.arm.mve.vctp8(i32 100)
66 define <16 x i1> @vctp8_m1() {
67 ; CHECK-LABEL: @vctp8_m1(
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>
72 %int = call <16 x i1> @llvm.arm.mve.vctp8(i32 -1)
78 define <8 x i1> @vctp16_0() {
79 ; CHECK-LABEL: @vctp16_0(
81 ; CHECK-NEXT: ret <8 x i1> zeroinitializer
84 %int = call <8 x i1> @llvm.arm.mve.vctp16(i32 0)
88 define <8 x i1> @vctp16_1() {
89 ; CHECK-LABEL: @vctp16_1(
91 ; CHECK-NEXT: ret <8 x i1> <i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>
94 %int = call <8 x i1> @llvm.arm.mve.vctp16(i32 1)
98 define <8 x i1> @vctp16_4() {
99 ; CHECK-LABEL: @vctp16_4(
101 ; CHECK-NEXT: ret <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 false, i1 false, i1 false, i1 false>
104 %int = call <8 x i1> @llvm.arm.mve.vctp16(i32 4)
108 define <8 x i1> @vctp16_7() {
109 ; CHECK-LABEL: @vctp16_7(
111 ; CHECK-NEXT: ret <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 false>
114 %int = call <8 x i1> @llvm.arm.mve.vctp16(i32 7)
118 define <8 x i1> @vctp16_8() {
119 ; CHECK-LABEL: @vctp16_8(
121 ; CHECK-NEXT: ret <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
124 %int = call <8 x i1> @llvm.arm.mve.vctp16(i32 8)
128 define <8 x i1> @vctp16_100() {
129 ; CHECK-LABEL: @vctp16_100(
131 ; CHECK-NEXT: ret <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
134 %int = call <8 x i1> @llvm.arm.mve.vctp16(i32 100)
138 define <8 x i1> @vctp16_m1() {
139 ; CHECK-LABEL: @vctp16_m1(
141 ; CHECK-NEXT: ret <8 x i1> <i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true, i1 true>
144 %int = call <8 x i1> @llvm.arm.mve.vctp16(i32 -1)
150 define <4 x i1> @vctp32_0() {
151 ; CHECK-LABEL: @vctp32_0(
153 ; CHECK-NEXT: ret <4 x i1> zeroinitializer
156 %int = call <4 x i1> @llvm.arm.mve.vctp32(i32 0)
160 define <4 x i1> @vctp32_1() {
161 ; CHECK-LABEL: @vctp32_1(
163 ; CHECK-NEXT: ret <4 x i1> <i1 true, i1 false, i1 false, i1 false>
166 %int = call <4 x i1> @llvm.arm.mve.vctp32(i32 1)
170 define <4 x i1> @vctp32_3() {
171 ; CHECK-LABEL: @vctp32_3(
173 ; CHECK-NEXT: ret <4 x i1> <i1 true, i1 true, i1 true, i1 false>
176 %int = call <4 x i1> @llvm.arm.mve.vctp32(i32 3)
180 define <4 x i1> @vctp32_4() {
181 ; CHECK-LABEL: @vctp32_4(
183 ; CHECK-NEXT: ret <4 x i1> <i1 true, i1 true, i1 true, i1 true>
186 %int = call <4 x i1> @llvm.arm.mve.vctp32(i32 4)
190 define <4 x i1> @vctp32_100() {
191 ; CHECK-LABEL: @vctp32_100(
193 ; CHECK-NEXT: ret <4 x i1> <i1 true, i1 true, i1 true, i1 true>
196 %int = call <4 x i1> @llvm.arm.mve.vctp32(i32 100)
200 define <4 x i1> @vctp32_m1() {
201 ; CHECK-LABEL: @vctp32_m1(
203 ; CHECK-NEXT: ret <4 x i1> <i1 true, i1 true, i1 true, i1 true>
206 %int = call <4 x i1> @llvm.arm.mve.vctp32(i32 -1)
212 define <2 x i1> @vctp64_0() {
213 ; CHECK-LABEL: @vctp64_0(
215 ; CHECK-NEXT: ret <2 x i1> zeroinitializer
218 %int = call <2 x i1> @llvm.arm.mve.vctp64(i32 0)
222 define <2 x i1> @vctp64_1() {
223 ; CHECK-LABEL: @vctp64_1(
225 ; CHECK-NEXT: ret <2 x i1> <i1 true, i1 false>
228 %int = call <2 x i1> @llvm.arm.mve.vctp64(i32 1)
232 define <2 x i1> @vctp64_2() {
233 ; CHECK-LABEL: @vctp64_2(
235 ; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
238 %int = call <2 x i1> @llvm.arm.mve.vctp64(i32 2)
242 define <2 x i1> @vctp64_100() {
243 ; CHECK-LABEL: @vctp64_100(
245 ; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
248 %int = call <2 x i1> @llvm.arm.mve.vctp64(i32 100)
252 define <2 x i1> @vctp64_m1() {
253 ; CHECK-LABEL: @vctp64_m1(
255 ; CHECK-NEXT: ret <2 x i1> <i1 true, i1 true>
258 %int = call <2 x i1> @llvm.arm.mve.vctp64(i32 -1)
262 define <4 x float> @poisonc(<4 x float> %a) {
265 %last = zext i1 %new0 to i32
266 %var27 = call <4 x i1> @llvm.arm.mve.vctp32(i32 %last)
267 %var33 = select <4 x i1> %var27, <4 x float> %a, <4 x float> zeroinitializer
268 ret <4 x float> %var33
271 declare <2 x i1> @llvm.arm.mve.vctp64(i32)
272 declare <4 x i1> @llvm.arm.mve.vctp32(i32)
273 declare <8 x i1> @llvm.arm.mve.vctp16(i32)
274 declare <16 x i1> @llvm.arm.mve.vctp8(i32)