llvm/lib
Andrea Di Biagio ae16ff1c42 [X86] Improved lowering of packed v8i16 vector shifts by non-constant count.
Before this patch, the backend sub-optimally expanded the non-constant shift
count of a v8i16 shift into a sequence of two 'movd' plus 'movzwl'.

With this patch the backend checks if the target features sse4.1. If so, then
it lets the shuffle legalizer deal with the expansion of the shift amount.

Example:
;;
define <8 x i16> @test(<8 x i16> %A, <8 x i16> %B) {
  %shamt = shufflevector <8 x i16> %B, <8 x i16> undef, <8 x i32> zeroinitializer
  %shl = shl <8 x i16> %A, %shamt
  ret <8 x i16> %shl
}
;;

Before (with -mattr=+avx):
  vmovd  %xmm1, %eax
  movzwl  %ax, %eax
  vmovd  %eax, %xmm1
  vpsllw  %xmm1, %xmm0, %xmm0
  retq

Now:
  vpxor  %xmm2, %xmm2, %xmm2
  vpblendw  $1, %xmm1, %xmm2, %xmm1
  vpsllw  %xmm1, %xmm0, %xmm0
  retq


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223660 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-08 14:36:51 +00:00
..
Analysis Revert a part of r223583, for now. It seems causing different emission between stage2(gcc-clang) and stage3 clang. Investigating. 2014-12-08 02:07:22 +00:00
AsmParser IR: Add missing tests for function-local metadata 2014-12-07 17:56:16 +00:00
Bitcode IR: Disallow function-local metadata attachments 2014-12-06 02:29:44 +00:00
CodeGen SelectionDAG switch lowering: Replace unreachable default with most popular case. 2014-12-06 01:28:50 +00:00
DebugInfo Make DWARFAcceleratorTable::dump() const. 2014-11-20 16:21:11 +00:00
ExecutionEngine [MCJIT] Unique-ptrify the RTDyldMemoryManager member of MCJIT. NFC. 2014-12-03 00:51:19 +00:00
IR IR: Revert r223618 behaviour of MDNode::concatenate() 2014-12-07 20:32:11 +00:00
IRReader Remove unused variable. NFC. 2014-11-06 23:16:57 +00:00
LineEditor
Linker Move the ValueMap lookup inside linkFunctionBody. NFC. 2014-12-08 14:25:26 +00:00
LTO Remove StringMap::GetOrCreateValue in favor of StringMap::insert 2014-11-19 05:49:42 +00:00
MC clang-formatted ranged loops and assignment, NFC. 2014-12-04 08:30:39 +00:00
Object Add mach-o LC_RPATH support to llvm-objdump 2014-12-04 07:37:02 +00:00
Option Add an overload of getLastArgNoClaim taking two OptSpecifiers. 2014-09-12 19:42:53 +00:00
ProfileData llvm-cov: Sink some reporting logic into CoverageMapping 2014-11-14 01:50:32 +00:00
Support Silence warning: variable 'buffer' set but not used. 2014-12-04 21:36:38 +00:00
TableGen Revert r222957 "Replace std::map<K, V*> with std::map<K, V> to handle ownership and deletion of the values." 2014-11-30 01:20:17 +00:00
Target [X86] Improved lowering of packed v8i16 vector shifts by non-constant count. 2014-12-08 14:36:51 +00:00
Transforms LLVMInstrumentation requires MC since r223532. 2014-12-06 02:22:11 +00:00
CMakeLists.txt
LLVMBuild.txt
Makefile