[X86][SSE] Lower 128-bit MOVDDUP with existing VBROADCAST mechanisms
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Wed, 2 Mar 2016 11:43:05 +0000 (11:43 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Wed, 2 Mar 2016 11:43:05 +0000 (11:43 +0000)
commitc02b72627a57f7de893ccf675d01e09a53a24b92
tree30f867c7591921809f509cfd8072084a4545be55
parentf2fbabe9c1955fc7e67d1e90f73aebcf54c49949
[X86][SSE] Lower 128-bit MOVDDUP with existing VBROADCAST mechanisms

We have a number of useful lowering strategies for VBROADCAST instructions (both from memory and register element 0) which the 128-bit form of the MOVDDUP instruction can make use of.

This patch tweaks lowerVectorShuffleAsBroadcast to enable it to broadcast 2f64 args using MOVDDUP as well.

It does require a slight tweak to the lowerVectorShuffleAsBroadcast mechanism as the existing MOVDDUP lowering uses isShuffleEquivalent which can match binary shuffles that can lower to (unary) broadcasts.

Differential Revision: http://reviews.llvm.org/D17680

llvm-svn: 262478
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/test/CodeGen/X86/avx-splat.ll
llvm/test/CodeGen/X86/avx-vbroadcast.ll
llvm/test/CodeGen/X86/avx2-vbroadcast.ll
llvm/test/CodeGen/X86/extractelement-load.ll
llvm/test/CodeGen/X86/vec_extract-sse4.ll