Add llvm::all_of which wraps std::all_of.
authorPete Cooper <peter_cooper@apple.com>
Wed, 13 May 2015 22:19:13 +0000 (22:19 +0000)
committerPete Cooper <peter_cooper@apple.com>
Wed, 13 May 2015 22:19:13 +0000 (22:19 +0000)
This version doesn't need begin/end but can instead just take a type which has begin/end methods.

Use this to replace an eligible foreach loop in LoopInfo found by David Blaikie in r237224.

Reviewed by David Blaikie.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@237301 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/STLExtras.h
lib/Analysis/LoopInfo.cpp

index 921bd820d97b2654b772b6204c820b61931e3489..b68345a1dcf6ccd2e5e09b65a544a24192254612 100644 (file)
@@ -18,6 +18,7 @@
 #define LLVM_ADT_STLEXTRAS_H
 
 #include "llvm/Support/Compiler.h"
+#include <algorithm> // for std::all_of
 #include <cassert>
 #include <cstddef> // for std::size_t
 #include <cstdlib> // for qsort
@@ -327,6 +328,14 @@ void DeleteContainerSeconds(Container &C) {
   C.clear();
 }
 
+/// Provide wrappers to std::all_of which take ranges instead of having to pass
+/// being/end explicitly.
+template<typename R, class UnaryPredicate>
+bool all_of(R &&Range, UnaryPredicate &&P) {
+  return std::all_of(Range.begin(), Range.end(),
+                     std::forward<UnaryPredicate>(P));
+}
+
 //===----------------------------------------------------------------------===//
 //     Extra additions to <memory>
 //===----------------------------------------------------------------------===//
index 932b080eb3e0a83451d6535b9cf82d1327cdb41e..6b6faf8a66c3c6295b70b197b241da6bd77edbd1 100644 (file)
@@ -65,11 +65,7 @@ bool Loop::isLoopInvariant(const Value *V) const {
 /// hasLoopInvariantOperands - Return true if all the operands of the
 /// specified instruction are loop invariant.
 bool Loop::hasLoopInvariantOperands(const Instruction *I) const {
-  for (auto &Op : I->operands())
-    if (!isLoopInvariant(Op))
-      return false;
-
-  return true;
+  return all_of(I->operands(), [this](Value *V) { return isLoopInvariant(V); });
 }
 
 /// makeLoopInvariant - If the given value is an instruciton inside of the