summaryrefslogtreecommitdiffstats
path: root/lldb/tools/lldb-mi/MIUtilSystemLinux.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-09-11 04:29:03 +0000
committerRui Ueyama <ruiu@google.com>2015-09-11 04:29:03 +0000
commit5b93aa51de8380eb68abf569aa452cfc825d19bc (patch)
tree1a15a3d27bf622423a571ec8aa481b22a297b1b7 /lldb/tools/lldb-mi/MIUtilSystemLinux.cpp
parent29eedc76e16601679794faf105ae8f835d3b9597 (diff)
downloadbcm5719-llvm-5b93aa51de8380eb68abf569aa452cfc825d19bc.tar.gz
bcm5719-llvm-5b93aa51de8380eb68abf569aa452cfc825d19bc.zip
COFF: Teach ICF to merge cyclic graphs.
Previously, LLD's ICF couldn't merge cyclic graphs. That was unfortunate because, in COFF, cyclic graphs are not exceptional at all. That is pretty common. In this patch, sections are grouped by Tarjan's strongly connected component algorithm to get acyclic graphs. And then we try to merge SCCs whose outdegree is zero, and remove them from the graph. This makes other SCCs to have outdegree zero, so we can repeat the process until all SCCs are removed. When comparing two SCCs, we handle cycles properly. This algorithm works better than previous one. Previously, self-linking produced a 29.0MB executable. It now produces a 27.7MB. There's still some gap compared to MSVC linker which produces a 27.1MB executable for the same input. So the gap is narrowed, but still LLD is not on par with MSVC. I'll investigate that later. llvm-svn: 247387
Diffstat (limited to 'lldb/tools/lldb-mi/MIUtilSystemLinux.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud