Skip to content

Commit 4334a19

Browse files
author
git apple-llvm automerger
committed
Merge commit '0491d8bda73f' from llvm.org/main into next
2 parents 488da69 + 0491d8b commit 4334a19

File tree

2 files changed

+7
-8
lines changed

2 files changed

+7
-8
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13516,15 +13516,15 @@ static bool isEXTMask(ArrayRef<int> M, EVT VT, bool &ReverseEXT,
1351613516
// Look for the first non-undef element.
1351713517
const int *FirstRealElt = find_if(M, [](int Elt) { return Elt >= 0; });
1351813518

13519-
// Benefit form APInt to handle overflow when calculating expected element.
13519+
// Benefit from APInt to handle overflow when calculating expected element.
1352013520
unsigned NumElts = VT.getVectorNumElements();
1352113521
unsigned MaskBits = APInt(32, NumElts * 2).logBase2();
1352213522
APInt ExpectedElt = APInt(MaskBits, *FirstRealElt + 1, /*isSigned=*/false,
1352313523
/*implicitTrunc=*/true);
1352413524
// The following shuffle indices must be the successive elements after the
1352513525
// first real element.
1352613526
bool FoundWrongElt = std::any_of(FirstRealElt + 1, M.end(), [&](int Elt) {
13527-
return Elt != ExpectedElt++ && Elt != -1;
13527+
return Elt != ExpectedElt++ && Elt >= 0;
1352813528
});
1352913529
if (FoundWrongElt)
1353013530
return false;
@@ -15811,6 +15811,7 @@ bool AArch64TargetLowering::isShuffleMaskLegal(ArrayRef<int> M, EVT VT) const {
1581115811
isREVMask(M, EltSize, NumElts, 32) ||
1581215812
isREVMask(M, EltSize, NumElts, 16) ||
1581315813
isEXTMask(M, VT, DummyBool, DummyUnsigned) ||
15814+
isSingletonEXTMask(M, VT, DummyUnsigned) ||
1581415815
isTRNMask(M, NumElts, DummyUnsigned) ||
1581515816
isUZPMask(M, NumElts, DummyUnsigned) ||
1581615817
isZIPMask(M, NumElts, DummyUnsigned) ||

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,8 @@ define <2 x ptr> @test_v2p0(<2 x ptr> %a, <2 x ptr> %b) {
139139
define <16 x i8> @reverse_vector_s8x16b(<16 x i8> noundef %x) {
140140
; CHECK-SD-LABEL: reverse_vector_s8x16b:
141141
; CHECK-SD: // %bb.0: // %entry
142-
; CHECK-SD-NEXT: rev64 v1.16b, v0.16b
143-
; CHECK-SD-NEXT: ext v0.16b, v1.16b, v1.16b, #8
144-
; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
142+
; CHECK-SD-NEXT: rev64 v0.16b, v0.16b
143+
; CHECK-SD-NEXT: ext v0.16b, v0.16b, v0.16b, #8
145144
; CHECK-SD-NEXT: ret
146145
;
147146
; CHECK-GI-LABEL: reverse_vector_s8x16b:
@@ -161,9 +160,8 @@ entry:
161160
define <8 x i16> @reverse_vector_s16x8b(<8 x i16> noundef %x) {
162161
; CHECK-SD-LABEL: reverse_vector_s16x8b:
163162
; CHECK-SD: // %bb.0: // %entry
164-
; CHECK-SD-NEXT: rev64 v1.8h, v0.8h
165-
; CHECK-SD-NEXT: ext v0.16b, v1.16b, v1.16b, #8
166-
; CHECK-SD-NEXT: mov v0.d[1], v1.d[0]
163+
; CHECK-SD-NEXT: rev64 v0.8h, v0.8h
164+
; CHECK-SD-NEXT: ext v0.16b, v0.16b, v0.16b, #8
167165
; CHECK-SD-NEXT: ret
168166
;
169167
; CHECK-GI-LABEL: reverse_vector_s16x8b:

0 commit comments

Comments
 (0)