diff options
| author | Reid Kleckner <rnk@google.com> | 2019-11-22 19:17:34 -0800 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2019-11-22 19:26:34 -0800 |
| commit | 285cf9a84e1bd2f601b097fc29f75ea4c7779eba (patch) | |
| tree | 16bc466af3b3abe3f3198cf69183d347c18f266a /llvm | |
| parent | 20d51b2f14ac4488f684f8fc57cb0ba718a6b91d (diff) | |
| download | bcm5719-llvm-285cf9a84e1bd2f601b097fc29f75ea4c7779eba.tar.gz bcm5719-llvm-285cf9a84e1bd2f601b097fc29f75ea4c7779eba.zip | |
[IR] Move global_objects and global_values out of line, NFC
This saves 2.4% of CPU time compiling opt, according to
ClangBuildAnalyzer. These helpers being inlined in the header was
triggering the instantiation of concat_iterator in every TU using
Module.h (~1118 TUs): https://reviews.llvm.org/P8171$35
**** Templates that took longest to instantiate:
76187 ms: llvm::AnalysisManager<llvm::Function>::getResult<llvm::TargetLibrary... (396 times, avg 192 ms)
73609 ms: llvm::AnalysisManager<llvm::Function>::getResultImpl (420 times, avg 175 ms)
49657 ms: llvm::detail::concat_range<llvm::GlobalValue, llvm::iterator_range<l... (1118 times, avg 44 ms)
49376 ms: llvm::detail::concat_range<const llvm::GlobalValue, llvm::iterator_r... (1118 times, avg 44 ms)
48167 ms: llvm::iterator_range<llvm::concat_iterator<llvm::GlobalValue, llvm::... (1118 times, avg 43 ms)
48125 ms: llvm::iterator_range<llvm::concat_iterator<const llvm::GlobalValue, ... (1118 times, avg 43 ms)
48061 ms: llvm::concat_iterator<llvm::GlobalValue, llvm::ilist_iterator<llvm::... (1118 times, avg 42 ms)
48014 ms: llvm::concat_iterator<const llvm::GlobalValue, llvm::ilist_iterator<... (1118 times, avg 42 ms)
...
I haven't measured, but I don't think these helpers are performance
critical. The iterator advance call can still be inlined, which is what
matters for performance.
Remove global_(objects|values)_(begin|end), since they were dead and
would have to be out of line anyway.
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/include/llvm/IR/Module.h | 39 | ||||
| -rw-r--r-- | llvm/lib/IR/Module.cpp | 16 |
2 files changed, 20 insertions, 35 deletions
diff --git a/llvm/include/llvm/IR/Module.h b/llvm/include/llvm/IR/Module.h index 59331142766..68cd583c136 100644 --- a/llvm/include/llvm/IR/Module.h +++ b/llvm/include/llvm/IR/Module.h @@ -660,24 +660,8 @@ public: concat_iterator<const GlobalObject, const_iterator, const_global_iterator>; - iterator_range<global_object_iterator> global_objects() { - return concat<GlobalObject>(functions(), globals()); - } - iterator_range<const_global_object_iterator> global_objects() const { - return concat<const GlobalObject>(functions(), globals()); - } - - global_object_iterator global_object_begin() { - return global_objects().begin(); - } - global_object_iterator global_object_end() { return global_objects().end(); } - - const_global_object_iterator global_object_begin() const { - return global_objects().begin(); - } - const_global_object_iterator global_object_end() const { - return global_objects().end(); - } + iterator_range<global_object_iterator> global_objects(); + iterator_range<const_global_object_iterator> global_objects() const; using global_value_iterator = concat_iterator<GlobalValue, iterator, global_iterator, alias_iterator, @@ -686,23 +670,8 @@ public: concat_iterator<const GlobalValue, const_iterator, const_global_iterator, const_alias_iterator, const_ifunc_iterator>; - iterator_range<global_value_iterator> global_values() { - return concat<GlobalValue>(functions(), globals(), aliases(), ifuncs()); - } - iterator_range<const_global_value_iterator> global_values() const { - return concat<const GlobalValue>(functions(), globals(), aliases(), - ifuncs()); - } - - global_value_iterator global_value_begin() { return global_values().begin(); } - global_value_iterator global_value_end() { return global_values().end(); } - - const_global_value_iterator global_value_begin() const { - return global_values().begin(); - } - const_global_value_iterator global_value_end() const { - return global_values().end(); - } + iterator_range<global_value_iterator> global_values(); + iterator_range<const_global_value_iterator> global_values() const; /// @} /// @name Named Metadata Iteration diff --git a/llvm/lib/IR/Module.cpp b/llvm/lib/IR/Module.cpp index 25efd009194..271ae126d72 100644 --- a/llvm/lib/IR/Module.cpp +++ b/llvm/lib/IR/Module.cpp @@ -381,6 +381,22 @@ void Module::debug_compile_units_iterator::SkipNoDebugCUs() { ++Idx; } +iterator_range<Module::global_object_iterator> Module::global_objects() { + return concat<GlobalObject>(functions(), globals()); +} +iterator_range<Module::const_global_object_iterator> +Module::global_objects() const { + return concat<const GlobalObject>(functions(), globals()); +} + +iterator_range<Module::global_value_iterator> Module::global_values() { + return concat<GlobalValue>(functions(), globals(), aliases(), ifuncs()); +} +iterator_range<Module::const_global_value_iterator> +Module::global_values() const { + return concat<const GlobalValue>(functions(), globals(), aliases(), ifuncs()); +} + //===----------------------------------------------------------------------===// // Methods to control the materialization of GlobalValues in the Module. // |

