is_irn_keep() added
authorMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Fri, 27 Jan 2006 17:46:55 +0000 (17:46 +0000)
committerMichael Beck <beck@ipd.info.uni-karlsruhe.de>
Fri, 27 Jan 2006 17:46:55 +0000 (17:46 +0000)
fixed get_irn_type(), must return unknown_type instead of NULL

[r7283]

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

index 1805970..f2314c3 100644 (file)
@@ -2394,6 +2394,14 @@ int (is_irn_constlike)(const ir_node *node) {
   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)
 {
@@ -2415,9 +2423,9 @@ void (set_Cond_jmp_pred)(ir_node *cond, 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. */
@@ -2431,7 +2439,7 @@ ir_op_ops *firm_set_default_get_type(opcode code, ir_op_ops *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;
@@ -2453,6 +2461,11 @@ static entity *get_SymConst_attr_entity(ir_node *self) {
   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)
 {
index b5c1bf6..99526c8 100644 (file)
@@ -1054,7 +1054,7 @@ int is_irn_forking(const ir_node *node);
 
 /** Return the type associated with the value produced by n
  *  if the node remarks this type as it is the case for
- *  Cast, Const, SymConst and some Proj nodes. */
+ *  Cast, Const, SymConst and some Proj nodes or unknown_type. */
 ir_type *get_irn_type(ir_node *n);
 
 /** Return the type attribute of a node n (SymConst, Call, Alloc, Free,
@@ -1067,6 +1067,12 @@ entity *get_irn_entity_attr(ir_node *n);
 /** Returns non-zero for constant-like nodes. */
 int is_irn_constlike(const ir_node *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);
+
 /**
  * A type to express conditional jump predictions.
  */
index fa1cf22..d03784d 100644 (file)
@@ -727,6 +727,10 @@ static INLINE int _is_irn_constlike(const ir_node *node) {
   return is_op_constlike(_get_irn_op(node));
 }
 
+static INLINE int _is_irn_keep(const ir_node *node) {
+  return is_op_keep(_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;
@@ -781,6 +785,7 @@ static INLINE void _set_Cond_jmp_pred(ir_node *node, cond_jmp_predicate pred) {
 #define get_irn_type_attr(node)               _get_irn_type_attr(node)
 #define get_irn_entity_attr(node)             _get_irn_entity_attr(node)
 #define is_irn_constlike(node)                _is_irn_constlike(node)
+#define is_irn_keep(node)                     _is_irn_keep(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)