mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
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:
parent
7ccc2f7a78
commit
edf315cd71
@ -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.
|
/// IntervalMapImpl - Namespace used for IntervalMap implementation details.
|
||||||
/// It should be considered private to the implementation.
|
/// It should be considered private to the implementation.
|
||||||
namespace IntervalMapImpl {
|
namespace IntervalMapImpl {
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#define LLVM_CODEGEN_SLOTINDEXES_H
|
#define LLVM_CODEGEN_SLOTINDEXES_H
|
||||||
|
|
||||||
#include "llvm/ADT/DenseMap.h"
|
#include "llvm/ADT/DenseMap.h"
|
||||||
|
#include "llvm/ADT/IntervalMap.h"
|
||||||
#include "llvm/ADT/PointerIntPair.h"
|
#include "llvm/ADT/PointerIntPair.h"
|
||||||
#include "llvm/ADT/SmallVector.h"
|
#include "llvm/ADT/SmallVector.h"
|
||||||
#include "llvm/ADT/ilist.h"
|
#include "llvm/ADT/ilist.h"
|
||||||
@ -631,17 +632,8 @@ namespace llvm {
|
|||||||
|
|
||||||
|
|
||||||
// Specialize IntervalMapInfo for half-open slot index intervals.
|
// Specialize IntervalMapInfo for half-open slot index intervals.
|
||||||
template <typename> struct IntervalMapInfo;
|
template <>
|
||||||
template <> struct IntervalMapInfo<SlotIndex> {
|
struct IntervalMapInfo<SlotIndex> : IntervalMapHalfOpenInfo<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;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user