summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2014-04-18 16:36:15 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2014-04-18 16:36:15 +0000
commit98b539ae65afeda465ea14da246da4c03edbb9ca (patch)
tree21f6540cb88dbac583100f2c5657da34b22efad2
parent7b4b26161160d93a0b1bd16962c66b5b626fa696 (diff)
downloadllvm-98b539ae65afeda465ea14da246da4c03edbb9ca.tar.gz
llvm-98b539ae65afeda465ea14da246da4c03edbb9ca.tar.bz2
llvm-98b539ae65afeda465ea14da246da4c03edbb9ca.tar.xz
Make the copy member of StringRef/ArrayRef generic wrt allocators.
Doesn't make sense to restrict this to BumpPtrAllocator. While there replace an explicit loop with std::equal. Some standard libraries know how to compile this down to a ::memcmp call if possible. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206615 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/ADT/ArrayRef.h14
-rw-r--r--include/llvm/ADT/StringRef.h7
-rw-r--r--include/llvm/CodeGen/MachineValueType.h1
3 files changed, 9 insertions, 13 deletions
diff --git a/include/llvm/ADT/ArrayRef.h b/include/llvm/ADT/ArrayRef.h
index be7cb51b60..1b64fee9a5 100644
--- a/include/llvm/ADT/ArrayRef.h
+++ b/include/llvm/ADT/ArrayRef.h
@@ -12,7 +12,6 @@
#include "llvm/ADT/None.h"
#include "llvm/ADT/SmallVector.h"
-#include "llvm/Support/Allocator.h"
#include <vector>
namespace llvm {
@@ -121,9 +120,9 @@ namespace llvm {
return Data[Length-1];
}
- // copy - Allocate copy in BumpPtrAllocator and return ArrayRef<T> to it.
- ArrayRef<T> copy(BumpPtrAllocator &Allocator) {
- T *Buff = Allocator.Allocate<T>(Length);
+ // copy - Allocate copy in Allocator and return ArrayRef<T> to it.
+ template <typename Allocator> ArrayRef<T> copy(Allocator &A) {
+ T *Buff = A.template Allocate<T>(Length);
std::copy(begin(), end(), Buff);
return ArrayRef<T>(Buff, Length);
}
@@ -132,10 +131,7 @@ namespace llvm {
bool equals(ArrayRef RHS) const {
if (Length != RHS.Length)
return false;
- for (size_type i = 0; i != Length; i++)
- if (Data[i] != RHS.Data[i])
- return false;
- return true;
+ return std::equal(begin(), end(), RHS.begin());
}
/// slice(n) - Chop off the first N elements of the array.
@@ -221,7 +217,7 @@ namespace llvm {
/// Construct an MutableArrayRef from a C array.
template <size_t N>
- /*implicit*/ MutableArrayRef(T (&Arr)[N])
+ /*implicit*/ LLVM_CONSTEXPR MutableArrayRef(T (&Arr)[N])
: ArrayRef<T>(Arr) {}
T *data() const { return const_cast<T*>(ArrayRef<T>::data()); }
diff --git a/include/llvm/ADT/StringRef.h b/include/llvm/ADT/StringRef.h
index bd5a550b9f..1f413e8055 100644
--- a/include/llvm/ADT/StringRef.h
+++ b/include/llvm/ADT/StringRef.h
@@ -10,7 +10,6 @@
#ifndef LLVM_ADT_STRINGREF_H
#define LLVM_ADT_STRINGREF_H
-#include "llvm/Support/Allocator.h"
#include <algorithm>
#include <cassert>
#include <cstring>
@@ -124,9 +123,9 @@ namespace llvm {
return Data[Length-1];
}
- // copy - Allocate copy in BumpPtrAllocator and return StringRef to it.
- StringRef copy(BumpPtrAllocator &Allocator) {
- char *S = Allocator.Allocate<char>(Length);
+ // copy - Allocate copy in Allocator and return StringRef to it.
+ template <typename Allocator> StringRef copy(Allocator &A) {
+ char *S = A.template Allocate<char>(Length);
std::copy(begin(), end(), S);
return StringRef(S, Length);
}
diff --git a/include/llvm/CodeGen/MachineValueType.h b/include/llvm/CodeGen/MachineValueType.h
index 84053cac77..ad215ec098 100644
--- a/include/llvm/CodeGen/MachineValueType.h
+++ b/include/llvm/CodeGen/MachineValueType.h
@@ -16,6 +16,7 @@
#define LLVM_CODEGEN_MACHINEVALUETYPE_H
#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/MathExtras.h"
namespace llvm {