[ThinLTO] Make inline assembly handling more efficient in summary
authorTeresa Johnson <tejohnson@google.com>
Mon, 14 Nov 2016 16:40:19 +0000 (16:40 +0000)
committerTeresa Johnson <tejohnson@google.com>
Mon, 14 Nov 2016 16:40:19 +0000 (16:40 +0000)
commitd5033a4576f8dabf3a4c35d0534aa83dde744098
treef38710d8e07d516f8d2a194aa596ee436d7391b3
parentd83eb34ee7af55baa0d76b4fc0fdde25dd7e958c
[ThinLTO] Make inline assembly handling more efficient in summary

Summary:
The change in r285513 to prevent exporting of locals used in
inline asm added all locals in the llvm.used set to the reference
set of functions containing inline asm. Since these locals were marked
NoRename, this automatically prevented importing of the function.

Unfortunately, this caused an explosion in the summary reference lists
in some cases. In my particular example, it happened for a large protocol
buffer generated C++ file, where many of the generated functions
contained an inline asm call. It was exacerbated when doing a ThinLTO
PGO instrumentation build, where the PGO instrumentation included
thousands of private __profd_* values that were added to llvm.used.

We really only need to include a single llvm.used local (NoRename) value
in the reference list of a function containing inline asm to block it
being imported. However, it seems cleaner to add a flag to the summary
that explicitly describes this situation, which is what this patch does.

Reviewers: mehdi_amini

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D26402

llvm-svn: 286840
llvm/include/llvm/IR/ModuleSummaryIndex.h
llvm/lib/Analysis/ModuleSummaryAnalysis.cpp
llvm/lib/Bitcode/Reader/BitcodeReader.cpp
llvm/lib/Bitcode/Writer/BitcodeWriter.cpp
llvm/lib/Transforms/IPO/FunctionImport.cpp