From: Christian Würdig Date: Thu, 2 Nov 2006 09:26:55 +0000 (+0000) Subject: added new attributes for abstract machine X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=6f3d0fd6339e2fce9daca84797eb893af0a3d467;p=libfirm added new attributes for abstract machine added new getter/setter for abstract machine attributes --- diff --git a/ir/be/ia32/ia32_new_nodes.c b/ir/be/ia32/ia32_new_nodes.c index 936917237..fe8656af4 100644 --- a/ir/be/ia32/ia32_new_nodes.c +++ b/ir/be/ia32/ia32_new_nodes.c @@ -1094,19 +1094,11 @@ arch_irn_flags_t get_ia32_out_flags(const ir_node *node, int pos) { } /** - * Set the number of available execution units for this node. + * Get the list of available execution units. */ -void set_ia32_n_exec_units(ir_node *node, unsigned n) { - ia32_attr_t *attr = get_ia32_attr(node); - attr->n_exec_units = n; -} - -/** - * Get the number of available execution units for this node. - */ -unsigned get_ia32_n_exec_units(const ir_node *node) { +const be_execution_unit_t ***get_ia32_exec_units(const ir_node *node) { ia32_attr_t *attr = get_ia32_attr(node); - return attr->n_exec_units; + return attr->exec_units; } #ifndef NDEBUG @@ -1356,12 +1348,10 @@ const arch_register_t *get_ia32_out_reg(const ir_node *node, int pos) { * Initializes the nodes attributes. */ void init_ia32_attributes(ir_node *node, arch_irn_flags_t flags, const ia32_register_req_t **in_reqs, - const ia32_register_req_t **out_reqs, const be_execution_unit_t **execution_units, + const ia32_register_req_t **out_reqs, const be_execution_unit_t ***execution_units, int n_res, unsigned latency) { - ia32_attr_t *attr = get_ia32_attr(node); - unsigned i; - be_execution_unit_t *unit; + ia32_attr_t *attr = get_ia32_attr(node); set_ia32_flags(node, flags); set_ia32_in_req_all(node, in_reqs); @@ -1369,13 +1359,7 @@ void init_ia32_attributes(ir_node *node, arch_irn_flags_t flags, const ia32_regi set_ia32_latency(node, latency); set_ia32_n_res(node, n_res); - if (execution_units) { - for (i = 0, unit = execution_units[0]; unit; unit = execution_units[++i]) - /* do nothing but count number of given units */ ; - set_ia32_n_exec_units(node, i); - attr->exec_units = execution_units; - } - /* else attr is already zero'ed out */ + attr->exec_units = execution_units; attr->out_flags = NEW_ARR_D(int, get_irg_obstack(get_irn_irg(node)), n_res); memset(attr->out_flags, 0, n_res * sizeof(attr->out_flags[0])); diff --git a/ir/be/ia32/ia32_new_nodes.h b/ir/be/ia32/ia32_new_nodes.h index b0abefe1e..510ac7093 100644 --- a/ir/be/ia32/ia32_new_nodes.h +++ b/ir/be/ia32/ia32_new_nodes.h @@ -9,7 +9,6 @@ #include "firm_config.h" #include "ia32_nodes_attr.h" -#include "gen_ia32_machine.h" /*************************************************************************************************** * _ _ _ __ _ _ _ _ @@ -406,14 +405,9 @@ void set_ia32_out_flags(ir_node *node, arch_irn_flags_t flags, int pos); arch_irn_flags_t get_ia32_out_flags(const ir_node *node, int pos); /** - * Set the number of available execution units for this node. + * Get the list of available execution units. */ -void set_ia32_n_exec_units(ir_node *node, unsigned n); - -/** - * Get the number of available execution units for this node. - */ -unsigned get_ia32_n_exec_units(const ir_node *node); +const be_execution_unit_t ***get_ia32_exec_units(const ir_node *node); #ifndef NDEBUG @@ -510,7 +504,7 @@ int is_ia32_Cnst(const ir_node *node); * Initializes the nodes attributes. */ void init_ia32_attributes(ir_node *node, arch_irn_flags_t flags, const ia32_register_req_t **in_reqs, \ - const ia32_register_req_t **out_reqs, const be_execution_unit_t **execution_units, int n_res, unsigned latency); + const ia32_register_req_t **out_reqs, const be_execution_unit_t ***execution_units, int n_res, unsigned latency); /* Include the generated headers */ #include "gen_ia32_new_nodes.h" diff --git a/ir/be/ia32/ia32_nodes_attr.h b/ir/be/ia32/ia32_nodes_attr.h index 026e82932..cdc75d31b 100644 --- a/ir/be/ia32/ia32_nodes_attr.h +++ b/ir/be/ia32/ia32_nodes_attr.h @@ -129,8 +129,7 @@ typedef struct _ia32_attr_t { const char *orig_node; /**< holds the name of the original ir node for debugging purposes */ #endif /* NDEBUG */ - const be_execution_unit_t **exec_units; /**< NULL terminated list of units this operation can be executed on */ - unsigned n_exec_units; /**< the number of available execution units for this operation */ + const be_execution_unit_t ***exec_units; /**< list of units this operation can be executed on */ const ia32_register_req_t **in_req; /**< register requirements for arguments */ const ia32_register_req_t **out_req; /**< register requirements for results */