#include "ircons_t.h"
#include "iropt_t.h"
#include "irop.h"
-#include "irvrfy_t.h"
#include "irprintf.h"
#include "xmalloc.h"
/**
* Dumper interface for dumping TEMPLATE nodes in vcg.
- * @param n the node to dump
* @param F the output file
+ * @param n the node to dump
* @param reason indicates which kind of information should be dumped
- * @return 0 on success or != 0 on failure
*/
-static int TEMPLATE_dump_node(ir_node *n, FILE *F, dump_reason_t reason)
+static void TEMPLATE_dump_node(FILE *F, ir_node *n, dump_reason_t reason)
{
- ir_mode *mode = NULL;
+ ir_mode *mode = NULL;
switch (reason) {
case dump_node_opcode_txt:
arch_dump_reqs_and_registers(F, n);
break;
}
-
- return 0;
}
const TEMPLATE_attr_t *get_TEMPLATE_attr_const(const ir_node *node)
return (TEMPLATE_attr_t *)get_irn_generic_attr(node);
}
-/**
- * Returns the argument register requirements of a TEMPLATE node.
- */
-const arch_register_req_t **get_TEMPLATE_in_req_all(const ir_node *node)
-{
- const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node);
- return attr->in_req;
-}
-
-/**
- * Returns the argument register requirement at position pos of an TEMPLATE node.
- */
-const arch_register_req_t *get_TEMPLATE_in_req(const ir_node *node, int pos)
-{
- const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node);
- return attr->in_req[pos];
-}
-
-/**
- * Sets the IN register requirements at position pos.
- */
-void set_TEMPLATE_req_in(ir_node *node, const arch_register_req_t *req, int pos)
-{
- TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node);
- attr->in_req[pos] = req;
-}
-
/**
* Initializes the nodes attributes.
*/
{
ir_graph *irg = get_irn_irg(node);
struct obstack *obst = get_irg_obstack(irg);
- TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node);
backend_info_t *info;
(void) execution_units;
arch_irn_set_flags(node, flags);
- attr->in_req = in_reqs;
+ arch_set_in_register_reqs(node, in_reqs);
info = be_get_info(node);
info->out_infos = NEW_ARR_D(reg_out_info_t, obst, n_res);
memset(info->out_infos, 0, n_res * sizeof(info->out_infos[0]));
}
+static void set_TEMPLATE_value(ir_node *node, tarval *value)
+{
+ TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node);
+ attr->value = value;
+}
+
static int TEMPLATE_compare_attr(ir_node *a, ir_node *b)
{
const TEMPLATE_attr_t *attr_a = get_TEMPLATE_attr_const(a);
return 0;
}
+static void TEMPLATE_copy_attr(ir_graph *irg, const ir_node *old_node,
+ ir_node *new_node)
+{
+ struct obstack *obst = get_irg_obstack(irg);
+ const void *attr_old = get_irn_generic_attr_const(old_node);
+ void *attr_new = get_irn_generic_attr(new_node);
+ backend_info_t *old_info = be_get_info(old_node);
+ backend_info_t *new_info = be_get_info(new_node);
+
+ /* copy the attributes */
+ memcpy(attr_new, attr_old, get_op_attr_size(get_irn_op(old_node)));
+
+ /* copy out flags */
+ new_info->out_infos =
+ DUP_ARR_D(reg_out_info_t, obst, old_info->out_infos);
+ new_info->in_reqs = old_info->in_reqs;
+}
+
/* Include the generated constructor functions */
#include "gen_TEMPLATE_new_nodes.c.inl"