aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/SafeStack.cpp
diff options
context:
space:
mode:
authorWenlei He <aktoon@gmail.com>2020-05-26 13:53:35 -0700
committerWenlei He <aktoon@gmail.com>2020-06-14 19:54:52 -0700
commitb559535a3a21fa1f3ee20fbcd4bad4bc840d0a49 (patch)
tree7587af69d5ea8ad2b128578818c7bbe4ce7ee73f /llvm/lib/CodeGen/SafeStack.cpp
parent74abe500719e92f8ad6678857b801d2fa69f1ae7 (diff)
downloadllvm-b559535a3a21fa1f3ee20fbcd4bad4bc840d0a49.zip
llvm-b559535a3a21fa1f3ee20fbcd4bad4bc840d0a49.tar.gz
llvm-b559535a3a21fa1f3ee20fbcd4bad4bc840d0a49.tar.bz2
[NewPM] Avoid redundant CGSCC run for updated SCC
Summary: When an SCC got split due to inlining, we have two mechanisms for reprocessing the updated SCC, first is UR.UpdatedC that repeatedly rerun the new, current SCC; second is a worklist for all newly split SCCs. We can avoid rerun of the same SCC when the SCC is set to be processed by both mechanisms *back to back*. In pathological cases, such redundant rerun could cause exponential size growth due to inlining along cycles, even when there's no SCC mutation and hence convergence is not a problem. Note that it's ok to have SCC updated and rerun immediately, and also in the work list if we have actually moved an SCC to be topologically "below" the current one due to merging. In that case, we will need to revisit the current SCC after those moved SCCs. For that reason, the redundant avoidance here only targets back to back rerun of the same SCC - the case described by the now removed FIXME comment. Reviewers: chandlerc, wmi Subscribers: llvm-commits, hoy Tags: #llvm Differential Revision: https://reviews.llvm.org/D80589
Diffstat (limited to 'llvm/lib/CodeGen/SafeStack.cpp')
0 files changed, 0 insertions, 0 deletions