[PATCH] D33984: [ScalarEvolution] Apply Depth limit to getMulExpr
Max Kazantsev via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 7 05:07:12 PDT 2017
mkazantsev created this revision.
Herald added a subscriber: mzolotukhin.
This is a fix for PR33292 that shows a case of extremely long compilation
of a single .c file with clang, with most time spent within SCEV.
We have a mechanism of limiting recursion depth for getAddExpr to avoid
long analysis in SCEV. However, there are calls from getAddExpr to getMulExpr
and back that do not propagate the info about depth. As result of this, a chain
getAddExpr -> ... .> getAddExpr -> getMulExpr -> getAddExpr -> ... -> getAddExpr
can be extremely long, with every segment of getAddExpr's being up to max depth long.
This leads either to long compilation or crash by stack overflow. We face this situation while
analyzing big SCEVs in the test of PR33292.
This patch applies the same limit on max expression depth for getAddExpr and getMulExpr.
https://reviews.llvm.org/D33984
Files:
include/llvm/Analysis/ScalarEvolution.h
lib/Analysis/ScalarEvolution.cpp
lib/Transforms/Utils/SimplifyIndVar.cpp
test/Analysis/ScalarEvolution/limit-depth.ll
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33984.101696.patch
Type: text/x-patch
Size: 30279 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170607/dcd082a9/attachment.bin>
More information about the llvm-commits
mailing list