void
add_End_keepalive (ir_node *end, ir_node *ka) {
- assert (end->op == op_End);
- ARR_APP1 (ir_node *, end->in, ka);
+ int l;
+ ir_graph *irg = get_irn_irg(end);
+
+ assert(end->op == op_End);
+ l = ARR_LEN(end->in);
+ ARR_APP1(ir_node *, end->in, ka);
+ edges_notify_edge(end, l, end->in[l], NULL, irg);
}
void
node->attr.f.where = where;
}
-ir_node **
-get_Sync_preds_arr (ir_node *node) {
+ir_node **get_Sync_preds_arr (ir_node *node) {
assert (node->op == op_Sync);
return (ir_node **)&(get_irn_in(node)[1]);
}
-int
-get_Sync_n_preds (ir_node *node) {
- assert (node->op == op_Sync);
+int get_Sync_n_preds (ir_node *node) {
+ assert(node->op == op_Sync);
return (get_irn_arity(node));
}
/*
-void
-set_Sync_n_preds (ir_node *node, int n_preds) {
+void set_Sync_n_preds (ir_node *node, int n_preds) {
assert (node->op == op_Sync);
}
*/
-ir_node *
-get_Sync_pred (ir_node *node, int pos) {
- assert (node->op == op_Sync);
+ir_node *get_Sync_pred (ir_node *node, int pos) {
+ assert(node->op == op_Sync);
return get_irn_n(node, pos);
}
-void
-set_Sync_pred (ir_node *node, int pos, ir_node *pred) {
- assert (node->op == op_Sync);
+void set_Sync_pred (ir_node *node, int pos, ir_node *pred) {
+ assert(node->op == op_Sync);
set_irn_n(node, pos, pred);
}
+/* Add a new Sync predecessor */
+void add_Sync_pred (ir_node *node, ir_node *pred) {
+ int l;
+ ir_graph *irg = get_irn_irg(node);
+
+ assert(node->op == op_Sync);
+ l = ARR_LEN(node->in);
+ ARR_APP1(ir_node *, node->in, pred);
+ edges_notify_edge(node, l, node->in[l], NULL, irg);
+}
+
ir_type *get_Proj_type(ir_node *n)
{
ir_type *tp = NULL;
return _is_Mux(node);
}
+/* returns true if node is a Load node. */
+int
+(is_Load)(const ir_node *node) {
+ return _is_Load(node);
+}
+
+/* returns true if node is a Sync node. */
+int
+(is_Sync)(const ir_node *node) {
+ return _is_Sync(node);
+}
+
+/* returns true if node is a Confirm node. */
+int
+(is_Confirm)(const ir_node *node) {
+ return _is_Confirm(node);
+}
+
int
is_Proj (const ir_node *node) {
assert(node);
int get_Sync_n_preds (ir_node *node);
ir_node *get_Sync_pred (ir_node *node, int pos);
void set_Sync_pred (ir_node *node, int pos, ir_node *pred);
+void add_Sync_pred (ir_node *node, ir_node *pred);
/** Returns the source language type of a Proj node.
* Must be an atomic type. Mode of type must be mode of node.
int is_Sel (const ir_node *node);
/** returns true if node is a Mux node or a Psi with only one condition. */
int is_Mux (const ir_node *node);
+/** returns true if node is a Load node. */
+int is_Load (const ir_node *node);
+/** returns true if node is a Sync node. */
+int is_Sync (const ir_node *node);
+/** returns true if node is a Confirm node. */
+int is_Confirm (const ir_node *node);
/** returns true if node is a Proj node or a Filter node in
* intraprocedural view */
int is_Proj (const ir_node *node);
return 0;
}
+static INLINE int
+_is_Load (const ir_node *node) {
+ assert(node);
+ return (node && _get_irn_op(node) == op_Load);
+}
+
+static INLINE int
+_is_Sync (const ir_node *node) {
+ assert(node);
+ return (node && _get_irn_op(node) == op_Sync);
+}
+
+static INLINE int
+_is_Confirm (const ir_node *node) {
+ assert(node);
+ return (node && _get_irn_op(node) == op_Confirm);
+}
+
static INLINE int
_is_no_Block(const ir_node *node) {
assert(node && _is_ir_node(node));
#define is_Call(node) _is_Call(node)
#define is_Sel(node) _is_Sel(node)
#define is_Mux(node) _is_Mux(node)
+#define is_Load(node) _is_Load(node)
+#define is_Sync(node) _is_Sync(node)
+#define is_Confirm(node) _is_Confirm(node)
#define is_Bad(node) _is_Bad(node)
#define is_no_Block(node) _is_no_Block(node)
#define is_Block(node) _is_Block(node)