llvm-project/llvm
Chandler Carruth 6f4ed077d0 [LV] Fix an issue where forming LCSSA in the place that we did would
change the set of uniform instructions in the loop causing an assert
failure.

The problem is that the legalization checking also builds data
structures mapping various facts about the loop body. The immediate
cause was the set of uniform instructions. If these then change when
LCSSA is formed, the data structures would already have been built and
become stale. The included test case triggered an assert in loop
vectorize that was reduced out of the new PM's pipeline.

The solution is to form LCSSA early enough that no information is cached
across the changes made. The only really obvious position is outside of
the main logic to vectorize the loop. This also has the advantage of
removing one case where forming LCSSA could mutate the loop but we
wouldn't track that as a "Changed" state.

If it is significantly advantageous to do some legalization checking
prior to this, we can do a more careful positioning but it seemed best
to just back off to a safe position first.

llvm-svn: 293168
2017-01-26 10:41:09 +00:00
..
bindings Fix go bindings after r289702 (hopefully, don't really know how to build 2016-12-15 06:54:29 +00:00
cmake cmake: Only sanitize use-after-scope if the host compiler supports it 2017-01-18 19:01:58 +00:00
docs LangRef: Document the allowed metadata dropping transforms. 2017-01-25 21:50:14 +00:00
examples Chapter3/KaleidoscopeJIT.h: Fix a warning. [-Wunused-lambda-capture] 2017-01-26 08:31:14 +00:00
include [TargetTransformInfo] Add override keywords to supporess -Winconsistent-missing-override. 2017-01-26 08:04:27 +00:00
lib [LV] Fix an issue where forming LCSSA in the place that we did would 2017-01-26 10:41:09 +00:00
projects
resources
runtimes [CMake] Handle common options for runtimes build 2017-01-10 19:47:05 +00:00
test [LV] Fix an issue where forming LCSSA in the place that we did would 2017-01-26 10:41:09 +00:00
tools gold-plugin: Simplify naming of object files created with save-temps or obj-path. 2017-01-26 02:07:05 +00:00
unittests Fix for r293104, which renamed a directory. 2017-01-25 22:48:57 +00:00
utils Reinstate "r292904 - [lit] Allow boolean expressions in REQUIRES and XFAIL 2017-01-25 02:26:03 +00:00
.arcconfig
.clang-format
.clang-tidy
.gitignore [AVR] Add the integrated testing tool to the .gitignore 2016-12-14 11:47:14 +00:00
CMakeLists.txt Bump trunk version to 5.0.0svn 2017-01-12 21:22:36 +00:00
CODE_OWNERS.TXT
CREDITS.TXT Revert revision 289721. 2016-12-14 21:58:42 +00:00
LICENSE.TXT Bump year to 2017 in LICENSE.txt 2017-01-12 18:02:42 +00:00
LLVMBuild.txt
README.txt
RELEASE_TESTERS.TXT Update the release tester for MIPS. NFC. 2017-01-17 11:00:28 +00:00
configure
llvm.spec.in

README.txt

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

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.