cond_jmp_predicate type and access function for Cond nodes added
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Thu, 15 Sep 2005 10:01:14 +0000 (10:01 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Thu, 15 Sep 2005 10:01:14 +0000 (10:01 +0000)
[r6622]

ir/ir/irnode.c
ir/ir/irnode.h
ir/ir/irnode_t.h

index 3047659..595faec 100644 (file)
@@ -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;
index 24573e1..c8bc64e 100644 (file)
@@ -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
index 842a3ea..acceecd 100644 (file)
@@ -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_ */