Old fork of llvm-mirror, used on older RPCS3 builds
Go to file
Andrea Di Biagio 8887371782 [X86] Teach the backend how to lower vector shift left into multiply rather than scalarizing it.
Instead of expanding a packed shift into a sequence of scalar shifts,
the backend now tries (when possible) to convert the vector shift into a
vector multiply.

Before this change, a shift of a MVT::v8i16 vector by a
build_vector of constants was always scalarized into a long sequence of "vector
extracts + scalar shifts + vector insert".
With this change, if there is SSE2 support, we emit a single vector multiply.

This change also affects SSE4.1, AVX, AVX2 shifts:
 - A shift of a MVT::v4i32 vector by a build_vector of non uniform constants
is now lowered when possible into a single SSE4.1 vector multiply.
 - Packed v16i16 shift left by constant build_vector are now expanded when
possible into a single AVX2 vpmullw.
This change also improves the lowering of AVX512f vector shifts.

Added test CodeGen/X86/vec_shift6.ll with some code examples that are affected
by this change.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201271 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-12 23:42:28 +00:00
autoconf Add version, arch, system libs, and targets to Makefile.config 2014-02-09 16:36:42 +00:00
bindings Makefile.ocaml: Tweak to use --system-libs. 2013-12-20 00:36:59 +00:00
cmake Teach tablegen() macro to check needed variables 2014-02-12 11:50:11 +00:00
docs Add a note about using "Differential Revision:" in commit messages 2014-02-11 16:58:03 +00:00
examples Don't try to build ExceptionDemo on ARM. 2014-02-12 21:47:15 +00:00
include [Stackmaps] Fix the ID type to be i64 also for stackmaps (as we claim in the documenation) 2014-02-12 22:17:10 +00:00
lib [X86] Teach the backend how to lower vector shift left into multiply rather than scalarizing it. 2014-02-12 23:42:28 +00:00
projects llvm/projects/CMakeLists.txt: Add dragonegg. 2014-01-24 12:53:08 +00:00
test [X86] Teach the backend how to lower vector shift left into multiply rather than scalarizing it. 2014-02-12 23:42:28 +00:00
tools VS Integration: install toolsets for x64 too (PR18738) 2014-02-12 23:26:29 +00:00
unittests Extend RTDyld API to enable optionally precomputing the total amount of memory 2014-02-12 21:30:07 +00:00
utils Remove special case filtering for instructions with lock prefix as they are all marked with isCodeGenOnly already. 2014-02-12 08:09:20 +00:00
.arcconfig
.clang-format Add a clang-format file so that the tool can automatically detect the 2013-09-02 07:19:04 +00:00
.gitignore Added .DS_Store entry in .gitignore for ignoring .DS_Store files in the source 2014-01-25 15:15:16 +00:00
CMakeLists.txt Fix LLVM install rules to not set permissions on include/ 2014-02-10 10:50:55 +00:00
CODE_OWNERS.TXT Update email address. 2013-12-04 09:42:49 +00:00
configure Add version, arch, system libs, and targets to Makefile.config 2014-02-09 16:36:42 +00:00
CREDITS.TXT Fix documentation typos 2013-12-20 00:33:39 +00:00
LICENSE.TXT Update the copyright credits -- Happy new year 2014! 2014-01-01 08:27:31 +00:00
llvm.spec.in
LLVMBuild.txt Remove the very substantial, largely unmaintained legacy PGO 2013-10-02 15:42:23 +00:00
Makefile Provide CMake package modules in install tree 2014-02-09 16:37:02 +00:00
Makefile.common
Makefile.config.in Add version, arch, system libs, and targets to Makefile.config 2014-02-09 16:36:42 +00:00
Makefile.rules Provide CMake package modules in install tree 2014-02-09 16:37:02 +00:00
README.txt Revert "Test commit to check e-mail address. Please discard this." 2013-10-04 10:59:13 +00:00

Low Level Virtual Machine (LLVM)
================================

This directory and its subdirectories contain source code for the Low Level
Virtual Machine, a toolkit for the construction of highly optimized compilers,
optimizers, and runtime environments.

LLVM is open source software. You may freely distribute it under the terms of
the license agreement found in LICENSE.txt.

Please see the documentation provided in docs/ for further
assistance with LLVM, and in particular docs/GettingStarted.rst for getting
started with LLVM and docs/README.txt for an overview of LLVM's
documentation setup.

If you're writing a package for LLVM, see docs/Packaging.rst for our
suggestions.