[llvm] [NFC][MC][DecoderEmitter] Simplify loop to find the best filter (PR #156237)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Aug 31 05:34:02 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-tablegen
Author: Rahul Joshi (jurahul)
<details>
<summary>Changes</summary>
We can just use `max_element` on the array of filters.
---
Full diff: https://github.com/llvm/llvm-project/pull/156237.diff
1 Files Affected:
- (modified) llvm/utils/TableGen/DecoderEmitter.cpp (+6-19)
``````````diff
diff --git a/llvm/utils/TableGen/DecoderEmitter.cpp b/llvm/utils/TableGen/DecoderEmitter.cpp
index 98569abfbb1a4..671cef6fae390 100644
--- a/llvm/utils/TableGen/DecoderEmitter.cpp
+++ b/llvm/utils/TableGen/DecoderEmitter.cpp
@@ -1473,26 +1473,13 @@ FilterChooser::findBestFilter(ArrayRef<bitAttr_t> BitAttrs, bool AllowMixed,
// We have finished with the filter processings. Now it's time to choose
// the best performing filter.
- unsigned BestIndex = 0;
- bool AllUseless = true;
- unsigned BestScore = 0;
-
- for (const auto &[Idx, Filter] : enumerate(Filters)) {
- unsigned Usefulness = Filter->usefulness();
-
- if (Usefulness)
- AllUseless = false;
-
- if (Usefulness > BestScore) {
- BestIndex = Idx;
- BestScore = Usefulness;
- }
- }
-
- if (AllUseless)
+ auto MaxIt = llvm::max_element(Filters, [](const std::unique_ptr<Filter> &A,
+ const std::unique_ptr<Filter> &B) {
+ return A->usefulness() < B->usefulness();
+ });
+ if (MaxIt == Filters.end() || (*MaxIt)->usefulness() == 0)
return nullptr;
-
- return std::move(Filters[BestIndex]);
+ return std::move(*MaxIt);
}
std::unique_ptr<Filter> FilterChooser::findBestFilter() const {
``````````
</details>
https://github.com/llvm/llvm-project/pull/156237
More information about the llvm-commits
mailing list