This is an archive of the discontinued LLVM Phabricator instance.

[CodeExtractor] Factor out and reuse shrinkwrap analysis
ClosedPublic

Authored by vsk on Oct 7 2019, 5:53 PM.

Details

Summary

Factor out CodeExtractor's analysis of allocas (for shrinkwrapping
purposes), and allow the analysis to be reused.

This resolves a quadratic compile-time bug observed when compiling
AMDGPUDisassembler.cpp.o.

Pre-patch (Release + LTO clang):

 ---User Time---   --System Time--   --User+System--   ---Wall Time---  --- Name ---
176.5278 ( 57.8%)   0.4915 ( 18.5%)  177.0192 ( 57.4%)  177.4112 ( 57.3%)  Hot Cold Splitting

Post-patch (ReleaseAsserts clang):

 ---User Time---   --System Time--   --User+System--   ---Wall Time---  --- Name ---
1.4051 (  3.3%)   0.0079 (  0.3%)   1.4129 (  3.2%)   1.4129 (  3.2%)  Hot Cold Splitting

Testing: check-llvm, and comparing the AMDGPUDisassembler.cpp.o binary
pre- vs. post-patch.

An alternate approach is to hide CodeExtractorAnalysisCache from clients
of CodeExtractor, and to recompute the analysis from scratch inside of
CodeExtractor::extractCodeRegion(). This eliminates some redundant work
in the shrinkwrapping legality check. However, some clients continue to
exhibit O(n^2) compile time behavior as computing the analysis is O(n).

rdar://55912966

Diff Detail

Event Timeline

vsk created this revision.Oct 7 2019, 5:53 PM
Herald added a project: Restricted Project. · View Herald TranscriptOct 7 2019, 5:53 PM
vsk updated this revision to Diff 223711.Oct 7 2019, 6:06 PM
  • Add some documentation.
davidxl accepted this revision.Oct 8 2019, 9:46 AM

lgtm

This revision is now accepted and ready to land.Oct 8 2019, 9:46 AM
This revision was automatically updated to reflect the committed changes.