[llvm] r288367 - [X86][SSE] Classify AND bitmasks as variable shuffle masks
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 1 08:00:14 PST 2016
Author: rksimon
Date: Thu Dec 1 10:00:14 2016
New Revision: 288367
URL: http://llvm.org/viewvc/llvm-project?rev=288367&view=rev
Log:
[X86][SSE] Classify AND bitmasks as variable shuffle masks
They are loading the bitmasks from the constant pool so the cost is similar to loading a shuffle mask.
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=288367&r1=288366&r2=288367&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Thu Dec 1 10:00:14 2016
@@ -4061,6 +4061,7 @@ static bool isTargetShuffle(unsigned Opc
static bool isTargetShuffleVariableMask(unsigned Opcode) {
switch (Opcode) {
default: return false;
+ // Target Shuffles.
case X86ISD::PSHUFB:
case X86ISD::VPERMILPV:
case X86ISD::VPERMIL2:
@@ -4069,6 +4070,9 @@ static bool isTargetShuffleVariableMask(
case X86ISD::VPERMV3:
case X86ISD::VPERMIV3:
return true;
+ // 'Faux' Target Shuffles.
+ case ISD::AND:
+ return true;
}
}
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=288367&r1=288366&r2=288367&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll (original)
+++ llvm/trunk/test/CodeGen/X86/vector-shuffle-128-v2.ll Thu Dec 1 10:00:14 2016
@@ -940,22 +940,16 @@ define <2 x double> @shuffle_v2f64_bitca
define <2 x i64> @shuffle_v2i64_bitcast_z123(<2 x i64> %x) {
; SSE2-LABEL: shuffle_v2i64_bitcast_z123:
; SSE2: # BB#0:
-; SSE2-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; SSE2-NEXT: movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
; SSE2-NEXT: andps {{.*}}(%rip), %xmm0
; SSE2-NEXT: retq
;
; SSE3-LABEL: shuffle_v2i64_bitcast_z123:
; SSE3: # BB#0:
-; SSE3-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; SSE3-NEXT: movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
; SSE3-NEXT: andps {{.*}}(%rip), %xmm0
; SSE3-NEXT: retq
;
; SSSE3-LABEL: shuffle_v2i64_bitcast_z123:
; SSSE3: # BB#0:
-; SSSE3-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; SSSE3-NEXT: movss {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3]
; SSSE3-NEXT: andps {{.*}}(%rip), %xmm0
; SSSE3-NEXT: retq
;
More information about the llvm-commits
mailing list