Skip to content

Commit c58cd9c

Browse files
committed
Generalize fold a little
1 parent 2947c37 commit c58cd9c

File tree

2 files changed

+125
-116
lines changed

2 files changed

+125
-116
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 41 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24735,10 +24735,7 @@ 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-
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
24738+
EVT EltVT = VT.getVectorElementType();
2474224739
SDValue Op0 = skipElementSizePreservingCast(N->getOperand(0), VT);
2474324740
SDValue Op1 = skipElementSizePreservingCast(N->getOperand(1), VT);
2474424741
if (Op0 && Op1 && Op0->getOpcode() == ISD::INSERT_VECTOR_ELT &&
@@ -24751,17 +24748,51 @@ static SDValue performZIP1Combine(SDNode *N, SelectionDAG &DAG) {
2475124748
SDValue Op01 = Op0->getOperand(1);
2475224749
SDValue Op11 = Op1->getOperand(1);
2475324750
if (Op01->getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
24754-
Op11->getOpcode() == ISD::EXTRACT_VECTOR_ELT &&
24755-
Op01->getConstantOperandVal(1) == 0 &&
24756-
Op11->getConstantOperandVal(1) == 1) {
24751+
Op11->getOpcode() == ISD::EXTRACT_VECTOR_ELT) {
2475724752
SDValue Op010 = skipElementSizePreservingCast(Op01->getOperand(0), VT);
2475824753
SDValue Op110 = skipElementSizePreservingCast(Op11->getOperand(0), VT);
24759-
if (Op010 && Op010 == Op110)
24760-
return DAG.getBitcast(VT, Op010);
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+
}
2476124793
}
2476224794
}
2476324795
}
24764-
2476524796
return SDValue();
2476624797
}
2476724798

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

Lines changed: 84 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -140,64 +140,52 @@ 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, [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
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
159155
; SVE2_128_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
160156
; SVE2_128_NOMAX-NEXT: ret
161157
;
162158
; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_indices_from_both_ops:
163159
; SVE2_NOMIN_NOMAX: // %bb.0:
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
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
180172
; SVE2_NOMIN_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
181173
; SVE2_NOMIN_NOMAX-NEXT: ret
182174
;
183175
; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_indices_from_both_ops:
184176
; SVE2_MIN_256_NOMAX: // %bb.0:
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
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
201189
; SVE2_MIN_256_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
202190
; SVE2_MIN_256_NOMAX-NEXT: ret
203191
%op1 = load <8 x i8>, ptr %a
@@ -230,58 +218,52 @@ define <8 x i8> @shuffle_index_poison_value(ptr %a, ptr %b) {
230218
;
231219
; SVE2_128_NOMAX-LABEL: shuffle_index_poison_value:
232220
; SVE2_128_NOMAX: // %bb.0:
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
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
247233
; SVE2_128_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
248234
; SVE2_128_NOMAX-NEXT: ret
249235
;
250236
; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_poison_value:
251237
; SVE2_NOMIN_NOMAX: // %bb.0:
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
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
266250
; SVE2_NOMIN_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
267251
; SVE2_NOMIN_NOMAX-NEXT: ret
268252
;
269253
; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_poison_value:
270254
; SVE2_MIN_256_NOMAX: // %bb.0:
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
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
285267
; SVE2_MIN_256_NOMAX-NEXT: // kill: def $d0 killed $d0 killed $z0
286268
; SVE2_MIN_256_NOMAX-NEXT: ret
287269
%op1 = load <8 x i8>, ptr %a
@@ -338,22 +320,18 @@ define <8 x i8> @shuffle_op1_poison(ptr %a, ptr %b) {
338320
define <8 x i8> @negative_test_shuffle_index_size_op_both_maxhw(ptr %a, ptr %b) "target-features"="+sve2" vscale_range(16,16) {
339321
; CHECK-LABEL: negative_test_shuffle_index_size_op_both_maxhw:
340322
; CHECK: // %bb.0:
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
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
357335
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
358336
; CHECK-NEXT: ret
359337
%op1 = load <8 x i8>, ptr %a

0 commit comments

Comments
 (0)