projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
a291627
)
Correctly caclulate the register use in the Op(x, x) case.
author
Christoph Mallon
<christoph.mallon@gmx.de>
Mon, 22 Sep 2008 09:40:52 +0000
(09:40 +0000)
committer
Christoph Mallon
<christoph.mallon@gmx.de>
Mon, 22 Sep 2008 09:40:52 +0000
(09:40 +0000)
[r22168]
ir/be/beschednormal.c
patch
|
blob
|
history
diff --git
a/ir/be/beschednormal.c
b/ir/be/beschednormal.c
index
dacc5a6
..
eaef6f1
100644
(file)
--- a/
ir/be/beschednormal.c
+++ b/
ir/be/beschednormal.c
@@
-95,8
+95,10
@@
static int cost_cmp(const void* a, const void* b)
const irn_cost_pair* const a1 = a;
const irn_cost_pair* const b1 = b;
int ret = b1->cost - a1->cost;
const irn_cost_pair* const a1 = a;
const irn_cost_pair* const b1 = b;
int ret = b1->cost - a1->cost;
+ if (ret == 0)
+ ret = (int)get_irn_idx(a1->irn) - (int)get_irn_idx(b1->irn);
#if defined NORMAL_DBG
#if defined NORMAL_DBG
- ir_fprintf(stderr, "%+F %s %+F\n", a1->irn, ret < 0 ? "<" : ret > 0 ? ">" : "=", b1->irn);
+ ir_fprintf(stderr, "
cost
%+F %s %+F\n", a1->irn, ret < 0 ? "<" : ret > 0 ? ">" : "=", b1->irn);
#endif
return ret;
}
#endif
return ret;
}
@@
-127,6
+129,7
@@
static int normal_tree_cost(ir_node* irn)
flag_and_cost* fc = get_irn_link(irn);
ir_node* block = get_nodes_block(irn);
int arity = get_irn_arity(irn);
flag_and_cost* fc = get_irn_link(irn);
ir_node* block = get_nodes_block(irn);
int arity = get_irn_arity(irn);
+ ir_node* last;
int n_res;
int cost;
int n_op_res = 0;
int n_res;
int cost;
int n_op_res = 0;
@@
-180,10
+183,14
@@
static int normal_tree_cost(ir_node* irn)
}
cost = 0;
}
cost = 0;
+ last = 0;
for (i = 0; i < arity; ++i) {
for (i = 0; i < arity; ++i) {
- if (get_irn_mode(fc->costs[i].irn) == mode_M) continue;
- if (arch_irn_is(cur_arch_env, fc->costs[i].irn, ignore)) continue;
+ ir_node* op = fc->costs[i].irn;
+ if (op == last) continue;
+ if (get_irn_mode(op) == mode_M) continue;
+ if (arch_irn_is(cur_arch_env, op, ignore)) continue;
cost = MAX(fc->costs[i].cost + n_op_res, cost);
cost = MAX(fc->costs[i].cost + n_op_res, cost);
+ last = op;
++n_op_res;
}
n_res = count_result(irn);
++n_op_res;
}
n_res = count_result(irn);
@@
-281,7
+288,7
@@
static int root_cmp(const void* a, const void* b)
}
}
#if defined NORMAL_DBG
}
}
#if defined NORMAL_DBG
- ir_fprintf(stderr, "%+F %s %+F\n", a1->irn, ret < 0 ? "<" : ret > 0 ? ">" : "=", b1->irn);
+ ir_fprintf(stderr, "
root
%+F %s %+F\n", a1->irn, ret < 0 ? "<" : ret > 0 ? ">" : "=", b1->irn);
#endif
return ret;
}
#endif
return ret;
}