aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Basic/Version.cpp
diff options
context:
space:
mode:
authorMax Kazantsev <max.kazantsev@azul.com>2019-01-31 06:19:25 +0000
committerMax Kazantsev <max.kazantsev@azul.com>2019-01-31 06:19:25 +0000
commitb37419ef6629b7c32f0a4bd309f2a2aed6f514fb (patch)
tree67634054ae5f4649a6466d737984795e45511371 /clang/lib/Basic/Version.cpp
parent108b892939938ff289cc4f18cceef2ff9b4f470f (diff)
downloadllvm-b37419ef6629b7c32f0a4bd309f2a2aed6f514fb.zip
llvm-b37419ef6629b7c32f0a4bd309f2a2aed6f514fb.tar.gz
llvm-b37419ef6629b7c32f0a4bd309f2a2aed6f514fb.tar.bz2
[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
Diffstat (limited to 'clang/lib/Basic/Version.cpp')
0 files changed, 0 insertions, 0 deletions