summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2018-03-09 18:37:56 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2018-03-09 18:37:56 +0000
commit2cd489feb2b99d1a24aab4c8971ae528e0b77d78 (patch)
tree45d4f04fb8244c3200215706b091ff06f031bc4f /llvm/lib
parent169ec09cb7077cc7be74460a371dafa2cecb2f95 (diff)
downloadbcm5719-llvm-2cd489feb2b99d1a24aab4c8971ae528e0b77d78.tar.gz
bcm5719-llvm-2cd489feb2b99d1a24aab4c8971ae528e0b77d78.zip
[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. llvm-svn: 327159
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86ISelLowering.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index e8265e7e643..b5649707cc5 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -7963,6 +7963,8 @@ SDValue createVariablePermute(MVT VT, SDValue SrcVec, SDValue IndicesVec,
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;
}
OpenPOWER on IntegriCloud