[llvm] 9dc250d - [X86][AVX] SimplifyDemandedVectorEltsForTargetShuffle - ensure mask is same size as constant size
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 8 03:48:45 PDT 2020
Author: Simon Pilgrim
Date: 2020-07-08T11:47:59+01:00
New Revision: 9dc250db9db29b0264fbb1e59bde8efa86d90c9b
URL: https://github.com/llvm/llvm-project/commit/9dc250db9db29b0264fbb1e59bde8efa86d90c9b
DIFF: https://github.com/llvm/llvm-project/commit/9dc250db9db29b0264fbb1e59bde8efa86d90c9b.diff
LOG: [X86][AVX] SimplifyDemandedVectorEltsForTargetShuffle - ensure mask is same size as constant size
Fixes test regression reported on D81791
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/vector-shuffle-avx512.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 5238014008be..2e7d3062430c 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -36935,11 +36935,16 @@ bool X86TargetLowering::SimplifyDemandedVectorEltsForTargetShuffle(
return false;
const Constant *C = getTargetConstantFromNode(Load);
- if (!C || !C->getType()->isVectorTy())
+ if (!C)
+ return false;
+
+ Type *CTy = C->getType();
+ if (!CTy->isVectorTy() ||
+ CTy->getPrimitiveSizeInBits() != Mask.getValueSizeInBits())
return false;
// Handle scaling for i64 elements on 32-bit targets.
- unsigned NumCstElts = cast<FixedVectorType>(C->getType())->getNumElements();
+ unsigned NumCstElts = cast<FixedVectorType>(CTy)->getNumElements();
if (NumCstElts != NumElts && NumCstElts != (NumElts * 2))
return false;
unsigned Scale = NumCstElts / NumElts;
diff --git a/llvm/test/CodeGen/X86/vector-shuffle-avx512.ll b/llvm/test/CodeGen/X86/vector-shuffle-avx512.ll
index b79746b1d67a..1ab6f2cc45fc 100644
--- a/llvm/test/CodeGen/X86/vector-shuffle-avx512.ll
+++ b/llvm/test/CodeGen/X86/vector-shuffle-avx512.ll
@@ -528,8 +528,9 @@ define void @test_demandedelts_pshufb_v32i8_v16i8(<2 x i32>* %src, <8 x i32>* %d
; SKX64-NEXT: vmovdqa 32(%rdi), %xmm0
; SKX64-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[12,13,14,15,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
; SKX64-NEXT: vmovdqa %ymm0, 672(%rsi)
-; SKX64-NEXT: vpermilps {{.*#+}} xmm0 = mem[1,0,2,3]
-; SKX64-NEXT: vmovaps %ymm0, 832(%rsi)
+; SKX64-NEXT: vmovdqa 208(%rdi), %xmm0
+; SKX64-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,2,3],zero,zero,zero,zero,zero,zero,zero,zero
+; SKX64-NEXT: vmovdqa %ymm0, 832(%rsi)
; SKX64-NEXT: vzeroupper
; SKX64-NEXT: retq
;
@@ -550,8 +551,9 @@ define void @test_demandedelts_pshufb_v32i8_v16i8(<2 x i32>* %src, <8 x i32>* %d
; SKX32-NEXT: vmovdqa 32(%ecx), %xmm0
; SKX32-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[12,13,14,15,12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero
; SKX32-NEXT: vmovdqa %ymm0, 672(%eax)
-; SKX32-NEXT: vpermilps {{.*#+}} xmm0 = mem[1,0,2,3]
-; SKX32-NEXT: vmovaps %ymm0, 832(%eax)
+; SKX32-NEXT: vmovdqa 208(%ecx), %xmm0
+; SKX32-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,2,3],zero,zero,zero,zero,zero,zero,zero,zero
+; SKX32-NEXT: vmovdqa %ymm0, 832(%eax)
; SKX32-NEXT: vzeroupper
; SKX32-NEXT: retl
;
More information about the llvm-commits
mailing list