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()); }