-
Notifications
You must be signed in to change notification settings - Fork 13.8k
[llvm][ADT] Add wrappers to std::includes
#143297
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
@llvm/pr-subscribers-tablegen @llvm/pr-subscribers-clangd Author: Longsheng Mou (CoTinker) ChangesAdd Full diff: https://github.com/llvm/llvm-project/pull/143297.diff 8 Files Affected:
diff --git a/clang-tools-extra/clangd/refactor/Rename.cpp b/clang-tools-extra/clangd/refactor/Rename.cpp
index d9b73b83e902a..c56375b1a98d3 100644
--- a/clang-tools-extra/clangd/refactor/Rename.cpp
+++ b/clang-tools-extra/clangd/refactor/Rename.cpp
@@ -1308,7 +1308,7 @@ getMappedRanges(ArrayRef<Range> Indexed, ArrayRef<SymbolRange> Lexed) {
return std::nullopt;
}
// Fast check for the special subset case.
- if (std::includes(Indexed.begin(), Indexed.end(), Lexed.begin(), Lexed.end()))
+ if (llvm::includes(Indexed, Lexed))
return Lexed.vec();
std::vector<size_t> Best;
diff --git a/llvm/include/llvm/ADT/STLExtras.h b/llvm/include/llvm/ADT/STLExtras.h
index 897dc76a420b2..741d552c4104d 100644
--- a/llvm/include/llvm/ADT/STLExtras.h
+++ b/llvm/include/llvm/ADT/STLExtras.h
@@ -1881,6 +1881,19 @@ OutputIt move(R &&Range, OutputIt Out) {
return std::move(adl_begin(Range), adl_end(Range), Out);
}
+/// Provide wrappers to std::includes which take ranges instead of having to
+/// pass begin/end explicitly.
+template <typename R1, typename R2> bool includes(R1 &&Range1, R2 &&Range2) {
+ return std::includes(adl_begin(Range1), adl_end(Range1), adl_begin(Range2),
+ adl_end(Range2));
+}
+
+template <typename R1, typename R2, typename Compare>
+bool includes(R1 &&Range1, R2 &&Range2, Compare C) {
+ return std::includes(adl_begin(Range1), adl_end(Range1), adl_begin(Range2),
+ adl_end(Range2), C);
+}
+
namespace detail {
template <typename Range, typename Element>
using check_has_member_contains_t =
diff --git a/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp b/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
index d94a2fbb23d23..61fef1387d82a 100644
--- a/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
+++ b/llvm/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
@@ -1975,12 +1975,10 @@ Value *DFSanFunction::combineShadows(Value *V1, Value *V2,
auto V1Elems = ShadowElements.find(V1);
auto V2Elems = ShadowElements.find(V2);
if (V1Elems != ShadowElements.end() && V2Elems != ShadowElements.end()) {
- if (std::includes(V1Elems->second.begin(), V1Elems->second.end(),
- V2Elems->second.begin(), V2Elems->second.end())) {
+ if (llvm::includes(V1Elems->second, V2Elems->second)) {
return collapseToPrimitiveShadow(V1, Pos);
}
- if (std::includes(V2Elems->second.begin(), V2Elems->second.end(),
- V1Elems->second.begin(), V1Elems->second.end())) {
+ if (llvm::includes(V2Elems->second, V1Elems->second)) {
return collapseToPrimitiveShadow(V2, Pos);
}
} else if (V1Elems != ShadowElements.end()) {
diff --git a/llvm/tools/sancov/sancov.cpp b/llvm/tools/sancov/sancov.cpp
index 2cc84b47de6b9..aebb5effd0be7 100644
--- a/llvm/tools/sancov/sancov.cpp
+++ b/llvm/tools/sancov/sancov.cpp
@@ -889,8 +889,7 @@ symbolize(const RawCoverage &Data, const std::string ObjectFile) {
}
std::set<uint64_t> AllAddrs = findCoveragePointAddrs(ObjectFile);
- if (!std::includes(AllAddrs.begin(), AllAddrs.end(), Data.Addrs->begin(),
- Data.Addrs->end())) {
+ if (!llvm::includes(AllAddrs, *Data.Addrs)) {
fail("Coverage points in binary and .sancov file do not match.");
}
Coverage->Points = getCoveragePoints(ObjectFile, AllAddrs, *Data.Addrs);
diff --git a/llvm/unittests/ADT/DAGDeltaAlgorithmTest.cpp b/llvm/unittests/ADT/DAGDeltaAlgorithmTest.cpp
index 66a67d96d1532..f543947899393 100644
--- a/llvm/unittests/ADT/DAGDeltaAlgorithmTest.cpp
+++ b/llvm/unittests/ADT/DAGDeltaAlgorithmTest.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/ADT/DAGDeltaAlgorithm.h"
+#include "llvm/ADT/STLExtras.h"
#include "gtest/gtest.h"
#include <algorithm>
#include <cstdarg>
@@ -23,8 +24,7 @@ class FixedDAGDeltaAlgorithm : public DAGDeltaAlgorithm {
protected:
bool ExecuteOneTest(const changeset_ty &Changes) override {
++NumTests;
- return std::includes(Changes.begin(), Changes.end(),
- FailingSet.begin(), FailingSet.end());
+ return llvm::includes(Changes, FailingSet);
}
public:
diff --git a/llvm/unittests/ADT/DeltaAlgorithmTest.cpp b/llvm/unittests/ADT/DeltaAlgorithmTest.cpp
index 5e284129180a0..24e18f42eb33c 100644
--- a/llvm/unittests/ADT/DeltaAlgorithmTest.cpp
+++ b/llvm/unittests/ADT/DeltaAlgorithmTest.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "llvm/ADT/DeltaAlgorithm.h"
+#include "llvm/ADT/STLExtras.h"
#include "gtest/gtest.h"
#include <algorithm>
#include <cstdarg>
@@ -38,8 +39,7 @@ class FixedDeltaAlgorithm final : public DeltaAlgorithm {
protected:
bool ExecuteOneTest(const changeset_ty &Changes) override {
++NumTests;
- return std::includes(Changes.begin(), Changes.end(),
- FailingSet.begin(), FailingSet.end());
+ return llvm::includes(Changes, FailingSet);
}
public:
diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
index 9792eb41ea5d7..32098e96ce721 100644
--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
@@ -1330,8 +1330,7 @@ void AsmMatcherInfo::buildRegisterClasses(
for (const RegisterSet &RS : RegisterSets) {
ClassInfo *CI = RegisterSetClasses[RS];
for (const RegisterSet &RS2 : RegisterSets)
- if (RS != RS2 && std::includes(RS2.begin(), RS2.end(), RS.begin(),
- RS.end(), LessRecordByID()))
+ if (RS != RS2 && llvm::includes(RS2, RS, LessRecordByID()))
CI->SuperClasses.push_back(RegisterSetClasses[RS2]);
}
diff --git a/llvm/utils/TableGen/Common/CodeGenRegisters.cpp b/llvm/utils/TableGen/Common/CodeGenRegisters.cpp
index 0f9cd039b2521..d095f5313e081 100644
--- a/llvm/utils/TableGen/Common/CodeGenRegisters.cpp
+++ b/llvm/utils/TableGen/Common/CodeGenRegisters.cpp
@@ -933,9 +933,7 @@ bool CodeGenRegisterClass::Key::operator<(
static bool testSubClass(const CodeGenRegisterClass *A,
const CodeGenRegisterClass *B) {
return A->RSI.isSubClassOf(B->RSI) &&
- std::includes(A->getMembers().begin(), A->getMembers().end(),
- B->getMembers().begin(), B->getMembers().end(),
- deref<std::less<>>());
+ llvm::includes(A->getMembers(), B->getMembers(), deref<std::less<>>());
}
/// Sorting predicate for register classes. This provides a topological
@@ -1995,8 +1993,7 @@ findRegUnitSet(const std::vector<RegUnitSet> &UniqueSets,
// Return true if the RUSubSet is a subset of RUSuperSet.
static bool isRegUnitSubSet(const std::vector<unsigned> &RUSubSet,
const std::vector<unsigned> &RUSuperSet) {
- return std::includes(RUSuperSet.begin(), RUSuperSet.end(), RUSubSet.begin(),
- RUSubSet.end());
+ return llvm::includes(RUSuperSet, RUSubSet);
}
/// Iteratively prune unit sets. Prune subsets that are close to the superset,
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM % one question. Thanks for adding the tests and the function description.
Add `llvm::includes` that accepts a range instead of start/end iterator.
Add `llvm::includes` that accepts a range instead of start/end iterator.
Add `llvm::includes` that accepts a range instead of start/end iterator.
Add `llvm::includes` that accepts a range instead of start/end iterator.
This PR follows up llvm#143297.
Add
llvm::includes
that accepts a range instead of start/end iterator.