[llvm] 2258b36 - [X86][AVX] getFauxShuffleMask - decode VBROADCAST(EXTRACT_VECTOR_ELT(V,0))
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 19 03:07:13 PST 2021
Author: Simon Pilgrim
Date: 2021-02-19T11:06:53Z
New Revision: 2258b367dbe9286b31ef88f5361d108c62216d00
URL: https://github.com/llvm/llvm-project/commit/2258b367dbe9286b31ef88f5361d108c62216d00
DIFF: https://github.com/llvm/llvm-project/commit/2258b367dbe9286b31ef88f5361d108c62216d00.diff
LOG: [X86][AVX] getFauxShuffleMask - decode VBROADCAST(EXTRACT_VECTOR_ELT(V,0))
Handle the case where we're broadcasting a scalar extracted from another vector.
Added:
Modified:
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/vector-shuffle-combining-avx2.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index e5f454a251dd..008fbc179f5d 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -7821,8 +7821,14 @@ static bool getFauxShuffleMask(SDValue N, const APInt &DemandedElts,
}
case X86ISD::VBROADCAST: {
SDValue Src = N.getOperand(0);
- if (!Src.getSimpleValueType().isVector())
- return false;
+ if (!Src.getSimpleValueType().isVector()) {
+ if (Src.getOpcode() != ISD::EXTRACT_VECTOR_ELT ||
+ !isNullConstant(Src.getOperand(1)) ||
+ Src.getOperand(0).getValueType().getScalarType() !=
+ VT.getScalarType())
+ return false;
+ Src = Src.getOperand(0);
+ }
Ops.push_back(Src);
Mask.append(NumElts, 0);
return true;
diff --git a/llvm/test/CodeGen/X86/vector-shuffle-combining-avx2.ll b/llvm/test/CodeGen/X86/vector-shuffle-combining-avx2.ll
index 7bd466b21daf..da169b6dff3c 100644
--- a/llvm/test/CodeGen/X86/vector-shuffle-combining-avx2.ll
+++ b/llvm/test/CodeGen/X86/vector-shuffle-combining-avx2.ll
@@ -782,9 +782,8 @@ define i32 @broadcast_v2i64_multiuse(i64* %p0) {
; X86-LABEL: broadcast_v2i64_multiuse:
; X86: # %bb.0: # %entry
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
-; X86-NEXT: vmovsd {{.*#+}} xmm0 = mem[0],zero
-; X86-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0]
-; X86-NEXT: vextractps $2, %xmm0, %eax
+; X86-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
+; X86-NEXT: vmovd %xmm0, %eax
; X86-NEXT: addl (%ecx), %eax
; X86-NEXT: retl
;
More information about the llvm-commits
mailing list