1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 11:02:59 +02:00
Go to file
Max Kazantsev 1f510bd4c6 [SCEV] Prohibit SCEV transformations for huge SCEVs
Currently SCEV attempts to limit transformations so that they do not work with
big SCEVs (that may take almost infinite compile time). But for this, it uses heuristics
such as recursion depth and number of operands, which do not give us a guarantee
that we don't actually have big SCEVs. This situation is still possible, though it is not
likely to happen. However, the bug PR33494 showed a bunch of simple corner case
tests where we still produce huge SCEVs, even not reaching big recursion depth etc.

This patch introduces a concept of 'huge' SCEVs. A SCEV is huge if its expression
size (intoduced in D35989) exceeds some threshold value. We prohibit optimizing
transformations if any of SCEVs we are dealing with is huge. This gives us a reliable
check that we don't spend too much time working with them.

As the next step, we can possibly get rid of old limiting mechanisms, such as recursion
depth thresholds.

Differential Revision: https://reviews.llvm.org/D35990
Reviewed By: reames

llvm-svn: 352728
2019-01-31 06:19:25 +00:00
benchmarks
bindings Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
cmake [CMake] Accept ENTITLEMENTS in llvm_add_library() 2019-01-30 15:10:08 +00:00
docs [libFuzzer] update docs 2019-01-31 01:47:29 +00:00
examples Fix some warnings on MSVC 2019-01-27 18:41:40 +00:00
include Fix missing C++ mode comment in header 2019-01-31 04:27:17 +00:00
lib [SCEV] Prohibit SCEV transformations for huge SCEVs 2019-01-31 06:19:25 +00:00
projects Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
resources
runtimes Revert "[CMake] Use __libc_start_main rather than fopen when checking for C library" 2019-01-28 19:26:41 +00:00
test [SCEV] Prohibit SCEV transformations for huge SCEVs 2019-01-31 06:19:25 +00:00
tools [llvm-objcopy][NFC] More error propagation (linkToBuildIdDir) 2019-01-30 18:13:30 +00:00
unittests GlobalISel: Allow bitcount ops to have different result type 2019-01-31 02:09:57 +00:00
utils Reland "gn build: Add BPF target." 2019-01-31 00:42:02 +00:00
.arcconfig
.clang-format
.clang-tidy
.gitattributes
.gitignore gitignore: ignore clangd index files. 2019-01-25 14:05:18 +00:00
CMakeLists.txt Revert r351833 and r352250. 2019-01-29 13:43:22 +00:00
CODE_OWNERS.TXT [llvm-mca] Move llvm-mca library to llvm/lib/MCA. 2018-12-17 08:08:31 +00:00
configure
CREDITS.TXT Remove a period from CREDITS.TXT (testing email change). NFC 2019-01-19 09:07:38 +00:00
LICENSE.TXT Fix typos throughout the license files that somehow I and my reviewers 2019-01-21 09:52:34 +00:00
llvm.spec.in Update structured references to the license to the new license. 2019-01-19 11:30:51 +00:00
LLVMBuild.txt Update the file headers across all of the LLVM projects in the monorepo 2019-01-19 08:50:56 +00:00
README.txt Test commit. 2018-09-22 01:01:03 +00:00
RELEASE_TESTERS.TXT Update the list of platforms & archs 2018-12-16 14:47:16 +00:00

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.