summaryrefslogtreecommitdiffstats
path: root/llvm/lib/ExecutionEngine/ExecutionEngineBindings.cpp
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2016-02-13 21:54:04 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2016-02-13 21:54:04 +0000
commit08ba012973c80b098b7441a8ce0ee40194596ed4 (patch)
tree60f4ea0c742e0d71c98934c95026554b45724e12 /llvm/lib/ExecutionEngine/ExecutionEngineBindings.cpp
parente91793c3a34233ebe347d171621f6e7feaa2962c (diff)
downloadbcm5719-llvm-08ba012973c80b098b7441a8ce0ee40194596ed4.tar.gz
bcm5719-llvm-08ba012973c80b098b7441a8ce0ee40194596ed4.zip
[X86][AVX] Lower shuffles as repeated lane shuffles then lane-crossing shuffles
This patch attempts to represent a shuffle as a repeating shuffle (recognisable by is128BitLaneRepeatedShuffleMask) with the source input(s) in their original lanes, followed by a single permutation of the 128-bit lanes to their final destinations. On AVX2 we can additionally attempt to match using 64-bit sub-lane permutation. AVX2 can also now match a similar 'broadcasted' repeating shuffle. This patch has several benefits: * Avoids prematurely matching with lowerVectorShuffleByMerging128BitLanes which can require both inputs to have their input lanes permuted before shuffling. * Can replace PERMPS/PERMD instructions - although these are useful for cross-lane unary shuffling, they require their shuffle mask to be pre-loaded (and increase register pressure). * Matching the repeating shuffle makes use of a lot of existing shuffle lowering. There is an outstanding minor AVX1 regression (combine_unneeded_subvector1 in vector-shuffle-combining.ll) of a previously 128-bit shuffle + subvector splat being converted to a subvector splat + (2 instruction) 256-bit shuffle, I intend to fix this in a followup patch for review. Differential Revision: http://reviews.llvm.org/D16537 llvm-svn: 260834
Diffstat (limited to 'llvm/lib/ExecutionEngine/ExecutionEngineBindings.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud