[llvm] r327159 - [X86][AVX] createVariablePermute - fix v2i64/v2f64 VPERMILPD index creation.
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 9 10:37:56 PST 2018
Author: rksimon
Date: Fri Mar 9 10:37:56 2018
New Revision: 327159
URL: http://llvm.org/viewvc/llvm-project?rev=327159&view=rev
Log:
[X86][AVX] createVariablePermute - fix v2i64/v2f64 VPERMILPD index creation.
The input indices vector will put the index in bit0, but VPERMILPD actually selects off bit1 - so we need to scale accordingly.
Modified:
llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
llvm/trunk/test/CodeGen/X86/var-permute-128.ll
Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86ISelLowering.cpp?rev=327159&r1=327158&r2=327159&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Fri Mar 9 10:37:56 2018
@@ -7963,6 +7963,8 @@ SDValue createVariablePermute(MVT VT, SD
case MVT::v2f64:
case MVT::v2i64:
if (Subtarget.hasAVX()) {
+ // VPERMILPD selects using bit#1 of the index vector, so scale IndicesVec.
+ IndicesVec = DAG.getNode(ISD::ADD, DL, IndicesVT, IndicesVec, IndicesVec);
Opcode = X86ISD::VPERMILPV;
ShuffleVT = MVT::v2f64;
}
Modified: llvm/trunk/test/CodeGen/X86/var-permute-128.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/var-permute-128.ll?rev=327159&r1=327158&r2=327159&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/var-permute-128.ll (original)
+++ llvm/trunk/test/CodeGen/X86/var-permute-128.ll Fri Mar 9 10:37:56 2018
@@ -37,6 +37,7 @@ define <2 x i64> @var_shuffle_v2i64(<2 x
;
; AVX-LABEL: var_shuffle_v2i64:
; AVX: # %bb.0:
+; AVX-NEXT: vpaddq %xmm1, %xmm1, %xmm1
; AVX-NEXT: vpermilpd %xmm1, %xmm0, %xmm0
; AVX-NEXT: retq
%index0 = extractelement <2 x i64> %indices, i32 0
@@ -221,6 +222,7 @@ define <2 x double> @var_shuffle_v2f64(<
;
; AVX-LABEL: var_shuffle_v2f64:
; AVX: # %bb.0:
+; AVX-NEXT: vpaddq %xmm1, %xmm1, %xmm1
; AVX-NEXT: vpermilpd %xmm1, %xmm0, %xmm0
; AVX-NEXT: retq
%index0 = extractelement <2 x i64> %indices, i32 0
More information about the llvm-commits
mailing list