[llvm] r263105 - [X86][AVX] Improve target shuffle combining of BLEND+zero
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Thu Mar 10 03:50:16 PST 2016
Author: rksimon
Date: Thu Mar 10 05:50:15 2016
New Revision: 263105
URL: http://llvm.org/viewvc/llvm-project?rev=263105&view=rev
Log:
[X86][AVX] Improve target shuffle combining of BLEND+zero
The BLEND+zero combine was failing to combine equivalent BLEND masks.
Follow up to D17483 and D17858
Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=263105&r1=263104&r2=263105&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Thu Mar 10 05:50:15 2016
@@ -23916,7 +23916,8 @@ static bool combineX86ShuffleChain(SDVal
if (Mask[i / MaskRatio] < 0)
BlendMask |= 1u << i;
- if (Root.getOpcode() != X86ISD::BLENDI ||
+ if (Depth != 1 || RootVT != ShuffleVT ||
+ Root.getOpcode() != X86ISD::BLENDI ||
Root->getConstantOperandVal(2) != BlendMask) {
SDValue Zero = getZeroVector(ShuffleVT, Subtarget, DAG, DL);
Res = DAG.getBitcast(ShuffleVT, Input);
Modified: llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll?rev=263105&r1=263104&r2=263105&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll Thu Mar 10 05:50:15 2016
@@ -941,17 +941,13 @@ define <2 x i64> @shuffle_v2i64_bitcast_
;
; AVX2-LABEL: shuffle_v2i64_bitcast_z123:
; AVX2: # BB#0:
-; AVX2-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; AVX2-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
-; AVX2-NEXT: vxorps %xmm1, %xmm1, %xmm1
+; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
; AVX2-NEXT: retq
;
; AVX512VL-LABEL: shuffle_v2i64_bitcast_z123:
; AVX512VL: # BB#0:
-; AVX512VL-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; AVX512VL-NEXT: vblendps {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
-; AVX512VL-NEXT: vxorps %xmm1, %xmm1, %xmm1
+; AVX512VL-NEXT: vpxor %xmm1, %xmm1, %xmm1
; AVX512VL-NEXT: vpblendd {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
; AVX512VL-NEXT: retq
%bitcast32 = bitcast <2 x i64> %x to <4 x float>
More information about the llvm-commits
mailing list