llvm-project/llvm
Philip Reames b06a2ad94f [LoopVectorizer] Lower uniform loads as a single load (instead of relying on CSE)
A uniform load is one which loads from a uniform address across all lanes. As currently implemented, we cost model such loads as if we did a single scalar load + a broadcast, but the actual lowering replicates the load once per lane.

This change tweaks the lowering to use the REPLICATE strategy by marking such loads (and the computation leading to their memory operand) as uniform after vectorization. This is a useful change in itself, but it's real purpose is to pave the way for a following change which will generalize our uniformity logic.

In review discussion, there was an issue raised with coupling cost modeling with the lowering strategy for uniform inputs.  The discussion on that item remains unsettled and is pending larger architectural discussion.  We decided to move forward with this patch as is, and revise as warranted once the bigger picture design questions are settled.

Differential Revision: https://reviews.llvm.org/D91398
2020-11-23 15:32:17 -08:00
..
benchmarks
bindings Revert "[IR] add fn attr for no_stack_protector; prevent inlining on mismatch" 2020-11-17 17:27:14 -08:00
cmake [CMake] Fix ExtensionDependencies.inc with multiple extensions 2020-11-17 17:24:47 -08:00
docs [TableGen] Eliminte source location from CodeInit 2020-11-23 11:30:13 -05:00
examples llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
include Revert "[CGSCC] Detect devirtualization in more cases" 2020-11-23 13:21:05 -08:00
lib [LoopVectorizer] Lower uniform loads as a single load (instead of relying on CSE) 2020-11-23 15:32:17 -08:00
projects llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
resources
runtimes
test [LoopVectorizer] Lower uniform loads as a single load (instead of relying on CSE) 2020-11-23 15:32:17 -08:00
tools [llvm-elfabi] Emit ELF header and string table sections 2020-11-23 12:18:58 -08:00
unittests [TableGen] Eliminte source location from CodeInit 2020-11-23 11:30:13 -05:00
utils [gn build] Port f6b02ecd02 2020-11-23 21:33:46 +00:00
.clang-format
.clang-tidy
.gitattributes
.gitignore
CMakeLists.txt llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
CODE_OWNERS.TXT [CODE_OWNERS.TXT] Update to include yours truly as the TableGen owner 2020-11-12 09:49:00 -05:00
CREDITS.TXT
LICENSE.TXT
README.txt
RELEASE_TESTERS.TXT
configure
llvm.spec.in

README.txt

The LLVM Compiler Infrastructure
================================

This directory and its subdirectories contain source code for LLVM,
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 are writing a package for LLVM, see docs/Packaging.rst for our
suggestions.