projects
/
libfirm
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
f97b2ec
)
dont push constrained nodes through perms (fixes fehler82)
author
Matthias Braun
<matze@braunis.de>
Wed, 26 Sep 2007 19:48:22 +0000
(19:48 +0000)
committer
Matthias Braun
<matze@braunis.de>
Wed, 26 Sep 2007 19:48:22 +0000
(19:48 +0000)
[r15932]
ir/be/belower.c
patch
|
blob
|
history
diff --git
a/ir/be/belower.c
b/ir/be/belower.c
index
42c887e
..
0ae32e1
100644
(file)
--- a/
ir/be/belower.c
+++ b/
ir/be/belower.c
@@
-929,8
+929,9
@@
found_front:
node = sched_prev(perm);
n_moved = 0;
while(!sched_is_begin(node)) {
node = sched_prev(perm);
n_moved = 0;
while(!sched_is_begin(node)) {
- int input = -1;
- ir_node *proj;
+ const arch_register_req_t *req;
+ int input = -1;
+ ir_node *proj;
foreach_out_edge(perm, edge) {
ir_node *out = get_edge_src_irn(edge);
foreach_out_edge(perm, edge) {
ir_node *out = get_edge_src_irn(edge);
@@
-949,6
+950,14
@@
found_front:
break;
if(arch_irn_is(aenv, node, modify_flags))
break;
break;
if(arch_irn_is(aenv, node, modify_flags))
break;
+ if(is_Proj(node)) {
+ req = arch_get_register_req(aenv, get_Proj_pred(node),
+ -1 - get_Proj_proj(node));
+ } else {
+ req = arch_get_register_req(aenv, node, -1);
+ }
+ if(req->type != arch_register_req_type_normal)
+ break;
for(i = get_irn_arity(node) - 1; i >= 0; --i) {
ir_node *opop = get_irn_n(node, i);
if (arch_irn_consider_in_reg_alloc(aenv, cls, opop)) {
for(i = get_irn_arity(node) - 1; i >= 0; --i) {
ir_node *opop = get_irn_n(node, i);
if (arch_irn_consider_in_reg_alloc(aenv, cls, opop)) {