path: root/ir/be/bepbqpcoloring.c
diff options
authorMatthias Braun <>2011-08-15 13:41:11 +0200
committerMatthias Braun <>2011-08-15 14:03:03 +0200
commit41dc42afc8d00e0f364711ed0c919e4e29cb20e4 (patch)
tree89b7e8ab7e295f9fcfe18a40bfb001b91c4e5f34 /ir/be/bepbqpcoloring.c
parented7cc1daadbdd28b5550157080dcbbbea348c097 (diff)
big refactoring of arch_XXX functions
This tries to get the names in a consistent format. We basically have 2 views on register allocation/constraints now: 1) Register Requirements and Assigments are per-instruction. Each instruction has requirements on its inputs and outputs, register get assigned for outputs of an instruction (assignment is an attribute of an instruction, not of the Proj-nodes). The internal datastructures model this form! The functions here have the form: arch_get_irn_register_req_in(node, input_nr) arch_get_irn_register_in(node, input_nr) arch_get_irn_register_req_out(node, output_nr) arch_set_irn_register_out(node, output_nr, register) 2) Register Requirements and Assignments are on firm-values. This view allows to query/assign requirements and registers at the Proj nodes instead of the repsective predecessors. This is a convenience interface modeled on top of the other! The functions have the form: arch_get_irn_register_req(node) arch_get_irn_register(node) arch_set_irn_register(node, register)
Diffstat (limited to 'ir/be/bepbqpcoloring.c')
1 files changed, 5 insertions, 2 deletions
diff --git a/ir/be/bepbqpcoloring.c b/ir/be/bepbqpcoloring.c
index 4772c74..c658814 100644
--- a/ir/be/bepbqpcoloring.c
+++ b/ir/be/bepbqpcoloring.c
@@ -155,7 +155,10 @@ static void create_pbqp_node(be_pbqp_alloc_env_t *pbqp_alloc_env, ir_node *irn)
/* set costs depending on register constrains */
unsigned idx;
for (idx = 0; idx < colors_n; idx++) {
- if (!bitset_is_set(allocatable_regs, idx) || !arch_reg_out_is_allocatable(irn, arch_register_for_index(cls, idx))) {
+ const arch_register_req_t *req = arch_get_irn_register_req(irn);
+ const arch_register_t *reg = arch_register_for_index(cls, idx);
+ if (!bitset_is_set(allocatable_regs, idx)
+ || !arch_reg_is_allocatable(req, reg)) {
/* constrained */
vector_set(costs_vector, idx, INF_COSTS);
@@ -259,7 +262,7 @@ static void create_affinity_edges(ir_node *irn, void *env)
be_pbqp_alloc_env_t *pbqp_alloc_env = (be_pbqp_alloc_env_t*)env;
const arch_register_class_t *cls = pbqp_alloc_env->cls;
- const arch_register_req_t *req = arch_get_register_req_out(irn);
+ const arch_register_req_t *req = arch_get_irn_register_req(irn);
unsigned pos;
unsigned max;