123 void* _2p(node_idx_t key) const { return (void*)(intptr_t)key; } // 2 conversion functions to make gcc happy
124 node_idx_t _2_node_idx_t(const void* k) const { return (node_idx_t)(intptr_t)k; }
125 Dict* dict() const { return _dict; }
126 void insert(node_idx_t key, uint64_t val) { assert(_dict->operator[](_2p(key)) == NULL, "key existed"); _dict->Insert(_2p(key), (void*)val); }
127 void insert(node_idx_t key, NodeCloneInfo& ci) { insert(key, ci.get()); }
128 void remove(node_idx_t key) { _dict->Delete(_2p(key)); }
129 uint64_t value(node_idx_t key) const { return (uint64_t)_dict->operator[](_2p(key)); }
130 node_idx_t idx(node_idx_t key) const { return NodeCloneInfo(value(key)).idx(); }
131 int gen(node_idx_t key) const { return NodeCloneInfo(value(key)).gen(); }
132 int gen(const void* k) const { return gen(_2_node_idx_t(k)); }
133 int max_gen() const;
134 void clone(Node* old, Node* nnn, int gen);
135 void verify_insert_and_clone(Node* old, Node* nnn, int gen);
136 void dump(node_idx_t key) const;
137
138 int clone_idx() const { return _clone_idx; }
139 void set_clone_idx(int x) { _clone_idx = x; }
140 bool is_debug() const { return _debug; }
141 void set_debug(bool debug) { _debug = debug; }
142 static const char* debug_option_name;
143 };
144
145 //------------------------------Compile----------------------------------------
146 // This class defines a top-level Compiler invocation.
147
148 class Compile : public Phase {
149 friend class VMStructs;
150
151 public:
152 // Fixed alias indexes. (See also MergeMemNode.)
153 enum {
154 AliasIdxTop = 1, // pseudo-index, aliases to nothing (used as sentinel value)
155 AliasIdxBot = 2, // pseudo-index, aliases to everything
156 AliasIdxRaw = 3 // hard-wired index for TypeRawPtr::BOTTOM
157 };
158
159 // Variant of TraceTime(NULL, &_t_accumulator, CITime);
160 // Integrated with logging. If logging is turned on, and CITimeVerbose is true,
161 // then brackets are put into the log, with time stamps and node counts.
162 // (The time collection itself is always conditionalized on CITime.)
|
123 void* _2p(node_idx_t key) const { return (void*)(intptr_t)key; } // 2 conversion functions to make gcc happy
124 node_idx_t _2_node_idx_t(const void* k) const { return (node_idx_t)(intptr_t)k; }
125 Dict* dict() const { return _dict; }
126 void insert(node_idx_t key, uint64_t val) { assert(_dict->operator[](_2p(key)) == NULL, "key existed"); _dict->Insert(_2p(key), (void*)val); }
127 void insert(node_idx_t key, NodeCloneInfo& ci) { insert(key, ci.get()); }
128 void remove(node_idx_t key) { _dict->Delete(_2p(key)); }
129 uint64_t value(node_idx_t key) const { return (uint64_t)_dict->operator[](_2p(key)); }
130 node_idx_t idx(node_idx_t key) const { return NodeCloneInfo(value(key)).idx(); }
131 int gen(node_idx_t key) const { return NodeCloneInfo(value(key)).gen(); }
132 int gen(const void* k) const { return gen(_2_node_idx_t(k)); }
133 int max_gen() const;
134 void clone(Node* old, Node* nnn, int gen);
135 void verify_insert_and_clone(Node* old, Node* nnn, int gen);
136 void dump(node_idx_t key) const;
137
138 int clone_idx() const { return _clone_idx; }
139 void set_clone_idx(int x) { _clone_idx = x; }
140 bool is_debug() const { return _debug; }
141 void set_debug(bool debug) { _debug = debug; }
142 static const char* debug_option_name;
143
144 bool same_idx(node_idx_t k1, node_idx_t k2) const { return idx(k1) == idx(k2); }
145 bool same_gen(node_idx_t k1, node_idx_t k2) const { return gen(k1) == gen(k2); }
146 };
147
148 //------------------------------Compile----------------------------------------
149 // This class defines a top-level Compiler invocation.
150
151 class Compile : public Phase {
152 friend class VMStructs;
153
154 public:
155 // Fixed alias indexes. (See also MergeMemNode.)
156 enum {
157 AliasIdxTop = 1, // pseudo-index, aliases to nothing (used as sentinel value)
158 AliasIdxBot = 2, // pseudo-index, aliases to everything
159 AliasIdxRaw = 3 // hard-wired index for TypeRawPtr::BOTTOM
160 };
161
162 // Variant of TraceTime(NULL, &_t_accumulator, CITime);
163 // Integrated with logging. If logging is turned on, and CITimeVerbose is true,
164 // then brackets are put into the log, with time stamps and node counts.
165 // (The time collection itself is always conditionalized on CITime.)
|