diff options
author | Eric Anholt <eric@anholt.net> | 2010-04-22 09:27:42 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2010-04-22 11:24:28 -0700 |
commit | c0c3deb6180104268bb59f210c299ef6018dd6e7 (patch) | |
tree | cd2762f159ff77ff05c3cd07de45c8c9b202dd27 | |
parent | 8a1a6b5be9069a28cbd6d7214d352be8ad897cd8 (diff) |
ir_to_arbfp: Make get_temp_name_for_var disambiguate names.
-rw-r--r-- | ir_to_arbfp.cpp | 33 | ||||
-rw-r--r-- | ir_to_arbfp.h | 18 |
2 files changed, 34 insertions, 17 deletions
diff --git a/ir_to_arbfp.cpp b/ir_to_arbfp.cpp index d3ca262..d299763 100644 --- a/ir_to_arbfp.cpp +++ b/ir_to_arbfp.cpp @@ -93,6 +93,39 @@ ir_to_arbfp_visitor::get_temp(struct mbtree *tree) printf("TEMP %s;\n", entry->name); } +const char * +ir_to_arbfp_visitor::get_temp_name_for_var(ir_variable *var) +{ + foreach_iter(exec_list_iterator, iter, this->temps) { + temp_entry *entry = (temp_entry *)iter.get(); + + if (entry->var == var) + return entry->name; + } + + const char *name = var->name; + + if (find_temp_named(var->name)) { + int i; + + for (i = 2; ; i++) { + char *temp; + + asprintf(&temp, "%s_%d", var->name, i); + if (!find_temp_named(temp)) { + name = temp; + break; + } + } + } + + temp_entry *entry = new temp_entry(name, var); + this->temps.push_tail(entry); + printf("TEMP %s;\n", entry->name); + + return entry->name; +} + static void reduce(struct mbtree *t, int goal) { diff --git a/ir_to_arbfp.h b/ir_to_arbfp.h index 3278c94..8e16031 100644 --- a/ir_to_arbfp.h +++ b/ir_to_arbfp.h @@ -67,23 +67,7 @@ public: return NULL; } - const char *get_temp_name_for_var(ir_variable *var) - { - foreach_iter(exec_list_iterator, iter, this->temps) { - temp_entry *entry = (temp_entry *)iter.get(); - - if (entry->var == var) - return entry->name; - } - - assert(!find_temp_named(var->name)); - - temp_entry *entry = new temp_entry(var->name, var); - this->temps.push_tail(entry); - printf("TEMP %s;\n", entry->name); - - return entry->name; - } + const char *get_temp_name_for_var(ir_variable *var); struct mbtree *create_tree(int op, struct mbtree *left, |