From: Michael Beck Date: Thu, 15 Sep 2005 10:01:14 +0000 (+0000) Subject: cond_jmp_predicate type and access function for Cond nodes added X-Git-Url: http://nsz.repo.hu/git/?a=commitdiff_plain;h=8382494c9bb9f2e02a5a125cc40f453d025a2393;p=libfirm cond_jmp_predicate type and access function for Cond nodes added [r6622] --- diff --git a/ir/ir/irnode.c b/ir/ir/irnode.c index 304765941..595faec27 100644 --- a/ir/ir/irnode.c +++ b/ir/ir/irnode.c @@ -2264,6 +2264,16 @@ int (is_irn_constlike)(const ir_node *node) { return _is_irn_constlike(node); } +/* Returns the conditional jump predication of a Cond node. */ +cond_jmp_predicate (get_Cond_jmp_pred)(ir_node *cond) { + return _get_Cond_jmp_pred(cond); +} + +/* Sets a new conditional jump predication. */ +void (set_Cond_jmp_pred)(ir_node *cond, cond_jmp_predicate pred) { + _set_Cond_jmp_pred(cond, pred); +} + /** the get_type operation must be always implemented */ static type *get_Null_type(ir_node *n) { return NULL; diff --git a/ir/ir/irnode.h b/ir/ir/irnode.h index 24573e1ad..c8bc64e85 100644 --- a/ir/ir/irnode.h +++ b/ir/ir/irnode.h @@ -997,6 +997,21 @@ type *get_irn_type(ir_node *n); /** Returns non-zero for constant-like nodes. */ int is_irn_constlike(const ir_node *node); +/** + * A type for expression conditional jump predications. + */ +typedef enum { + COND_JMP_PRED_NONE, /**< No jump predication. Default. */ + COND_JMP_PRED_TRUE, /**< The True case is predicted. */ + COND_JMP_PRED_FALSE /**< The False case is predicted. */ +} cond_jmp_predicate; + +/** Returns the conditional jump predication of a Cond node. */ +cond_jmp_predicate get_Cond_jmp_pred(ir_node *cond); + +/** Sets a new conditional jump predication. */ +void set_Cond_jmp_pred(ir_node *cond, cond_jmp_predicate pred); + /** * Access custom node data. * The data must have been registered with diff --git a/ir/ir/irnode_t.h b/ir/ir/irnode_t.h index 842a3eab3..acceecd9e 100644 --- a/ir/ir/irnode_t.h +++ b/ir/ir/irnode_t.h @@ -80,9 +80,9 @@ typedef struct { /** Cond attributes */ typedef struct { - cond_kind kind; /**< flavor of Cond */ - long default_proj; /**< for optimization: biggest Proj number, i.e. the one - used for default. */ + cond_kind kind; /**< flavor of Cond */ + long default_proj; /**< only for non-binary Conds: biggest Proj number, i.e. the one used for default. */ + cond_jmp_predicate pred; /**< only for binary Conds: The jump predication. */ } cond_attr; /** Const attributes */ @@ -672,6 +672,16 @@ static INLINE int _is_irn_constlike(const ir_node *node) { return is_op_constlike(_get_irn_op(node)); } +static INLINE cond_jmp_predicate _get_Cond_jmp_pred(ir_node *node) { + assert (_get_irn_op(node) == op_Cond); + return node->attr.c.pred; +} + +static INLINE void _set_Cond_jmp_pred(ir_node *node, cond_jmp_predicate pred) { + assert (_get_irn_op(node) == op_Cond); + node->attr.c.pred = pred; +} + /* this section MUST contain all inline functions */ #define is_ir_node(thing) _is_ir_node(thing) #define get_irn_intra_arity(node) _get_irn_intra_arity(node) @@ -714,5 +724,7 @@ static INLINE int _is_irn_constlike(const ir_node *node) { #define is_irn_forking(node) _is_irn_forking(node) #define get_irn_type(node) _get_irn_type(node) #define is_irn_constlike(node) _is_irn_constlike(node) +#define get_Cond_jmp_pred(node) _get_Cond_jmp_pred(node) +#define set_Cond_jmp_pred(node, pred) _set_Cond_jmp_pred(node, pred) # endif /* _IRNODE_T_H_ */