Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Unified Diff: runtime/vm/intermediate_language.cc

Issue 12079096: Make use lists into doubly-linked lists. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« runtime/vm/flow_graph_optimizer.cc ('K') | « runtime/vm/intermediate_language.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/intermediate_language.cc
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index f8c425ed294942f0604042d1749eb5d1c9fdb896..d7880ff0829c986d417d00837d9b057bbb0e2a41 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -627,47 +627,57 @@ void Instruction::RecordAssignedVars(BitVector* assigned_vars,
void Value::AddToInputUseList() {
- set_next_use(definition()->input_use_list());
+ Value* next = definition()->input_use_list();
definition()->set_input_use_list(this);
+ set_next_use(next);
+ set_previous_use(NULL);
+ if (next != NULL) next->set_previous_use(this);
}
void Value::AddToEnvUseList() {
- set_next_use(definition()->env_use_list());
+ Value* next = definition()->env_use_list();
definition()->set_env_use_list(this);
+ set_next_use(next);
+ set_previous_use(NULL);
+ if (next != NULL) next->set_previous_use(this);
}
void Value::RemoveFromInputUseList() {
- if (definition_->input_use_list() == this) {
- definition_->set_input_use_list(next_use_);
- return;
- }
-
- Value* prev = definition_->input_use_list();
- while (prev->next_use_ != this) {
- prev = prev->next_use_;
+ Value* previous = previous_use();
+ Value* next = next_use();
+ if (previous == NULL) {
+ definition()->set_input_use_list(next);
+ } else {
+ previous->set_next_use(next);
}
- prev->next_use_ = next_use_;
- definition_ = NULL;
+ if (next != NULL) next->set_previous_use(previous);
+ set_definition(NULL);
}
void Definition::ReplaceUsesWith(Definition* other) {
ASSERT(other != NULL);
ASSERT(this != other);
- while (input_use_list_ != NULL) {
- Value* current = input_use_list_;
- input_use_list_ = input_use_list_->next_use();
+ Value* next = input_use_list();
+ while (next != NULL) {
+ Value* current = next;
+ next = current->next_use();
current->set_definition(other);
current->AddToInputUseList();
Vyacheslav Egorov (Google) 2013/01/31 13:42:19 I don't really understand why we adding them one b
Kevin Millikin (Google) 2013/01/31 13:46:47 There's no good reason. I'll change it.
}
- while (env_use_list_ != NULL) {
- Value* current = env_use_list_;
- env_use_list_ = env_use_list_->next_use();
+
+ next = env_use_list();
+ while (next != NULL) {
+ Value* current = next;
+ next = current->next_use();
current->set_definition(other);
current->AddToEnvUseList();
}
+
+ set_input_use_list(NULL);
+ set_env_use_list(NULL);
}
« runtime/vm/flow_graph_optimizer.cc ('K') | « runtime/vm/intermediate_language.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698