[llvm] [ThinLTO] optimize propagateAttributes performance (PR #132917)
Zhaoxuan Jiang via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 8 01:24:11 PDT 2025
nocchijiang wrote:
Applying the shift does help, but it is still far from acceptable.
```
Weight Self Weight Symbol Name
9.94 min 56.3% 929.00 ms llvm::ModuleSummaryIndex::propagateAttributes(llvm::DenseSet<unsigned long long, llvm::DenseMapInfo<unsigned long long, void>> const&)
9.79 min 55.5% 1.96 s propagateAttributesToRefs(llvm::GlobalValueSummary*, llvm::DenseSet<llvm::ValueInfo, llvm::DenseMapInfo<llvm::ValueInfo, void>>&)
8.93 min 50.6% 0 s llvm::detail::DenseSetImpl<llvm::ValueInfo, llvm::DenseMap<llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>, llvm::DenseMapInfo<llvm::ValueInfo, void>>::insert(llvm::ValueInfo const&)
8.93 min 50.6% 0 s std::__1::pair<llvm::DenseMapIterator<llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>, false>, bool> llvm::DenseMapBase<llvm::DenseMap<llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>, llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>::try_emplace<llvm::detail::DenseSetEmpty&>(llvm::ValueInfo const&, llvm::detail::DenseSetEmpty&)
8.93 min 50.6% 0 s bool llvm::DenseMapBase<llvm::DenseMap<llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>, llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>::LookupBucketFor<llvm::ValueInfo>(llvm::ValueInfo const&, llvm::detail::DenseSetPair<llvm::ValueInfo>*&)
8.93 min 50.6% 8.93 min bool llvm::DenseMapBase<llvm::DenseMap<llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>, llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>::LookupBucketFor<llvm::ValueInfo>(llvm::ValueInfo const&, llvm::detail::DenseSetPair<llvm::ValueInfo> const*&) const
```
Wrapping the shifted value in `hash_value()` does the trick:
```
Weight Self Weight Symbol Name
5.13 s 1.1% 577.00 ms llvm::ModuleSummaryIndex::propagateAttributes(llvm::DenseSet<unsigned long long, llvm::DenseMapInfo<unsigned long long, void>> const&)
2.54 s 0.5% 1.57 s propagateAttributesToRefs(llvm::GlobalValueSummary*, llvm::DenseSet<llvm::ValueInfo, llvm::DenseMapInfo<llvm::ValueInfo, void>>&)
456.00 ms 0.1% 0 s llvm::detail::DenseSetImpl<llvm::ValueInfo, llvm::DenseMap<llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>, llvm::DenseMapInfo<llvm::ValueInfo, void>>::contains(llvm::ValueInfo const&) const
456.00 ms 0.1% 50.00 ms llvm::DenseMapBase<llvm::DenseMap<llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>, llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>::find(llvm::ValueInfo const&) const
406.00 ms 0.0% 393.00 ms bool llvm::DenseMapBase<llvm::DenseMap<llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>, llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>::LookupBucketFor<llvm::ValueInfo>(llvm::ValueInfo const&, llvm::detail::DenseSetPair<llvm::ValueInfo> const*&) const
12.00 ms 0.0% 2.00 ms llvm::DenseMapBase<llvm::DenseMap<llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>, llvm::ValueInfo, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::ValueInfo, void>, llvm::detail::DenseSetPair<llvm::ValueInfo>>::getHashValue(llvm::ValueInfo const&)
10.00 ms 0.0% 0 s llvm::DenseMapInfo<llvm::ValueInfo, void>::getHashValue(llvm::ValueInfo)
10.00 ms 0.0% 0 s std::__1::enable_if<is_integral_or_enum<unsigned long>::value, llvm::hash_code>::type llvm::hash_value<unsigned long>(unsigned long)
```
I will update the patch as per @nikic 's great suggestion.
https://github.com/llvm/llvm-project/pull/132917
More information about the llvm-commits
mailing list