summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-04-22 09:27:42 -0700
committerEric Anholt <eric@anholt.net>2010-04-22 11:24:28 -0700
commitc0c3deb6180104268bb59f210c299ef6018dd6e7 (patch)
treecd2762f159ff77ff05c3cd07de45c8c9b202dd27
parent8a1a6b5be9069a28cbd6d7214d352be8ad897cd8 (diff)
ir_to_arbfp: Make get_temp_name_for_var disambiguate names.
-rw-r--r--ir_to_arbfp.cpp33
-rw-r--r--ir_to_arbfp.h18
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,