forked from OSchip/llvm-project
7376ae88eb
invalidated SCCs even when we do not have an updated SCC to redirect towards. This comes up in a fairly subtle and surprising circumstance: we need to have a connected but internal node in the call graph which later becomes a disconnected island, and then gets deleted. All of this needs to happen mid-CGSCC walk. Because it is disconnected, we have no way of computing a new "current" SCC when it gets deleted. Instead, we need to explicitly check for a deleted "current" SCC and bail out of the current CGSCC step. This will bubble all the way up to the post-order walk and then resume correctly. I've included minimal tests for this bug. The specific behavior matches something we've seen in the wild with the new PM combined with ThinLTO and sample PGO, but I've not yet confirmed whether this is the only issue there. llvm-svn: 313242 |
||
---|---|---|
.. | ||
Inputs | ||
X86 | ||
2002-01-31-CallGraph.ll | ||
2002-02-24-InlineBrokePHINodes.ll | ||
2002-03-11-ConstPropCrash.ll | ||
2003-02-19-LoopInfoNestingBug.ll | ||
2004-08-16-PackedConstantInlineStore.ll | ||
2004-08-16-PackedGlobalConstant.ll | ||
2004-08-16-PackedSelect.ll | ||
2004-08-16-PackedSimple.ll | ||
2004-08-20-PackedControlFlow.ll | ||
2006-02-05-PassManager.ll | ||
2007-04-24-eliminate-mostly-empty-blocks.ll | ||
2007-06-05-PassID.ll | ||
2007-06-28-PassManager.ll | ||
2007-09-10-PassManager.ll | ||
2008-02-14-PassManager.ll | ||
2008-06-04-FieldSizeInPacked.ll | ||
2008-10-06-RemoveDeadPass.ll | ||
2008-10-15-MissingSpace.ll | ||
2009-03-31-CallGraph.ll | ||
2009-06-05-no-implicit-float.ll | ||
2009-09-14-function-elements.ll | ||
2010-05-06-Printer.ll | ||
FileCheck-space.txt | ||
ResponseFile.ll | ||
attribute-comment.ll | ||
bcanalyzer-block-info.txt | ||
can-execute.txt | ||
cgscc-devirt-iteration.ll | ||
cgscc-disconnected-invalidation.ll | ||
cgscc-iterate-function-mutation.ll | ||
cgscc-libcall-update.ll | ||
cgscc-observe-devirt.ll | ||
cleanup-lcssa.ll | ||
close-stderr.ll | ||
constant-fold-gep-address-spaces.ll | ||
constant-fold-gep.ll | ||
debugcounter-newgvn.ll | ||
debugcounter-predicateinfo.ll | ||
extract-alias.ll | ||
extract-linkonce.ll | ||
extract-weak-odr.ll | ||
extract.ll | ||
invalid-commandline-option.ll | ||
invariant.group.barrier.ll | ||
lint.ll | ||
lit-globbing.ll | ||
lit-quoting.txt | ||
lit-unicode.txt | ||
llvm-nm-without-aliases.ll | ||
loop-pass-ordering.ll | ||
loop-pm-invalidation.ll | ||
new-pass-manager.ll | ||
new-pm-defaults.ll | ||
new-pm-lto-defaults.ll | ||
new-pm-pgo.ll | ||
new-pm-thinlto-defaults.ll | ||
opt-bisect-helper.py | ||
opt-bisect-legacy-pass-manager.ll | ||
opt-override-mcpu-mattr.ll | ||
opt-twice.ll | ||
optimization-remarks-inline.ll | ||
optimization-remarks-invalidation.ll | ||
optimization-remarks-lazy-bfi.ll | ||
optimize-options.ll | ||
pass-pipeline-parsing.ll | ||
pass-pipelines.ll | ||
pipefail.txt | ||
pr32085.ll | ||
spir_cc.ll | ||
statistic.ll | ||
umask.ll | ||
writing-to-stdout.ll |