llvm-6502/lib
Simon Pilgrim 3ecdd44e5d [X86][SSE4A] Shuffle lowering using SSE4A EXTRQ/INSERTQ instructions
This patch adds support for v8i16 and v16i8 shuffle lowering using the immediate versions of the SSE4A EXTRQ and INSERTQ instructions. Although rather limited (they can only act on the lower 64-bits of the source vectors, leave the upper 64-bits of the result vector undefined and don't have VEX encoded variants), the instructions are still useful for the zero extension of any lane (EXTRQ) or inserting a lane into another vector (INSERTQ). Testing demonstrated that it wasn't typically worth it to use these instructions for v2i64 or v4i32 vector shuffles although they are capable of it.

As well as adding specific pattern matching for the shuffles, the patch uses EXTRQ for zero extension cases where SSE41 isn't available and its more efficient than the SSE2 'unpack' default approach. It also adds shuffle decode support for the EXTRQ / INSERTQ cases when the instructions are handling full byte-sized extractions / insertions.

From this foundation, future patches will be able to make use of the instructions for situations that use their ability to extract/insert at the bit level.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241508 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-06 20:46:41 +00:00
..
Analysis IR: Do not consider available_externally linkage to be linker-weak. 2015-07-05 20:52:35 +00:00
AsmParser Add a DIModule metadata node to the IR. 2015-06-29 23:03:47 +00:00
Bitcode Remove always-true comparison, NFC. 2015-07-03 20:12:01 +00:00
CodeGen [TwoAddressInstructionPass] Rename a variable to match the coding style. 2015-07-06 20:12:54 +00:00
DebugInfo Return ErrorOr from getSymbolAddress. 2015-07-03 18:19:00 +00:00
ExecutionEngine Remove getRelocationAddress. 2015-07-06 14:55:37 +00:00
Fuzzer
IR DIBuilder: Don't rauw null pointers with empty arrays in finalize(). 2015-07-06 16:36:02 +00:00
IRReader
LibDriver
LineEditor
Linker
LTO LTO: expose LTO_SYMBOL_ALIAS, which indicates that the symbol is an alias. 2015-07-04 03:42:35 +00:00
MC Change the last few internal StringRef triples into Triple objects. 2015-07-06 16:56:07 +00:00
Object Remove getRelocationAddress. 2015-07-06 14:55:37 +00:00
Option
Passes
ProfileData
Support [Support] Lazy load of dbghlp.dll on Windows 2015-07-02 14:34:57 +00:00
TableGen [TableGen] Change a couple methods to return an ArrayRef instead of a const std::vector reference. NFC 2015-07-06 06:23:01 +00:00
Target [X86][SSE4A] Shuffle lowering using SSE4A EXTRQ/INSERTQ instructions 2015-07-06 20:46:41 +00:00
Transforms [llvm-extract] Drop comdats from declarations 2015-07-06 18:48:02 +00:00
CMakeLists.txt
LLVMBuild.txt
Makefile