aboutsummaryrefslogtreecommitdiff
path: root/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
diff options
context:
space:
mode:
authorAnna Zaks <ganna@apple.com>2012-12-17 20:08:51 +0000
committerAnna Zaks <ganna@apple.com>2012-12-17 20:08:51 +0000
commit7959671d456c916706a5f61af609d8f1fc95decf (patch)
treea1e091fa3685d92cb807bb2f44eb3f273c969cc4 /lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
parentd397cfef01d49a41554309d67ea26340c39e1e94 (diff)
[analyzer] Implement "do not inline large functions many times"
performance heuristic After inlining a function with more than 13 basic blocks 32 times, we are not going to inline it anymore. The idea is that inlining large functions leads to drastic performance implications. Since the function has already been inlined, we know that we've analyzed it in many contexts. The following metrics are used: - Large function is a function with more than 13 basic blocks (we should switch to another metric, like cyclomatic complexity) - We consider that we've inlined a function many times if it's been inlined 32 times. This number is configurable with -analyzer-config max-times-inline-large=xx This heuristic addresses a performance regression introduced with inlining on one benchmark. The analyzer on this benchmark became 60 times slower with inlining turned on. The heuristic allows us to analyze it in 24% of the time. The performance improvements on the other benchmarks I've tested with are much lower - under 10%, which is expected. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170361 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp')
0 files changed, 0 insertions, 0 deletions