Skip to content

Commit 66598fe

Browse files
committed
Revert "Generalize fold a little"
This reverts commit c58cd9c.
1 parent 1d7a0dc commit 66598fe

File tree

2 files changed

+116
-125
lines changed

2 files changed

+116
-125
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -24735,7 +24735,10 @@ static SDValue skipElementSizePreservingCast(SDValue Op, EVT VT) {
2473524735
static SDValue performZIP1Combine(SDNode *N, SelectionDAG &DAG) {
2473624736
SDLoc DL(N);
2473724737
EVT VT = N->getValueType(0);
24738-
EVT EltVT = VT.getVectorElementType();
24738+
24739+
// zip1(insert_vector_elt(undef, extract_vector_elt(vec, 0), 0),
24740+
// insert_vector_elt(undef, extract_vector_elt(vec, 1), 0))
24741+
// -> vec
2473924742
SDValue Op0 = skipElementSizePreservingCast(N->getOperand(0), VT);
2474024743
SDValue Op1 = skipElementSizePreservingCast(N->getOperand(1), VT);
2474124744
if (Op0 && Op1 && Op0->getOpcode() == ISD::INSERT_VECTOR_ELT &&
@@ -24748,51 +24751,17 @@ static SDValue performZIP1Combine(SDNode *N, SelectionDAG &DAG) {
2474824751
SDValue Op01 = Op0->getOperand(1);
2474924752
SDValue Op11 = Op1->getOperand(1);
2475024753
if (Op01->getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
24751-
Op11->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
24754+
Op11->getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
24755+
Op01->getConstantOperandVal(1) == 0 &&
24756+
Op11->getConstantOperandVal(1) == 1) {
2475224757
SDValue Op010 = skipElementSizePreservingCast(Op01->getOperand(0), VT);
2475324758
SDValue Op110 = skipElementSizePreservingCast(Op11->getOperand(0), VT);
24754-
unsigned StartExtractIdx = Op01->getConstantOperandVal(1);
24755-
if (Op010 && Op010 == Op110 &&
24756-
Op11->getConstantOperandVal(1) == StartExtractIdx + 1 &&
24757-
StartExtractIdx % 2 == 0) {
24758-
// t0: nxv16i8 = ...
24759-
// t1: i32 = extract_vector_elt t0, Constant:i64<n>
24760-
// t2: i32 = extract_vector_elt t0, Constant:i64<n + 1>
24761-
// t3: nxv16i8 = insert_vector_elt(undef, t1, 0)
24762-
// t4: nxv16i8 = insert_vector_elt(undef, t2, 0)
24763-
// t5: nxv16i8 = zip1(t3, t4)
24764-
//
24765-
// ->
24766-
// t0: nxv16i8 = ...
24767-
// t1: nxv8i16 = bitcast t0
24768-
// t2: i32 = extract_vector_elt t1, Constant:i64<n / 2>
24769-
// t3: nxv8i16 = insert_vector_elt(undef, t2, 0)
24770-
// t4: nxv16i8 = bitcast t3
24771-
//
24772-
// Where n % 2 == 0
24773-
SDValue Result;
24774-
if (StartExtractIdx == 0)
24775-
Result = Op010;
24776-
else if (EltVT.getSizeInBits() < 64) {
24777-
unsigned LargeEltBits = EltVT.getSizeInBits() * 2;
24778-
EVT LargeEltVT = MVT::getVectorVT(
24779-
MVT::getIntegerVT(LargeEltBits),
24780-
VT.getVectorElementCount().divideCoefficientBy(2));
24781-
EVT ExtractVT = MVT::getIntegerVT(std::max(LargeEltBits, 32U));
24782-
SDValue Extract =
24783-
DAG.getNode(ISD::EXTRACT_VECTOR_ELT, DL, ExtractVT,
24784-
DAG.getBitcast(LargeEltVT, Op010),
24785-
DAG.getVectorIdxConstant(StartExtractIdx / 2, DL));
24786-
Result = DAG.getNode(ISD::INSERT_VECTOR_ELT, DL, LargeEltVT,
24787-
DAG.getUNDEF(LargeEltVT), Extract,
24788-
DAG.getVectorIdxConstant(0, DL));
24789-
}
24790-
if (Result)
24791-
return DAG.getBitcast(VT, Result);
24792-
}
24759+
if (Op010 && Op010 == Op110)
24760+
return DAG.getBitcast(VT, Op010);
2479324761
}
2479424762
}
2479524763
}
24764+
2479624765
return SDValue();
2479724766
}
2479824767

llvm/test/CodeGen/AArch64/sve-fixed-length-vector-shuffle-tbl.ll

Lines changed: 106 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -140,52 +140,64 @@ define <8 x i8> @shuffle_index_indices_from_both_ops(ptr %a, ptr %b) {
140140
;
141141
; SVE2_128_NOMAX-LABEL: shuffle_index_indices_from_both_ops:
142142
; SVE2_128_NOMAX: // %bb.0:
143-
; SVE2_128_NOMAX-NEXT: ldr d0, [x0]
144-
; SVE2_128_NOMAX-NEXT: ldr d1, [x1]
145-
; SVE2_128_NOMAX-NEXT: mov z2.b, z1.b[4]
146-
; SVE2_128_NOMAX-NEXT: mov z3.b, z1.b[1]
147-
; SVE2_128_NOMAX-NEXT: mov z0.b, z0.b[1]
148-
; SVE2_128_NOMAX-NEXT: mov z4.h, z1.h[3]
149-
; SVE2_128_NOMAX-NEXT: mov z1.h, z1.h[1]
150-
; SVE2_128_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
151-
; SVE2_128_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
152-
; SVE2_128_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
153-
; SVE2_128_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
154-
; SVE2_128_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
143+
; SVE2_128_NOMAX-NEXT: ldr d0, [x1]
144+
; SVE2_128_NOMAX-NEXT: ldr d1, [x0]
145+
; SVE2_128_NOMAX-NEXT: mov z2.b, z0.b[3]
146+
; SVE2_128_NOMAX-NEXT: mov z3.b, z0.b[2]
147+
; SVE2_128_NOMAX-NEXT: mov z4.b, z0.b[1]
148+
; SVE2_128_NOMAX-NEXT: mov z1.b, z1.b[1]
149+
; SVE2_128_NOMAX-NEXT: mov z5.b, z0.b[7]
150+
; SVE2_128_NOMAX-NEXT: mov z6.b, z0.b[6]
151+
; SVE2_128_NOMAX-NEXT: mov z0.b, z0.b[4]
152+
; SVE2_128_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
153+
; SVE2_128_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
154+
; SVE2_128_NOMAX-NEXT: zip1 z3.b, z6.b, z5.b
155+
; SVE2_128_NOMAX-NEXT: zip1 z0.b, z0.b, z0.b
156+
; SVE2_128_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
157+
; SVE2_128_NOMAX-NEXT: zip1 z0.h, z0.h, z3.h
158+
; SVE2_128_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
155159
; SVE2_128_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
156160
; SVE2_128_NOMAX-NEXT: ret
157161
;
158162
; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_indices_from_both_ops:
159163
; SVE2_NOMIN_NOMAX: // %bb.0:
160-
; SVE2_NOMIN_NOMAX-NEXT: ldr d0, [x0]
161-
; SVE2_NOMIN_NOMAX-NEXT: ldr d1, [x1]
162-
; SVE2_NOMIN_NOMAX-NEXT: mov z2.b, z1.b[4]
163-
; SVE2_NOMIN_NOMAX-NEXT: mov z3.b, z1.b[1]
164-
; SVE2_NOMIN_NOMAX-NEXT: mov z0.b, z0.b[1]
165-
; SVE2_NOMIN_NOMAX-NEXT: mov z4.h, z1.h[3]
166-
; SVE2_NOMIN_NOMAX-NEXT: mov z1.h, z1.h[1]
167-
; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
168-
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
169-
; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
170-
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
171-
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
164+
; SVE2_NOMIN_NOMAX-NEXT: ldr d0, [x1]
165+
; SVE2_NOMIN_NOMAX-NEXT: ldr d1, [x0]
166+
; SVE2_NOMIN_NOMAX-NEXT: mov z2.b, z0.b[3]
167+
; SVE2_NOMIN_NOMAX-NEXT: mov z3.b, z0.b[2]
168+
; SVE2_NOMIN_NOMAX-NEXT: mov z4.b, z0.b[1]
169+
; SVE2_NOMIN_NOMAX-NEXT: mov z1.b, z1.b[1]
170+
; SVE2_NOMIN_NOMAX-NEXT: mov z5.b, z0.b[7]
171+
; SVE2_NOMIN_NOMAX-NEXT: mov z6.b, z0.b[6]
172+
; SVE2_NOMIN_NOMAX-NEXT: mov z0.b, z0.b[4]
173+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
174+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
175+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z3.b, z6.b, z5.b
176+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.b, z0.b, z0.b
177+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
178+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.h, z0.h, z3.h
179+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
172180
; SVE2_NOMIN_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
173181
; SVE2_NOMIN_NOMAX-NEXT: ret
174182
;
175183
; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_indices_from_both_ops:
176184
; SVE2_MIN_256_NOMAX: // %bb.0:
177-
; SVE2_MIN_256_NOMAX-NEXT: ldr d0, [x0]
178-
; SVE2_MIN_256_NOMAX-NEXT: ldr d1, [x1]
179-
; SVE2_MIN_256_NOMAX-NEXT: mov z2.b, z1.b[4]
180-
; SVE2_MIN_256_NOMAX-NEXT: mov z3.b, z1.b[1]
181-
; SVE2_MIN_256_NOMAX-NEXT: mov z0.b, z0.b[1]
182-
; SVE2_MIN_256_NOMAX-NEXT: mov z4.h, z1.h[3]
183-
; SVE2_MIN_256_NOMAX-NEXT: mov z1.h, z1.h[1]
184-
; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
185-
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
186-
; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
187-
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
188-
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
185+
; SVE2_MIN_256_NOMAX-NEXT: ldr d0, [x1]
186+
; SVE2_MIN_256_NOMAX-NEXT: ldr d1, [x0]
187+
; SVE2_MIN_256_NOMAX-NEXT: mov z2.b, z0.b[3]
188+
; SVE2_MIN_256_NOMAX-NEXT: mov z3.b, z0.b[2]
189+
; SVE2_MIN_256_NOMAX-NEXT: mov z4.b, z0.b[1]
190+
; SVE2_MIN_256_NOMAX-NEXT: mov z1.b, z1.b[1]
191+
; SVE2_MIN_256_NOMAX-NEXT: mov z5.b, z0.b[7]
192+
; SVE2_MIN_256_NOMAX-NEXT: mov z6.b, z0.b[6]
193+
; SVE2_MIN_256_NOMAX-NEXT: mov z0.b, z0.b[4]
194+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
195+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
196+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z3.b, z6.b, z5.b
197+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.b, z0.b, z0.b
198+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
199+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.h, z0.h, z3.h
200+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
189201
; SVE2_MIN_256_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
190202
; SVE2_MIN_256_NOMAX-NEXT: ret
191203
%op1 = load <8 x i8>, ptr %a
@@ -218,52 +230,58 @@ define <8 x i8> @shuffle_index_poison_value(ptr %a, ptr %b) {
218230
;
219231
; SVE2_128_NOMAX-LABEL: shuffle_index_poison_value:
220232
; SVE2_128_NOMAX: // %bb.0:
221-
; SVE2_128_NOMAX-NEXT: ldr d0, [x0]
222-
; SVE2_128_NOMAX-NEXT: ldr d1, [x1]
223-
; SVE2_128_NOMAX-NEXT: mov z2.b, z1.b[4]
224-
; SVE2_128_NOMAX-NEXT: mov z3.b, z1.b[1]
225-
; SVE2_128_NOMAX-NEXT: mov z0.b, z0.b[1]
226-
; SVE2_128_NOMAX-NEXT: mov z4.b, z1.b[6]
227-
; SVE2_128_NOMAX-NEXT: mov z1.h, z1.h[1]
228-
; SVE2_128_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
229-
; SVE2_128_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
230-
; SVE2_128_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
231-
; SVE2_128_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
232-
; SVE2_128_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
233+
; SVE2_128_NOMAX-NEXT: ldr d0, [x1]
234+
; SVE2_128_NOMAX-NEXT: ldr d1, [x0]
235+
; SVE2_128_NOMAX-NEXT: mov z2.b, z0.b[3]
236+
; SVE2_128_NOMAX-NEXT: mov z3.b, z0.b[2]
237+
; SVE2_128_NOMAX-NEXT: mov z4.b, z0.b[1]
238+
; SVE2_128_NOMAX-NEXT: mov z1.b, z1.b[1]
239+
; SVE2_128_NOMAX-NEXT: mov z5.b, z0.b[4]
240+
; SVE2_128_NOMAX-NEXT: mov z0.b, z0.b[6]
241+
; SVE2_128_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
242+
; SVE2_128_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
243+
; SVE2_128_NOMAX-NEXT: zip1 z3.b, z5.b, z5.b
244+
; SVE2_128_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
245+
; SVE2_128_NOMAX-NEXT: zip1 z0.h, z3.h, z0.h
246+
; SVE2_128_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
233247
; SVE2_128_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
234248
; SVE2_128_NOMAX-NEXT: ret
235249
;
236250
; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_poison_value:
237251
; SVE2_NOMIN_NOMAX: // %bb.0:
238-
; SVE2_NOMIN_NOMAX-NEXT: ldr d0, [x0]
239-
; SVE2_NOMIN_NOMAX-NEXT: ldr d1, [x1]
240-
; SVE2_NOMIN_NOMAX-NEXT: mov z2.b, z1.b[4]
241-
; SVE2_NOMIN_NOMAX-NEXT: mov z3.b, z1.b[1]
242-
; SVE2_NOMIN_NOMAX-NEXT: mov z0.b, z0.b[1]
243-
; SVE2_NOMIN_NOMAX-NEXT: mov z4.b, z1.b[6]
244-
; SVE2_NOMIN_NOMAX-NEXT: mov z1.h, z1.h[1]
245-
; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
246-
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
247-
; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
248-
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
249-
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
252+
; SVE2_NOMIN_NOMAX-NEXT: ldr d0, [x1]
253+
; SVE2_NOMIN_NOMAX-NEXT: ldr d1, [x0]
254+
; SVE2_NOMIN_NOMAX-NEXT: mov z2.b, z0.b[3]
255+
; SVE2_NOMIN_NOMAX-NEXT: mov z3.b, z0.b[2]
256+
; SVE2_NOMIN_NOMAX-NEXT: mov z4.b, z0.b[1]
257+
; SVE2_NOMIN_NOMAX-NEXT: mov z1.b, z1.b[1]
258+
; SVE2_NOMIN_NOMAX-NEXT: mov z5.b, z0.b[4]
259+
; SVE2_NOMIN_NOMAX-NEXT: mov z0.b, z0.b[6]
260+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
261+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
262+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z3.b, z5.b, z5.b
263+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
264+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.h, z3.h, z0.h
265+
; SVE2_NOMIN_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
250266
; SVE2_NOMIN_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
251267
; SVE2_NOMIN_NOMAX-NEXT: ret
252268
;
253269
; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_poison_value:
254270
; SVE2_MIN_256_NOMAX: // %bb.0:
255-
; SVE2_MIN_256_NOMAX-NEXT: ldr d0, [x0]
256-
; SVE2_MIN_256_NOMAX-NEXT: ldr d1, [x1]
257-
; SVE2_MIN_256_NOMAX-NEXT: mov z2.b, z1.b[4]
258-
; SVE2_MIN_256_NOMAX-NEXT: mov z3.b, z1.b[1]
259-
; SVE2_MIN_256_NOMAX-NEXT: mov z0.b, z0.b[1]
260-
; SVE2_MIN_256_NOMAX-NEXT: mov z4.b, z1.b[6]
261-
; SVE2_MIN_256_NOMAX-NEXT: mov z1.h, z1.h[1]
262-
; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.b, z2.b, z2.b
263-
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.b, z0.b, z3.b
264-
; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.h, z2.h, z4.h
265-
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.h, z0.h, z1.h
266-
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.s, z0.s, z2.s
271+
; SVE2_MIN_256_NOMAX-NEXT: ldr d0, [x1]
272+
; SVE2_MIN_256_NOMAX-NEXT: ldr d1, [x0]
273+
; SVE2_MIN_256_NOMAX-NEXT: mov z2.b, z0.b[3]
274+
; SVE2_MIN_256_NOMAX-NEXT: mov z3.b, z0.b[2]
275+
; SVE2_MIN_256_NOMAX-NEXT: mov z4.b, z0.b[1]
276+
; SVE2_MIN_256_NOMAX-NEXT: mov z1.b, z1.b[1]
277+
; SVE2_MIN_256_NOMAX-NEXT: mov z5.b, z0.b[4]
278+
; SVE2_MIN_256_NOMAX-NEXT: mov z0.b, z0.b[6]
279+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z2.b, z3.b, z2.b
280+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z1.b, z1.b, z4.b
281+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z3.b, z5.b, z5.b
282+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z1.h, z1.h, z2.h
283+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.h, z3.h, z0.h
284+
; SVE2_MIN_256_NOMAX-NEXT: zip1 z0.s, z1.s, z0.s
267285
; SVE2_MIN_256_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
268286
; SVE2_MIN_256_NOMAX-NEXT: ret
269287
%op1 = load <8 x i8>, ptr %a
@@ -320,18 +338,22 @@ define <8 x i8> @shuffle_op1_poison(ptr %a, ptr %b) {
320338
define <8 x i8> @negative_test_shuffle_index_size_op_both_maxhw(ptr %a, ptr %b) "target-features"="+sve2" vscale_range(16,16) {
321339
; CHECK-LABEL: negative_test_shuffle_index_size_op_both_maxhw:
322340
; CHECK: // %bb.0:
323-
; CHECK-NEXT: ldr d0, [x0]
324-
; CHECK-NEXT: ldr d1, [x1]
325-
; CHECK-NEXT: mov z2.b, z1.b[4]
326-
; CHECK-NEXT: mov z3.b, z1.b[1]
327-
; CHECK-NEXT: mov z0.b, z0.b[1]
328-
; CHECK-NEXT: mov z4.h, z1.h[3]
329-
; CHECK-NEXT: mov z1.h, z1.h[1]
330-
; CHECK-NEXT: zip1 z2.b, z2.b, z2.b
331-
; CHECK-NEXT: zip1 z0.b, z0.b, z3.b
332-
; CHECK-NEXT: zip1 z2.h, z2.h, z4.h
333-
; CHECK-NEXT: zip1 z0.h, z0.h, z1.h
334-
; CHECK-NEXT: zip1 z0.s, z0.s, z2.s
341+
; CHECK-NEXT: ldr d0, [x1]
342+
; CHECK-NEXT: ldr d1, [x0]
343+
; CHECK-NEXT: mov z2.b, z0.b[3]
344+
; CHECK-NEXT: mov z3.b, z0.b[2]
345+
; CHECK-NEXT: mov z4.b, z0.b[1]
346+
; CHECK-NEXT: mov z1.b, z1.b[1]
347+
; CHECK-NEXT: mov z5.b, z0.b[7]
348+
; CHECK-NEXT: mov z6.b, z0.b[6]
349+
; CHECK-NEXT: mov z0.b, z0.b[4]
350+
; CHECK-NEXT: zip1 z2.b, z3.b, z2.b
351+
; CHECK-NEXT: zip1 z1.b, z1.b, z4.b
352+
; CHECK-NEXT: zip1 z3.b, z6.b, z5.b
353+
; CHECK-NEXT: zip1 z0.b, z0.b, z0.b
354+
; CHECK-NEXT: zip1 z1.h, z1.h, z2.h
355+
; CHECK-NEXT: zip1 z0.h, z0.h, z3.h
356+
; CHECK-NEXT: zip1 z0.s, z1.s, z0.s
335357
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
336358
; CHECK-NEXT: ret
337359
%op1 = load <8 x i8>, ptr %a

0 commit comments

Comments
 (0)