[OpenACC] Enable 'attach' clause for combined constructs
[llvm-project.git] / llvm / test / CodeGen / Hexagon / isel-memory-vNi1.ll
blob2eecfa9f47f176ca20d59e8a8524e7a4ce038a78
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -march=hexagon < %s | FileCheck %s
4 define i64 @f0(ptr %a0, <8 x i8> %a1) #0 {
5 ; CHECK-LABEL: f0:
6 ; CHECK:       // %bb.0: // %b0
7 ; CHECK-NEXT:    {
8 ; CHECK-NEXT:     r0 = memub(r0+#0)
9 ; CHECK-NEXT:    }
10 ; CHECK-NEXT:    {
11 ; CHECK-NEXT:     r5:4 = combine(#0,#0)
12 ; CHECK-NEXT:    }
13 ; CHECK-NEXT:    {
14 ; CHECK-NEXT:     p0 = r0
15 ; CHECK-NEXT:    }
16 ; CHECK-NEXT:    {
17 ; CHECK-NEXT:     r1:0 = vmux(p0,r3:2,r5:4)
18 ; CHECK-NEXT:    }
19 ; CHECK-NEXT:    {
20 ; CHECK-NEXT:     jumpr r31
21 ; CHECK-NEXT:    }
22 b0:
23   %v0 = load <8 x i1>, ptr %a0, align 1
24   %v1 = select <8 x i1> %v0, <8 x i8> %a1, <8 x i8> zeroinitializer
25   %v2 = bitcast <8 x i8> %v1 to i64
26   ret i64 %v2
29 define i32 @f1(ptr %a0, <4 x i8> %a1) #0 {
30 ; CHECK-LABEL: f1:
31 ; CHECK:       // %bb.0: // %b0
32 ; CHECK-NEXT:    {
33 ; CHECK-NEXT:     r0 = memub(r0+#0)
34 ; CHECK-NEXT:    }
35 ; CHECK-NEXT:    {
36 ; CHECK-NEXT:     r3:2 = combine(#0,#0)
37 ; CHECK-NEXT:    }
38 ; CHECK-NEXT:    {
39 ; CHECK-NEXT:     r5:4 = vzxtbh(r1)
40 ; CHECK-NEXT:    }
41 ; CHECK-NEXT:    {
42 ; CHECK-NEXT:     p0 = r0
43 ; CHECK-NEXT:    }
44 ; CHECK-NEXT:    {
45 ; CHECK-NEXT:     r1:0 = vmux(p0,r5:4,r3:2)
46 ; CHECK-NEXT:    }
47 ; CHECK-NEXT:    {
48 ; CHECK-NEXT:     r0 = vtrunehb(r1:0)
49 ; CHECK-NEXT:    }
50 ; CHECK-NEXT:    {
51 ; CHECK-NEXT:     jumpr r31
52 ; CHECK-NEXT:    }
53 b0:
54   %v0 = load <4 x i1>, ptr %a0, align 1
55   %v1 = select <4 x i1> %v0, <4 x i8> %a1, <4 x i8> zeroinitializer
56   %v2 = bitcast <4 x i8> %v1 to i32
57   ret i32 %v2
60 define i16 @f2(ptr %a0, <2 x i8> %a1) #0 {
61 ; CHECK-LABEL: f2:
62 ; CHECK:       // %bb.0: // %b0
63 ; CHECK-NEXT:    {
64 ; CHECK-NEXT:     r0 = memub(r0+#0)
65 ; CHECK-NEXT:    }
66 ; CHECK-NEXT:    {
67 ; CHECK-NEXT:     p1 = tstbit(r0,#4)
68 ; CHECK-NEXT:    }
69 ; CHECK-NEXT:    {
70 ; CHECK-NEXT:     p0 = r0
71 ; CHECK-NEXT:    }
72 ; CHECK-NEXT:    {
73 ; CHECK-NEXT:     r1 = mux(p1,r3,#0)
74 ; CHECK-NEXT:    }
75 ; CHECK-NEXT:    {
76 ; CHECK-NEXT:     r0 = mux(p0,r2,#0)
77 ; CHECK-NEXT:    }
78 ; CHECK-NEXT:    {
79 ; CHECK-NEXT:     r0 = insert(r1,#24,#8)
80 ; CHECK-NEXT:    }
81 ; CHECK-NEXT:    {
82 ; CHECK-NEXT:     jumpr r31
83 ; CHECK-NEXT:    }
84 b0:
85   %v0 = load <2 x i1>, ptr %a0, align 1
86   %v1 = select <2 x i1> %v0, <2 x i8> %a1, <2 x i8> zeroinitializer
87   %v2 = bitcast <2 x i8> %v1 to i16
88   ret i16 %v2
91 define i8 @f3(ptr %a0, <1 x i8> %a1) #0 {
92 ; CHECK-LABEL: f3:
93 ; CHECK:       // %bb.0: // %b0
94 ; CHECK-NEXT:    {
95 ; CHECK-NEXT:     r0 = memub(r0+#0)
96 ; CHECK-NEXT:    }
97 ; CHECK-NEXT:    {
98 ; CHECK-NEXT:     p0 = r0
99 ; CHECK-NEXT:    }
100 ; CHECK-NEXT:    {
101 ; CHECK-NEXT:     r0 = mux(p0,r1,#0)
102 ; CHECK-NEXT:    }
103 ; CHECK-NEXT:    {
104 ; CHECK-NEXT:     jumpr r31
105 ; CHECK-NEXT:    }
107   %v0 = load <1 x i1>, ptr %a0, align 1
108   %v1 = select <1 x i1> %v0, <1 x i8> %a1, <1 x i8> zeroinitializer
109   %v2 = bitcast <1 x i8> %v1 to i8
110   ret i8 %v2
113 define void @f4(ptr %a0, i64 %a1) #0 {
114 ; CHECK-LABEL: f4:
115 ; CHECK:       // %bb.0: // %b0
116 ; CHECK-NEXT:    {
117 ; CHECK-NEXT:     r5:4 = combine(#0,#0)
118 ; CHECK-NEXT:    }
119 ; CHECK-NEXT:    {
120 ; CHECK-NEXT:     p0 = vcmpb.eq(r3:2,r5:4)
121 ; CHECK-NEXT:    }
122 ; CHECK-NEXT:    {
123 ; CHECK-NEXT:     p0 = not(p0)
124 ; CHECK-NEXT:    }
125 ; CHECK-NEXT:    {
126 ; CHECK-NEXT:     r1 = p0
127 ; CHECK-NEXT:    }
128 ; CHECK-NEXT:    {
129 ; CHECK-NEXT:     memb(r0+#0) = r1
130 ; CHECK-NEXT:    }
131 ; CHECK-NEXT:    {
132 ; CHECK-NEXT:     jumpr r31
133 ; CHECK-NEXT:    }
135   %v0 = bitcast i64 %a1 to <8 x i8>
136   %v1 = icmp ne <8 x i8> %v0, zeroinitializer
137   store <8 x i1> %v1, ptr %a0, align 1
138   ret void
141 define void @f5(ptr %a0, i32 %a1) #0 {
142 ; CHECK-LABEL: f5:
143 ; CHECK:       // %bb.0: // %b0
144 ; CHECK-NEXT:    {
145 ; CHECK-NEXT:     r3:2 = vsxtbh(r1)
146 ; CHECK-NEXT:    }
147 ; CHECK-NEXT:    {
148 ; CHECK-NEXT:     r5:4 = combine(#0,#0)
149 ; CHECK-NEXT:    }
150 ; CHECK-NEXT:    {
151 ; CHECK-NEXT:     p0 = vcmph.eq(r3:2,r5:4)
152 ; CHECK-NEXT:    }
153 ; CHECK-NEXT:    {
154 ; CHECK-NEXT:     p0 = not(p0)
155 ; CHECK-NEXT:    }
156 ; CHECK-NEXT:    {
157 ; CHECK-NEXT:     r2 = p0
158 ; CHECK-NEXT:    }
159 ; CHECK-NEXT:    {
160 ; CHECK-NEXT:     memb(r0+#0) = r2
161 ; CHECK-NEXT:    }
162 ; CHECK-NEXT:    {
163 ; CHECK-NEXT:     jumpr r31
164 ; CHECK-NEXT:    }
166   %v0 = bitcast i32 %a1 to <4 x i8>
167   %v1 = icmp ne <4 x i8> %v0, zeroinitializer
168   store <4 x i1> %v1, ptr %a0, align 1
169   ret void
172 define void @f6(ptr %a0, i16 %a1) #0 {
173 ; CHECK-LABEL: f6:
174 ; CHECK:       // %bb.0: // %b0
175 ; CHECK-NEXT:    {
176 ; CHECK-NEXT:     r2 = extractu(r1,#8,#8)
177 ; CHECK-NEXT:    }
178 ; CHECK-NEXT:    {
179 ; CHECK-NEXT:     r3 = #255
180 ; CHECK-NEXT:    }
181 ; CHECK-NEXT:    {
182 ; CHECK-NEXT:     p1 = !bitsclr(r1,r3)
183 ; CHECK-NEXT:    }
184 ; CHECK-NEXT:    {
185 ; CHECK-NEXT:     p0 = cmp.eq(r2,#0)
186 ; CHECK-NEXT:    }
187 ; CHECK-NEXT:    {
188 ; CHECK-NEXT:     if (p0) r2 = #0
189 ; CHECK-NEXT:    }
190 ; CHECK-NEXT:    {
191 ; CHECK-NEXT:     r1 = mux(p1,#8,#0)
192 ; CHECK-NEXT:    }
193 ; CHECK-NEXT:    {
194 ; CHECK-NEXT:     r3 = mux(p1,#2,#0)
195 ; CHECK-NEXT:    }
196 ; CHECK-NEXT:    {
197 ; CHECK-NEXT:     r5 = setbit(r1,#2)
198 ; CHECK-NEXT:    }
199 ; CHECK-NEXT:    {
200 ; CHECK-NEXT:     r6 = setbit(r3,#0)
201 ; CHECK-NEXT:    }
202 ; CHECK-NEXT:    {
203 ; CHECK-NEXT:     if (!p0) r2 = #128
204 ; CHECK-NEXT:    }
205 ; CHECK-NEXT:    {
206 ; CHECK-NEXT:     r4 = mux(p0,#0,#32)
207 ; CHECK-NEXT:    }
208 ; CHECK-NEXT:    {
209 ; CHECK-NEXT:     if (!p1) r5 = add(r1,#0)
210 ; CHECK-NEXT:    }
211 ; CHECK-NEXT:    {
212 ; CHECK-NEXT:     if (!p1) r6 = add(r3,#0)
213 ; CHECK-NEXT:    }
214 ; CHECK-NEXT:    {
215 ; CHECK-NEXT:     r1 = setbit(r2,#6)
216 ; CHECK-NEXT:    }
217 ; CHECK-NEXT:    {
218 ; CHECK-NEXT:     r3 = setbit(r4,#4)
219 ; CHECK-NEXT:    }
220 ; CHECK-NEXT:    {
221 ; CHECK-NEXT:     r5 = or(r6,r5)
222 ; CHECK-NEXT:    }
223 ; CHECK-NEXT:    {
224 ; CHECK-NEXT:     if (!p0) r2 = add(r1,#0)
225 ; CHECK-NEXT:    }
226 ; CHECK-NEXT:    {
227 ; CHECK-NEXT:     if (!p0) r4 = add(r3,#0)
228 ; CHECK-NEXT:    }
229 ; CHECK-NEXT:    {
230 ; CHECK-NEXT:     r5 |= or(r4,r2)
231 ; CHECK-NEXT:    }
232 ; CHECK-NEXT:    {
233 ; CHECK-NEXT:     memb(r0+#0) = r5
234 ; CHECK-NEXT:    }
235 ; CHECK-NEXT:    {
236 ; CHECK-NEXT:     jumpr r31
237 ; CHECK-NEXT:    }
239   %v0 = bitcast i16 %a1 to <2 x i8>
240   %v1 = icmp ne <2 x i8> %v0, zeroinitializer
241   store <2 x i1> %v1, ptr %a0, align 1
242   ret void
245 define void @f7(ptr %a0, i8 %a1) #0 {
246 ; CHECK-LABEL: f7:
247 ; CHECK:       // %bb.0: // %b0
248 ; CHECK-NEXT:    {
249 ; CHECK-NEXT:     r2 = #255
250 ; CHECK-NEXT:    }
251 ; CHECK-NEXT:    {
252 ; CHECK-NEXT:     p0 = !bitsclr(r1,r2)
253 ; CHECK-NEXT:    }
254 ; CHECK-NEXT:    {
255 ; CHECK-NEXT:     r1 = mux(p0,#1,#0)
256 ; CHECK-NEXT:    }
257 ; CHECK-NEXT:    {
258 ; CHECK-NEXT:     memb(r0+#0) = r1
259 ; CHECK-NEXT:    }
260 ; CHECK-NEXT:    {
261 ; CHECK-NEXT:     jumpr r31
262 ; CHECK-NEXT:    }
264   %v0 = bitcast i8 %a1 to <1 x i8>
265   %v1 = icmp ne <1 x i8> %v0, zeroinitializer
266   store <1 x i1> %v1, ptr %a0, align 1
267   ret void
270 attributes #0 = { nounwind "target-features"="-packets" }