summaryrefslogtreecommitdiffhomepage
path: root/ir/be/beinfo.c
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2009-09-18 19:48:23 +0200
committerMatthias Braun <matze@braunis.de>2009-09-18 19:48:23 +0200
commit44dd4365d606bc60bbbf97200b89c903d788ce45 (patch)
tree1503cd428e97ffaa953ba159ae30298c649bc2e8 /ir/be/beinfo.c
parent15769c9f67d00b398ff43e013eddbe5269ba5787 (diff)
- further refactoring and finally eliminated the callback for get_out_reg_reqs
- Introduced be_Start which is now used instead of iro_Start+be_RegParams - further cleanups and fixes along the way [r26549]
Diffstat (limited to 'ir/be/beinfo.c')
-rw-r--r--ir/be/beinfo.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/ir/be/beinfo.c b/ir/be/beinfo.c
index 2962c24..1783e9a 100644
--- a/ir/be/beinfo.c
+++ b/ir/be/beinfo.c
@@ -40,21 +40,26 @@ void be_info_new_node(ir_node *node)
struct obstack *obst;
backend_info_t *info;
- if (is_Anchor(node))
- return;
-
- if (is_Proj(node)) // Projs need no be info, their tuple holds all information
+ /* Projs need no be info, their tuple holds all information */
+ if (is_Proj(node))
return;
obst = be_get_birg_obst(current_ir_graph);
info = OALLOCZ(obst, backend_info_t);
- if (is_Phi(node)) {
+ assert(node->backend_info == NULL);
+ node->backend_info = info;
+
+ /* Hack! We still have middle end nodes in the backend (which was probably
+ a bad decision back then), which have no register constraints.
+ Set some none_requirements here.
+ */
+ if (get_irn_mode(node) != mode_T
+ && get_irn_opcode(node) <= iro_Last) {
info->out_infos = NEW_ARR_D(reg_out_info_t, obst, 1);
memset(info->out_infos, 0, 1 * sizeof(info->out_infos[0]));
+ info->out_infos[0].req = arch_no_register_req;
}
- assert(node->backend_info == NULL);
- node->backend_info = info;
}
static void new_Phi_copy_attr(const ir_node *old_node, ir_node *new_node)