summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/CodeGen/LiveInterval.h3
-rw-r--r--include/llvm/Target/SubtargetFeature.h8
-rw-r--r--lib/Target/SubtargetFeature.cpp5
-rw-r--r--lib/Target/X86/X86FloatingPoint.cpp7
-rw-r--r--lib/Transforms/Scalar/CorrelatedExprs.cpp6
5 files changed, 21 insertions, 8 deletions
diff --git a/include/llvm/CodeGen/LiveInterval.h b/include/llvm/CodeGen/LiveInterval.h
index 4606781efd..f4f2b47366 100644
--- a/include/llvm/CodeGen/LiveInterval.h
+++ b/include/llvm/CodeGen/LiveInterval.h
@@ -64,6 +64,9 @@ namespace llvm {
return V < LR.start;
}
+ inline bool operator<(const LiveRange &LR, unsigned V) {
+ return LR.start < V;
+ }
/// LiveInterval - This class represents some number of live ranges for a
/// register or value. This class also contains a bit of register allocator
diff --git a/include/llvm/Target/SubtargetFeature.h b/include/llvm/Target/SubtargetFeature.h
index aab8688588..a9f7a71921 100644
--- a/include/llvm/Target/SubtargetFeature.h
+++ b/include/llvm/Target/SubtargetFeature.h
@@ -36,8 +36,8 @@ struct SubtargetFeatureKV {
uint32_t Value; // K-V integer value
// Compare routine for std binary search
- bool operator<(const std::string &S) const {
- return strcmp(Key, S.c_str()) < 0;
+ bool operator<(const SubtargetFeatureKV &S) const {
+ return strcmp(Key, S.Key) < 0;
}
};
@@ -51,8 +51,8 @@ struct SubtargetInfoKV {
void *Value; // K-V pointer value
// Compare routine for std binary search
- bool operator<(const std::string &S) const {
- return strcmp(Key, S.c_str()) < 0;
+ bool operator<(const SubtargetInfoKV &S) const {
+ return strcmp(Key, S.Key) < 0;
}
};
diff --git a/lib/Target/SubtargetFeature.cpp b/lib/Target/SubtargetFeature.cpp
index c9ddaf74b8..7856ddb66a 100644
--- a/lib/Target/SubtargetFeature.cpp
+++ b/lib/Target/SubtargetFeature.cpp
@@ -112,10 +112,13 @@ void SubtargetFeatures::AddFeature(const std::string &String,
/// Find KV in array using binary search.
template<typename T> const T *Find(const std::string &S, const T *A, size_t L) {
+ // Make the lower bound element we're looking for
+ T KV;
+ KV.Key = S.c_str();
// Determine the end of the array
const T *Hi = A + L;
// Binary search the array
- const T *F = std::lower_bound(A, Hi, S);
+ const T *F = std::lower_bound(A, Hi, KV);
// If not found then return NULL
if (F == Hi || std::string(F->Key) != S) return NULL;
// Return the found array item
diff --git a/lib/Target/X86/X86FloatingPoint.cpp b/lib/Target/X86/X86FloatingPoint.cpp
index 73144cb28f..af5bb7db33 100644
--- a/lib/Target/X86/X86FloatingPoint.cpp
+++ b/lib/Target/X86/X86FloatingPoint.cpp
@@ -281,7 +281,12 @@ namespace {
unsigned from;
unsigned to;
bool operator<(const TableEntry &TE) const { return from < TE.from; }
- bool operator<(unsigned V) const { return from < V; }
+ friend bool operator<(const TableEntry &TE, unsigned V) {
+ return TE.from < V;
+ }
+ friend bool operator<(unsigned V, const TableEntry &TE) {
+ return V < TE.from;
+ }
};
}
diff --git a/lib/Transforms/Scalar/CorrelatedExprs.cpp b/lib/Transforms/Scalar/CorrelatedExprs.cpp
index d00614b5d3..3da7e6e2df 100644
--- a/lib/Transforms/Scalar/CorrelatedExprs.cpp
+++ b/lib/Transforms/Scalar/CorrelatedExprs.cpp
@@ -135,7 +135,8 @@ namespace {
Relation &getRelation(Value *V) {
// Binary search for V's entry...
std::vector<Relation>::iterator I =
- std::lower_bound(Relationships.begin(), Relationships.end(), V);
+ std::lower_bound(Relationships.begin(), Relationships.end(),
+ Relation(V));
// If we found the entry, return it...
if (I != Relationships.end() && I->getValue() == V)
@@ -148,7 +149,8 @@ namespace {
const Relation *requestRelation(Value *V) const {
// Binary search for V's entry...
std::vector<Relation>::const_iterator I =
- std::lower_bound(Relationships.begin(), Relationships.end(), V);
+ std::lower_bound(Relationships.begin(), Relationships.end(),
+ Relation(V));
if (I != Relationships.end() && I->getValue() == V)
return &*I;
return 0;