88namespace torch {
99namespace jit {
1010namespace {
11- ska::flat_hash_map<const Element*, unsigned > comprMap;
1211std::vector<const Element*> decomprMap;
1312} // namespace
14-
15- unsigned Element::toIndex (const Element* x) {
16- if (comprMap.count (x)) {
17- return comprMap[x];
18- }
19- comprMap[x] = comprMap.size ();
20- decomprMap.push_back (x);
21- return comprMap[x];
13+ unsigned Element::indexCount = 0 ;
14+ Element::Element (const Value* value_) : value(value_), index(indexCount++) {
15+ decomprMap.push_back (this );
2216}
2317
2418const Element* Element::toElement (unsigned x) {
@@ -54,7 +48,7 @@ void collectAllContainedMemoryLocations(
5448 const Element* elem,
5549 MemoryLocations& cont) {
5650 // we have already recursed on this element
57- unsigned compIdx = Element::toIndex ( elem) ;
51+ unsigned compIdx = elem-> index ;
5852 if (cont.test (compIdx)) {
5953 return ;
6054 }
@@ -101,18 +95,17 @@ bool MemoryDAG::mayContainAlias(
10195
10296// Make `v` point at `to`.
10397void MemoryDAG::makePointerTo (Element* from, Element* to) {
104- from->pointsTo .set (Element::toIndex (to) );
105- to->pointedFrom .set (Element::toIndex ( from) );
98+ from->pointsTo .set (to-> index );
99+ to->pointedFrom .set (from-> index );
106100}
107101
108102void MemoryDAG::addToContainedElements (Element* elem, Element* container) {
109- container->contained_elements .set (Element::toIndex ( elem) );
103+ container->contained_elements .set (elem-> index );
110104}
111105
112106// Give `v` a fresh alias (i.e. it does not point to any value)
113107Element* MemoryDAG::makeFreshValue (const Value* v) {
114- auto el = torch::make_unique<Element>();
115- el->value = v;
108+ auto el = torch::make_unique<Element>(v);
116109
117110 auto rawPtr = el.get ();
118111 elements_.emplace (rawPtr, std::move (el));
@@ -135,8 +128,8 @@ const MemoryLocations& Element::getMemoryLocations() const {
135128// traversing in the direction `dir`.`fn` will be run on each element.
136129void Element::bfs (BfsDirection dir, MemoryLocations& res) const {
137130 std::queue<unsigned > queue;
138- std::unordered_set <int > seen;
139- queue.push (Element::toIndex ( this ) );
131+ ska::flat_hash_set <int > seen;
132+ queue.push (this -> index );
140133 while (!queue.empty ()) {
141134 const auto el = queue.front ();
142135 queue.pop ();
0 commit comments