[CallGraphUpdater] Properly remove strongly connected components (oldPM)
authorJohannes Doerfert <johannes@jdoerfert.de>
Sun, 12 Apr 2020 16:52:06 +0000 (11:52 -0500)
committerJohannes Doerfert <johannes@jdoerfert.de>
Wed, 15 Apr 2020 23:38:49 +0000 (18:38 -0500)
commit7ec8d79385cfb47a4fc1ae00ee01d19d52d7fba6
tree294879d47b5a453d98f86cdbdef9742309b70d14
parentf17a85cf362c96b0e501402049ffe16b97c093a2
[CallGraphUpdater] Properly remove strongly connected components (oldPM)

Summary:
The old code did eliminate references from and to functions that were
about to be deleted only just before we deleted them. This can cause
references from other functions that are supposed to be deleted to still
exist, depending on the order. If the functions form a strongly
connected component the problem manifests regardless of the order in
which we try to actually delete the functions.

This patch introduces a two step deletion. First we remove all
references and then we delete the function. Note that this only affects
the old call graph. There should not be any functional changes if no old
style call graph was given.

To test this we delete two strongly connected functions instead of one
in an existing test.

Reviewers: hfinkel

Subscribers: hiraditya, bollu, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D77975
llvm/lib/Transforms/Utils/CallGraphUpdater.cpp
llvm/unittests/IR/LegacyPassManagerTest.cpp