Skip to content

Commit 564b177

Browse files
committed
fix GISel for zip1/zip2 with flipped operands
1 parent 09806bf commit 564b177

File tree

2 files changed

+14
-28
lines changed

2 files changed

+14
-28
lines changed

llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,8 +259,8 @@ bool matchZip(MachineInstr &MI, MachineRegisterInfo &MRI,
259259
if (!isZIPMask(ShuffleMask, NumElts, WhichResult, OperandOrder))
260260
return false;
261261
unsigned Opc = (WhichResult == 0) ? AArch64::G_ZIP1 : AArch64::G_ZIP2;
262-
Register V1 = MI.getOperand(1).getReg();
263-
Register V2 = MI.getOperand(2).getReg();
262+
Register V1 = MI.getOperand(OperandOrder == 0 ? 1 : 2).getReg();
263+
Register V2 = MI.getOperand(OperandOrder == 0 ? 2 : 1).getReg();
264264
MatchInfo = ShuffleVectorPseudo(Opc, Dst, {V1, V2});
265265
return true;
266266
}

llvm/test/CodeGen/AArch64/arm64-zip.ll

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -356,38 +356,24 @@ define <8 x i16> @combine_v8i16_undef(<4 x i16> %0, <4 x i16> %1) {
356356
}
357357

358358
define <16 x i8> @combine_v8i16_8first(<8 x i8> %0, <8 x i8> %1) {
359-
; CHECK-SD-LABEL: combine_v8i16_8first:
360-
; CHECK-SD: // %bb.0:
361-
; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
362-
; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q1
363-
; CHECK-SD-NEXT: zip1.16b v0, v0, v1
364-
; CHECK-SD-NEXT: ret
365-
;
366-
; CHECK-GI-LABEL: combine_v8i16_8first:
367-
; CHECK-GI: // %bb.0:
368-
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
369-
; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1
370-
; CHECK-GI-NEXT: zip1.16b v0, v1, v0
371-
; CHECK-GI-NEXT: ret
359+
; CHECK-LABEL: combine_v8i16_8first:
360+
; CHECK: // %bb.0:
361+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
362+
; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1
363+
; CHECK-NEXT: zip1.16b v0, v0, v1
364+
; CHECK-NEXT: ret
372365
%3 = shufflevector <8 x i8> %1, <8 x i8> %0, <16 x i32> <i32 8, i32 0, i32 9, i32 1, i32 10, i32 2, i32 11, i32 3, i32 12, i32 4, i32 13, i32 5, i32 14, i32 6, i32 15, i32 7>
373366
ret <16 x i8> %3
374367
}
375368

376369

377370
define <16 x i8> @combine_v8i16_8firstundef(<8 x i8> %0, <8 x i8> %1) {
378-
; CHECK-SD-LABEL: combine_v8i16_8firstundef:
379-
; CHECK-SD: // %bb.0:
380-
; CHECK-SD-NEXT: // kill: def $d0 killed $d0 def $q0
381-
; CHECK-SD-NEXT: // kill: def $d1 killed $d1 def $q1
382-
; CHECK-SD-NEXT: zip1.16b v0, v0, v1
383-
; CHECK-SD-NEXT: ret
384-
;
385-
; CHECK-GI-LABEL: combine_v8i16_8firstundef:
386-
; CHECK-GI: // %bb.0:
387-
; CHECK-GI-NEXT: // kill: def $d0 killed $d0 def $q0
388-
; CHECK-GI-NEXT: // kill: def $d1 killed $d1 def $q1
389-
; CHECK-GI-NEXT: zip1.16b v0, v1, v0
390-
; CHECK-GI-NEXT: ret
371+
; CHECK-LABEL: combine_v8i16_8firstundef:
372+
; CHECK: // %bb.0:
373+
; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0
374+
; CHECK-NEXT: // kill: def $d1 killed $d1 def $q1
375+
; CHECK-NEXT: zip1.16b v0, v0, v1
376+
; CHECK-NEXT: ret
391377
%3 = shufflevector <8 x i8> %1, <8 x i8> %0, <16 x i32> <i32 8, i32 0, i32 9, i32 1, i32 10, i32 2, i32 11, i32 3, i32 12, i32 4, i32 13, i32 5, i32 14, i32 6, i32 15, i32 undef>
392378
ret <16 x i8> %3
393379
}

0 commit comments

Comments
 (0)