used new verify_node operation
[libfirm] / ir / ir / irnode.h
index d81c8e9..1fc9d02 100644 (file)
@@ -9,14 +9,11 @@
  * Copyright:   (c) 1998-2003 Universität Karlsruhe
  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
  */
-
 # ifndef _IRNODE_H_
 # define _IRNODE_H_
 
 #include <stddef.h>
 
-# include "pnc.h"
-# include "tv.h"
 # include "irgraph.h"
 # include "entity.h"
 # include "firm_common.h"
@@ -249,6 +246,9 @@ ir_node  *get_Block_cfgpred (ir_node *node, int pos);
 void      set_Block_cfgpred (ir_node *node, int pos, ir_node *pred);
 bool      get_Block_matured (ir_node *node);
 void      set_Block_matured (ir_node *node, bool matured);
+
+/** A visited flag only for block nodes.
+ *  @see also: get_irn_visited() inc_irg_visited() inc_irg_block_visited()*/
 unsigned long get_Block_block_visited (ir_node *node);
 void      set_Block_block_visited (ir_node *node, unsigned long visit);
 ir_node  *set_Block_dead(ir_node *block);
@@ -354,12 +354,12 @@ typedef enum {
 } pn_Raise;  /* Projection numbers for Raise. */
 
 typedef enum {
-       CNST_NULL = TV_CLASSIFY_NULL,                           /**< The node is a const(0). */
-       CNST_ONE = TV_CLASSIFY_ONE,                                     /**< The node is a const(1). */
-       CNST_ALL_ONE = TV_CLASSIFY_ALL_ONE, /**< The node is a const(11111...). */
-       CNST_OTHER = TV_CLASSIFY_OTHER,                 /**< The tarvel of the const has another value. */
-       CNST_SYMCONST,                                                                                  /**< The node is symconst. */
-       CNST_NO_CONST                                                                                           /**< The node is no const at all. */
+  CNST_NULL     =  0, /**< The node is a const(0). */
+  CNST_ONE      = +1, /**< The node is a const(1). */
+  CNST_ALL_ONE  = -1, /**< The node is a const(11111...). */
+  CNST_OTHER    =  2, /**< The tarvel of the const has another value. */
+  CNST_SYMCONST =  3, /**< The node is symconst. */
+  CNST_NO_CONST =  4  /**< The node is no const at all. */
 } cnst_classify_t;
 
 tarval  *get_Const_tarval (ir_node *node);
@@ -663,8 +663,15 @@ typedef enum {
 } pn_Cmp;   /* Projection numbers for Cmp */
 /* #define not_mask pn_Cmp_Leg */
 
+/** returns the pnc name from an pnc constant */
 const char *get_pnc_string(int pnc);
+
+/** Calculates the negated pnc condition. */
 int         get_negated_pnc(int pnc);
+
+/** Calculates the swapped pnc condition, i.e., "<" --> ">" */
+int         get_swapped_pnc(int pnc);
+
 ir_node *get_Cmp_left (ir_node *node);
 void     set_Cmp_left (ir_node *node, ir_node *left);
 ir_node *get_Cmp_right (ir_node *node);
@@ -704,6 +711,21 @@ void     set_Cast_op (ir_node *node, ir_node *op);
 type    *get_Cast_type (ir_node *node);
 void     set_Cast_type (ir_node *node, type *to_tp);
 
+/** Checks for upcast.
+ *
+ * Returns true if the Cast node casts a class type to a super type.
+ * Works also for pointers to classes (recursively).
+ */
+int is_Cast_upcast(ir_node *node);
+
+/** Checks for downcast.
+ *
+ * Returns true if the Cast node casts a class type to a sub type.
+ * Works also for pointers to classes (recursively).
+ */
+int is_Cast_downcast(ir_node *node);
+
+
 /** Returns true if n is Phi or Filter in interprocedural_view.
    Returns false if irg in phase building and the Phi has zero
    predecessors: it's a Phi0. */
@@ -819,8 +841,15 @@ 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);
 
+/** Returns the source language type of a Proj node.
+ * Must be an atomic type.  Mode of type must be mode of node.
+ */
+type     *get_Proj_type (ir_node *node);
+
+/** Return the predecessor of a Proj node. */
 ir_node  *get_Proj_pred (ir_node *node);
 void      set_Proj_pred (ir_node *node, ir_node *pred);
+/** Return the projection number of a Proj node. */
 long      get_Proj_proj (ir_node *node);
 void      set_Proj_proj (ir_node *node, long proj);
 
@@ -867,6 +896,8 @@ ir_node *skip_Id  (ir_node *node);   /* Same as skip_nop. */
 ir_node *skip_Tuple (ir_node *node);
 /** returns operand of node if node is a Cast */
 ir_node *skip_Cast  (ir_node *node);
+/** returns true if irn is a Const node. */
+int                     is_Const(const ir_node *node);
 /** returns true if node is a Bad node. */
 int      is_Bad    (const ir_node *node);
 /** returns true if the node is not a Block */
@@ -896,6 +927,11 @@ ir_node *get_fragile_op_mem(ir_node *node);
  *  operation: Cond. */
 int is_forking_op(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. */
+type *get_irn_type(ir_node *n);
+
 /**
  * Access custom node data.
  * The data must have been registered with