Mercurial > hg > CbC > CbC_llvm
comparison include/llvm/IR/ValueMap.h @ 120:1172e4bd9c6f
update 4.0.0
author | mir3636 |
---|---|
date | Fri, 25 Nov 2016 19:14:25 +0900 |
parents | afa8332a0e37 |
children | 803732b1fca8 |
comparison
equal
deleted
inserted
replaced
101:34baf5011add | 120:1172e4bd9c6f |
---|---|
25 | 25 |
26 #ifndef LLVM_IR_VALUEMAP_H | 26 #ifndef LLVM_IR_VALUEMAP_H |
27 #define LLVM_IR_VALUEMAP_H | 27 #define LLVM_IR_VALUEMAP_H |
28 | 28 |
29 #include "llvm/ADT/DenseMap.h" | 29 #include "llvm/ADT/DenseMap.h" |
30 #include "llvm/ADT/Optional.h" | |
30 #include "llvm/IR/TrackingMDRef.h" | 31 #include "llvm/IR/TrackingMDRef.h" |
31 #include "llvm/IR/ValueHandle.h" | 32 #include "llvm/IR/ValueHandle.h" |
32 #include "llvm/Support/Mutex.h" | 33 #include "llvm/Support/Mutex.h" |
33 #include "llvm/Support/UniqueLock.h" | 34 #include "llvm/Support/UniqueLock.h" |
34 #include "llvm/Support/type_traits.h" | 35 #include "llvm/Support/type_traits.h" |
82 typedef ValueMapCallbackVH<KeyT, ValueT, Config> ValueMapCVH; | 83 typedef ValueMapCallbackVH<KeyT, ValueT, Config> ValueMapCVH; |
83 typedef DenseMap<ValueMapCVH, ValueT, DenseMapInfo<ValueMapCVH> > MapT; | 84 typedef DenseMap<ValueMapCVH, ValueT, DenseMapInfo<ValueMapCVH> > MapT; |
84 typedef DenseMap<const Metadata *, TrackingMDRef> MDMapT; | 85 typedef DenseMap<const Metadata *, TrackingMDRef> MDMapT; |
85 typedef typename Config::ExtraData ExtraData; | 86 typedef typename Config::ExtraData ExtraData; |
86 MapT Map; | 87 MapT Map; |
87 std::unique_ptr<MDMapT> MDMap; | 88 Optional<MDMapT> MDMap; |
88 ExtraData Data; | 89 ExtraData Data; |
90 | |
91 bool MayMapMetadata = true; | |
92 | |
89 ValueMap(const ValueMap&) = delete; | 93 ValueMap(const ValueMap&) = delete; |
90 ValueMap& operator=(const ValueMap&) = delete; | 94 ValueMap& operator=(const ValueMap&) = delete; |
91 public: | 95 public: |
92 typedef KeyT key_type; | 96 typedef KeyT key_type; |
93 typedef ValueT mapped_type; | 97 typedef ValueT mapped_type; |
97 explicit ValueMap(unsigned NumInitBuckets = 64) | 101 explicit ValueMap(unsigned NumInitBuckets = 64) |
98 : Map(NumInitBuckets), Data() {} | 102 : Map(NumInitBuckets), Data() {} |
99 explicit ValueMap(const ExtraData &Data, unsigned NumInitBuckets = 64) | 103 explicit ValueMap(const ExtraData &Data, unsigned NumInitBuckets = 64) |
100 : Map(NumInitBuckets), Data(Data) {} | 104 : Map(NumInitBuckets), Data(Data) {} |
101 | 105 |
102 bool hasMD() const { return MDMap; } | 106 bool hasMD() const { return bool(MDMap); } |
103 MDMapT &MD() { | 107 MDMapT &MD() { |
104 if (!MDMap) | 108 if (!MDMap) |
105 MDMap.reset(new MDMapT); | 109 MDMap.emplace(); |
106 return *MDMap; | 110 return *MDMap; |
111 } | |
112 Optional<MDMapT> &getMDMap() { return MDMap; } | |
113 | |
114 bool mayMapMetadata() const { return MayMapMetadata; } | |
115 void enableMapMetadata() { MayMapMetadata = true; } | |
116 void disableMapMetadata() { MayMapMetadata = false; } | |
117 | |
118 /// Get the mapped metadata, if it's in the map. | |
119 Optional<Metadata *> getMappedMD(const Metadata *MD) const { | |
120 if (!MDMap) | |
121 return None; | |
122 auto Where = MDMap->find(MD); | |
123 if (Where == MDMap->end()) | |
124 return None; | |
125 return Where->second.get(); | |
107 } | 126 } |
108 | 127 |
109 typedef ValueMapIterator<MapT, KeyT> iterator; | 128 typedef ValueMapIterator<MapT, KeyT> iterator; |
110 typedef ValueMapConstIterator<MapT, KeyT> const_iterator; | 129 typedef ValueMapConstIterator<MapT, KeyT> const_iterator; |
111 inline iterator begin() { return iterator(Map.begin()); } | 130 inline iterator begin() { return iterator(Map.begin()); } |