#include "iredges_t.h"
#include "irhooks.h"
+#include "irtools.h"
/* some constants fixing the positions of nodes predecessors
in the in array */
#define END_KEEPALIVE_OFFSET 0
static const char *pnc_name_arr [] = {
- "False", "Eq", "Lt", "Le",
- "Gt", "Ge", "Lg", "Leg", "Uo",
- "Ue", "Ul", "Ule", "Ug", "Uge",
- "Ne", "True"
+ "pn_Cmp_False", "pn_Cmp_Eq", "pn_Cmp_Lt", "pn_Cmp_Le",
+ "pn_Cmp_Gt", "pn_Cmp_Ge", "pn_Cmp_Lg", "pn_Cmp_Leg",
+ "pn_Cmp_Uo", "pn_Cmp_Ue", "pn_Cmp_Ul", "pn_Cmp_Ule",
+ "pn_Cmp_Ug", "pn_Cmp_Uge", "pn_Cmp_Ne", "pn_Cmp_True"
};
/**
/* Outputs a unique number for this node */
-long
-get_irn_node_nr(const ir_node *node) {
+long get_irn_node_nr(const ir_node *node) {
assert(node);
#ifdef DEBUG_libfirm
return node->node_nr;
#else
- return (long)node;
+ return (long)PTR_TO_INT(node);
#endif
}
set_irn_n(node, pos + RETURN_RESULT_OFFSET, res);
}
-ir_node *
-get_Raise_mem (ir_node *node) {
- assert (node->op == op_Raise);
- return get_irn_n(node, 0);
-}
-
-void
-set_Raise_mem (ir_node *node, ir_node *mem) {
- assert (node->op == op_Raise);
- set_irn_n(node, 0, mem);
-}
-
-ir_node *
-get_Raise_exo_ptr (ir_node *node) {
- assert (node->op == op_Raise);
- return get_irn_n(node, 1);
-}
-
-void
-set_Raise_exo_ptr (ir_node *node, ir_node *exo_ptr) {
- assert (node->op == op_Raise);
- set_irn_n(node, 1, exo_ptr);
-}
-
tarval *(get_Const_tarval)(ir_node *node) {
return _get_Const_tarval(node);
}
node->attr.s.ent = ent;
}
-ir_type *
-get_InstOf_ent (ir_node *node) {
- assert (node->op = op_InstOf);
- return (node->attr.io.ent);
-}
-
-void
-set_InstOf_ent (ir_node *node, ir_type *ent) {
- assert (node->op = op_InstOf);
- node->attr.io.ent = ent;
-}
-
-ir_node *
-get_InstOf_store (ir_node *node) {
- assert (node->op = op_InstOf);
- return (get_irn_n (node, 0));
-}
-
-void
-set_InstOf_store (ir_node *node, ir_node *obj) {
- assert (node->op = op_InstOf);
- set_irn_n (node, 0, obj);
-}
-
-ir_node *
-get_InstOf_obj (ir_node *node) {
- assert (node->op = op_InstOf);
- return (get_irn_n (node, 1));
-}
-
-void
-set_InstOf_obj (ir_node *node, ir_node *obj) {
- assert (node->op = op_InstOf);
- set_irn_n (node, 1, obj);
-}
-
/* For unary and binary arithmetic operations the access to the
operands can be factored out. Left is the first, right the
node->attr.copyb.data_type = data_type;
}
+
+ir_type *
+get_InstOf_type (ir_node *node) {
+ assert (node->op = op_InstOf);
+ return node->attr.io.type;
+}
+
+void
+set_InstOf_type (ir_node *node, ir_type *type) {
+ assert (node->op = op_InstOf);
+ node->attr.io.type = type;
+}
+
+ir_node *
+get_InstOf_store (ir_node *node) {
+ assert (node->op = op_InstOf);
+ return get_irn_n(node, 0);
+}
+
+void
+set_InstOf_store (ir_node *node, ir_node *obj) {
+ assert (node->op = op_InstOf);
+ set_irn_n(node, 0, obj);
+}
+
+ir_node *
+get_InstOf_obj (ir_node *node) {
+ assert (node->op = op_InstOf);
+ return get_irn_n(node, 1);
+}
+
+void
+set_InstOf_obj (ir_node *node, ir_node *obj) {
+ assert (node->op = op_InstOf);
+ set_irn_n(node, 1, obj);
+}
+
+/* Returns the memory input of a Raise operation. */
+ir_node *
+get_Raise_mem (ir_node *node) {
+ assert (node->op == op_Raise);
+ return get_irn_n(node, 0);
+}
+
+void
+set_Raise_mem (ir_node *node, ir_node *mem) {
+ assert (node->op == op_Raise);
+ set_irn_n(node, 0, mem);
+}
+
+ir_node *
+get_Raise_exo_ptr (ir_node *node) {
+ assert (node->op == op_Raise);
+ return get_irn_n(node, 1);
+}
+
+void
+set_Raise_exo_ptr (ir_node *node, ir_node *exo_ptr) {
+ assert (node->op == op_Raise);
+ set_irn_n(node, 1, exo_ptr);
+}
+
/* Bound support */
/* Returns the memory input of a Bound operation. */
return _is_irn_constlike(node);
}
+/*
+ * Returns non-zero for nodes that are allowed to have keep-alives and
+ * are neither Block nor PhiM.
+ */
+int (is_irn_keep)(const ir_node *node) {
+ return _is_irn_keep(node);
+}
+
/* Gets the string representation of the jump prediction .*/
const char *get_cond_jmp_predicate_name(cond_jmp_predicate pred)
{
_set_Cond_jmp_pred(cond, pred);
}
-/** the get_type/get_type_attr operation must be always implemented */
-static ir_type *get_Null_type(ir_node *n) {
- return NULL;
+/** the get_type operation must be always implemented and return a firm type */
+static ir_type *get_Default_type(ir_node *n) {
+ return get_unknown_type();
}
/* Sets the get_type operation for an ir_op_ops. */
default:
/* not allowed to be NULL */
if (! ops->get_type)
- ops->get_type = get_Null_type;
+ ops->get_type = get_Default_type;
break;
}
return ops;
return NULL;
}
+/** the get_type_attr operation must be always implemented */
+static ir_type *get_Null_type(ir_node *n) {
+ return firm_unknown_type;
+}
+
/* Sets the get_type operation for an ir_op_ops. */
ir_op_ops *firm_set_default_get_type_attr(opcode code, ir_op_ops *ops)
{