<!DOCTYPE html><html><head><title></title><style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Sun, Jan 29, 2023, at 09:12, Kazu Hirata via llvm-commits wrote:<br></div><blockquote type="cite" id="qt" style=""><div><br></div><div>Author: Kazu Hirata<br></div><div>Date: 2023-01-29T00:12:53-08:00<br></div><div>New Revision: 54971c8a39e8b682e7a042eee33f94a8283d8305<br></div><div><br></div><div>URL: <a href="https://github.com/llvm/llvm-project/commit/54971c8a39e8b682e7a042eee33f94a8283d8305">https://github.com/llvm/llvm-project/commit/54971c8a39e8b682e7a042eee33f94a8283d8305</a><br></div><div>DIFF: <a href="https://github.com/llvm/llvm-project/commit/54971c8a39e8b682e7a042eee33f94a8283d8305.diff">https://github.com/llvm/llvm-project/commit/54971c8a39e8b682e7a042eee33f94a8283d8305.diff</a><br></div><div><br></div><div>LOG: [llvm] Use llvm::bit_ceil (NFC)<br></div><div><br></div><div>If X is nonzero, NextPowerOf2(X - 1) is equivalent to<br></div><div>llvm::bit_ceil(X). In this patch, std::max guarantees that X is<br></div><div>nonzero.<br></div></blockquote><div><br></div><div>This causes a measurable compile-time regression: <a href="https://llvm-compile-time-tracker.com/compare.php?from=0de61934a37180d6028852740eaa0e9e409d001a&to=54971c8a39e8b682e7a042eee33f94a8283d8305&stat=instructions:u">https://llvm-compile-time-tracker.com/compare.php?from=0de61934a37180d6028852740eaa0e9e409d001a&to=54971c8a39e8b682e7a042eee33f94a8283d8305&stat=instructions:u</a><br></div><div><br></div><div>The DenseMap changes should probably be reverted, as they are performance-critical.<br></div><div><br></div><div>Regards,<br></div><div>Nikita<br></div><div><br></div><blockquote type="cite" id="qt" style=""><div><br></div><div>Added: <br></div><div> <br></div><div><br></div><div>Modified: <br></div><div> llvm/include/llvm/ADT/DenseMap.h<br></div><div> llvm/lib/Transforms/Utils/SimplifyCFG.cpp<br></div><div><br></div><div>Removed: <br></div><div> <br></div><div><br></div><div><br></div><div>################################################################################<br></div><div>diff --git a/llvm/include/llvm/ADT/DenseMap.h b/llvm/include/llvm/ADT/DenseMap.h<br></div><div>index 7adc6710cfa8..9a6852646268 100644<br></div><div>--- a/llvm/include/llvm/ADT/DenseMap.h<br></div><div>+++ b/llvm/include/llvm/ADT/DenseMap.h<br></div><div>@@ -803,7 +803,7 @@ class DenseMap : public DenseMapBase<DenseMap<KeyT, ValueT, KeyInfoT, BucketT>,<br></div><div> unsigned OldNumBuckets = NumBuckets;<br></div><div> BucketT *OldBuckets = Buckets;<br></div><div> <br></div><div>- allocateBuckets(std::max<unsigned>(64, static_cast<unsigned>(NextPowerOf2(AtLeast-1))));<br></div><div>+ allocateBuckets(llvm::bit_ceil(std::max(64u, AtLeast)));<br></div><div> assert(Buckets);<br></div><div> if (!OldBuckets) {<br></div><div> this->BaseT::initEmpty();<br></div><div>@@ -1042,7 +1042,7 @@ class SmallDenseMap<br></div><div> <br></div><div> void grow(unsigned AtLeast) {<br></div><div> if (AtLeast > InlineBuckets)<br></div><div>- AtLeast = std::max<unsigned>(64, NextPowerOf2(AtLeast-1));<br></div><div>+ AtLeast = llvm::bit_ceil(std::max(64u, AtLeast));<br></div><div> <br></div><div> if (Small) {<br></div><div> // First move the inline buckets into a temporary storage.<br></div><div><br></div><div>diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp<br></div><div>index 372a6698ce8a..e6d9b265dab9 100644<br></div><div>--- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp<br></div><div>+++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp<br></div><div>@@ -6552,7 +6552,7 @@ static bool SwitchToLookupTable(SwitchInst *SI, IRBuilder<> &Builder,<br></div><div> <br></div><div> // Make the mask's bitwidth at least 8-bit and a power-of-2 to avoid<br></div><div> // unnecessary illegal types.<br></div><div>- uint64_t TableSizePowOf2 = NextPowerOf2(std::max(7ULL, TableSize - 1ULL));<br></div><div>+ uint64_t TableSizePowOf2 = llvm::bit_ceil(std::max<uint64_t>(8, TableSize));<br></div><div> APInt MaskInt(TableSizePowOf2, 0);<br></div><div> APInt One(TableSizePowOf2, 1);<br></div><div> // Build bitmask; fill in a 1 bit for every case.<br></div><div><br></div><div><br></div><div> <br></div><div>_______________________________________________<br></div><div>llvm-commits mailing list<br></div><div><a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br></div><div><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br></div><div><br></div></blockquote><div><br></div></body></html>