Introduce a range version of std::any_of, and use it in SCEV

Reviewers: dblaikie, pcc

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D15063

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254390 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Sanjoy Das 2015-12-01 07:49:23 +00:00
parent c8fda7a60a
commit b1ce35cdfb
3 changed files with 14 additions and 10 deletions

View File

@ -371,6 +371,14 @@ bool all_of(R &&Range, UnaryPredicate &&P) {
std::forward<UnaryPredicate>(P));
}
/// Provide wrappers to std::any_of which take ranges instead of having to pass
/// begin/end explicitly.
template <typename R, class UnaryPredicate>
bool any_of(R &&Range, UnaryPredicate &&P) {
return std::any_of(Range.begin(), Range.end(),
std::forward<UnaryPredicate>(P));
}
//===----------------------------------------------------------------------===//
// Extra additions to <memory>
//===----------------------------------------------------------------------===//

View File

@ -8403,8 +8403,7 @@ const SCEV *SCEVAddRecExpr::getNumIterationsInRange(ConstantRange Range,
// The only time we can solve this is when we have all constant indices.
// Otherwise, we cannot determine the overflow conditions.
if (std::any_of(op_begin(), op_end(),
[](const SCEV *Op) { return !isa<SCEVConstant>(Op);}))
if (any_of(operands(), [](const SCEV *Op) { return !isa<SCEVConstant>(Op); }))
return SE.getCouldNotCompute();
// Okay at this point we know that all elements of the chrec are constants and
@ -9694,8 +9693,8 @@ bool SCEVUnionPredicate::implies(const SCEVPredicate *N) const {
return false;
auto &SCEVPreds = ScevPredsIt->second;
return std::any_of(SCEVPreds.begin(), SCEVPreds.end(),
[N](const SCEVPredicate *I) { return I->implies(N); });
return any_of(SCEVPreds,
[N](const SCEVPredicate *I) { return I->implies(N); });
}
const SCEV *SCEVUnionPredicate::getExpr() const { return nullptr; }

View File

@ -11,15 +11,12 @@
#include "llvm-pdbdump.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/Support/Regex.h"
#include <algorithm>
namespace {
template <class T, class Pred> bool any_of_range(T &&R, Pred P) {
return std::any_of(R.begin(), R.end(), P);
}
bool IsItemExcluded(llvm::StringRef Item,
std::list<llvm::Regex> &IncludeFilters,
std::list<llvm::Regex> &ExcludeFilters) {
@ -30,10 +27,10 @@ bool IsItemExcluded(llvm::StringRef Item,
// Include takes priority over exclude. If the user specified include
// filters, and none of them include this item, them item is gone.
if (!IncludeFilters.empty() && !any_of_range(IncludeFilters, match_pred))
if (!IncludeFilters.empty() && !any_of(IncludeFilters, match_pred))
return true;
if (any_of_range(ExcludeFilters, match_pred))
if (any_of(ExcludeFilters, match_pred))
return true;
return false;