Provide a common half-open interval map info implementation, and just

re-use that for SlotIndexes. This way other users who want half-open
semantics can share the implementation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171158 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chandler Carruth 2012-12-27 11:29:17 +00:00
parent 7ccc2f7a78
commit edf315cd71
2 changed files with 23 additions and 11 deletions

View File

@ -151,6 +151,26 @@ struct IntervalMapInfo {
};
template <typename T>
struct IntervalMapHalfOpenInfo {
/// startLess - Return true if x is not in [a;b).
static inline bool startLess(const T &x, const T &a) {
return x < a;
}
/// stopLess - Return true if x is not in [a;b).
static inline bool stopLess(const T &b, const T &x) {
return b <= x;
}
/// adjacent - Return true when the intervals [x;a) and [b;y) can coalesce.
static inline bool adjacent(const T &a, const T &b) {
return a == b;
}
};
/// IntervalMapImpl - Namespace used for IntervalMap implementation details.
/// It should be considered private to the implementation.
namespace IntervalMapImpl {

View File

@ -20,6 +20,7 @@
#define LLVM_CODEGEN_SLOTINDEXES_H
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/IntervalMap.h"
#include "llvm/ADT/PointerIntPair.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/ilist.h"
@ -631,17 +632,8 @@ namespace llvm {
// Specialize IntervalMapInfo for half-open slot index intervals.
template <typename> struct IntervalMapInfo;
template <> struct IntervalMapInfo<SlotIndex> {
static inline bool startLess(const SlotIndex &x, const SlotIndex &a) {
return x < a;
}
static inline bool stopLess(const SlotIndex &b, const SlotIndex &x) {
return b <= x;
}
static inline bool adjacent(const SlotIndex &a, const SlotIndex &b) {
return a == b;
}
template <>
struct IntervalMapInfo<SlotIndex> : IntervalMapHalfOpenInfo<SlotIndex> {
};
}