1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 12:02:58 +02:00
llvm-mirror/test/CodeGen
Simon Pilgrim 67ccd7713f [DAGCombiner] Convert constant AND masks to shuffle clear masks down to the byte level
The XformToShuffleWithZero method currently checks AND masks at the per-lane level for all-one and all-zero constants and attempts to convert them to legal shuffle clear masks.

This patch generalises XformToShuffleWithZero, splitting and checking the sub-lanes of the constants down to the byte level to see if any legal shuffle clear masks are possible. This allows a lot of masks (often from legalization or truncation) to be folded into existing shuffle patterns and removes a lot of constant mask loading.

There are a few examples of poor shuffle lowering that are exposed by this patch that will be cleaned up in future patches (e.g. merging shuffles that are separated by bitcasts, x86 legalized v8i8 zero extension uses PMOVZX+AND+AND instead of AND+PMOVZX, etc.)

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

llvm-svn: 243831
2015-08-01 10:01:46 +00:00
..
AArch64 DI: Remove DW_TAG_arg_variable and DW_TAG_auto_variable 2015-07-31 18:58:39 +00:00
AMDGPU AMDGPU/SI: Add implicit register operands in the correct order. 2015-07-31 23:30:09 +00:00
ARM DI: Remove DW_TAG_arg_variable and DW_TAG_auto_variable 2015-07-31 18:58:39 +00:00
BPF [bpf] rename triple names bpf_be -> bpfeb 2015-06-05 16:11:14 +00:00
CPP
Generic DI: Remove DW_TAG_arg_variable and DW_TAG_auto_variable 2015-07-31 18:58:39 +00:00
Hexagon DI: Remove DW_TAG_arg_variable and DW_TAG_auto_variable 2015-07-31 18:58:39 +00:00
Inputs DI: Remove DW_TAG_arg_variable and DW_TAG_auto_variable 2015-07-31 18:58:39 +00:00
Mips [mips][FastISel] Remove hidden mips-fast-isel option. 2015-07-30 12:39:33 +00:00
MIR MIR Parser: Report an error when a jump table entry is redefined. 2015-07-31 23:13:23 +00:00
MSP430
NVPTX [NVPTX] convert pointers in byval kernel arguments to global 2015-07-31 21:44:14 +00:00
PowerPC DI: Remove DW_TAG_arg_variable and DW_TAG_auto_variable 2015-07-31 18:58:39 +00:00
SPARC [SPARC] Cleanup handling of the Y/ASR registers. 2015-07-08 16:25:12 +00:00
SystemZ [DAGCombiner] Account for getVectorIdxTy() when narrowing vector load 2015-05-05 19:34:10 +00:00
Thumb DI: Remove DW_TAG_arg_variable and DW_TAG_auto_variable 2015-07-31 18:58:39 +00:00
Thumb2 ARMLoadStoreOptimizer: Create LDRD/STRD on thumb2 2015-07-21 00:18:59 +00:00
WebAssembly WebAssembly: handle more than int32 argument/return 2015-08-01 04:48:44 +00:00
WinEH [WinEH] Strip the \01 character from the __CxxFrameHandler3 thunk name 2015-07-13 17:55:14 +00:00
X86 [DAGCombiner] Convert constant AND masks to shuffle clear masks down to the byte level 2015-08-01 10:01:46 +00:00
XCore DI: Remove DW_TAG_arg_variable and DW_TAG_auto_variable 2015-07-31 18:58:39 +00:00