is_irn_always_opt() added
[libfirm] / ir / ir / irgraph_t.h
index 04fd734..09966fd 100644 (file)
@@ -3,7 +3,7 @@
  * File name:   ir/ir/irgraph.c
  * Purpose:     Entry point to the representation of procedure code -- internal header.
  * Author:      Martin Trapp, Christian Schaefer
- * Modified by: Goetz Lindenmaier
+ * Modified by: Goetz Lindenmaier, Michael Beck
  * Created:
  * CVS-ID:      $Id$
  * Copyright:   (c) 1998-2003 Universität Karlsruhe
 /**
  * @file irgraph_t.h
  *
- * ir graph construction.
- *
- * @author Martin Trapp, Christian Schaefer
+ * IR graph construction.
  */
-
-
 #ifndef _IRGRAPH_T_H_
 #define _IRGRAPH_T_H_
 
 #include "pset.h"
 #include "set.h"
 
+/** Prefix that is added to every frame type. */
 #define FRAME_TP_SUFFIX "frame_tp"
 
 /**
  * Edge info to put into an irg.
  */
 typedef struct _irg_edge_info_t {
-       set *edges;
-       unsigned activated : 1;
+  set      *edges;         /**< a set containing all edges of a graph. */
+  unsigned activated : 1;  /**< set if edges are activated for the graph. */
 } irg_edge_info_t;
 
 /**
  * Index constants for nodes that can be accessed through the graph itself.
  */
 enum irg_anchors {
-  anchor_start_block = 0, /**< block the start node will belong to */
-  anchor_start,           /**< start node of this ir_graph */
-  anchor_end_block,       /**< block the end node will belong to */
-  anchor_end,             /**< end node of this ir_graph */
-  anchor_end_reg,         /**< end node of this ir_graph */
-  anchor_end_except,      /**< end node of this ir_graph */
-  anchor_frame,           /**< method's frame */
-  anchor_globals,         /**< pointer to the data segment containing all
-                               globals as well as global procedures. */
-  anchor_tls,             /**< pointer to the thread local storage containing all
-                               thread local data. */
-  anchor_initial_mem,     /**< initial memory of this graph */
-  anchor_args,            /**< methods arguments */
-  anchor_bad,             /**< bad node of this ir_graph, the one and
-                               only in this graph */
-  anchor_no_mem,          /**< NoMem node of this ir_graph, the one and only in this graph */
+  anchor_start_block = 0,  /**< block the start node will belong to */
+  anchor_start,            /**< start node of this ir_graph */
+  anchor_end_block,        /**< block the end node will belong to */
+  anchor_end,              /**< end node of this ir_graph */
+  anchor_end_reg,          /**< end node of this ir_graph */
+  anchor_end_except,       /**< end node of this ir_graph */
+  anchor_frame,            /**< method's frame */
+  anchor_globals,          /**< pointer to the data segment containing all
+                                globals as well as global procedures. */
+  anchor_tls,              /**< pointer to the thread local storage containing all
+                                thread local data. */
+  anchor_initial_mem,      /**< initial memory of this graph */
+  anchor_args,             /**< methods arguments */
+  anchor_value_param_base, /**< method value param base */
+  anchor_bad,              /**< bad node of this ir_graph, the one and
+                                only in this graph */
+  anchor_no_mem,           /**< NoMem node of this ir_graph, the one and only in this graph */
   anchor_max
 };
 
@@ -96,17 +94,18 @@ struct ir_graph {
   unsigned additional_properties;          /**< additional graph properties. */
 
   /* -- Fields indicating different states of irgraph -- */
-  irg_phase_state phase_state;       /**< compiler phase */
-  op_pin_state irg_pinned_state;     /**< Flag for status of nodes */
+  irg_phase_state phase_state;       /**< Compiler phase. */
+  op_pin_state irg_pinned_state;     /**< Flag for status of nodes. */
   irg_outs_state outs_state;         /**< Out edges. */
-  irg_dom_state dom_state;           /**< Dominator state information */
-  irg_dom_state pdom_state;          /**< Post Dominator state information */
-  ir_typeinfo_state typeinfo_state;        /**< Validity of type information */
-  irg_callee_info_state callee_info_state; /**< Validity of callee information */
-  irg_loopinfo_state loopinfo_state;       /**< state of loop information */
-  exec_freq_state   execfreq_state;        /**< state of execution frequency information */
-  ir_class_cast_state class_cast_state;    /**< kind of cast operations in code. */
-  irg_extblk_info_state extblk_state;      /**< state of extended basic block info */
+  irg_dom_state dom_state;           /**< Dominator state information. */
+  irg_dom_state pdom_state;          /**< Post Dominator state information. */
+  ir_typeinfo_state typeinfo_state;        /**< Validity of type information. */
+  irg_callee_info_state callee_info_state; /**< Validity of callee information. */
+  irg_loopinfo_state loopinfo_state;       /**< State of loop information. */
+  exec_freq_state   execfreq_state;        /**< State of execution frequency information. */
+  ir_class_cast_state class_cast_state;    /**< Kind of cast operations in code. */
+  irg_extblk_info_state extblk_state;      /**< State of extended basic block info. */
+  unsigned fp_model;                       /**< floating point model of the graph. */
 
   /* -- Fields for construction -- */
 #if USE_EXPLICIT_PHI_IN_STACK
@@ -303,6 +302,16 @@ _set_irg_args(ir_graph *irg, ir_node *node) {
   irg->anchors[anchor_args] = node;
 }
 
+static INLINE ir_node *
+_get_irg_value_param_base(const ir_graph *irg) {
+  return irg->anchors[anchor_value_param_base];
+}
+
+static INLINE void
+_set_irg_value_param_base(ir_graph *irg, ir_node *node) {
+  irg->anchors[anchor_value_param_base] = node;
+}
+
 static INLINE ir_node **
 _get_irg_proj_args(const ir_graph *irg) {
   return irg->proj_args;
@@ -536,6 +545,12 @@ _get_irg_estimated_node_cnt(const ir_graph *irg) {
   return irg->estimated_node_count;
 }
 
+/* Return the floating point model of this graph. */
+static INLINE unsigned
+_get_irg_fp_model(const ir_graph *irg) {
+       return irg->fp_model;
+}
+
 /**
  * Allocates a new idx in the irg for the node and adds the irn to the idx -> irn map.
  * @param irg The graph.
@@ -601,6 +616,8 @@ get_idx_irn(ir_graph *irg, unsigned idx) {
 #define set_irg_initial_mem(irg, node)        _set_irg_initial_mem(irg, node)
 #define get_irg_args(irg)                     _get_irg_args(irg)
 #define set_irg_args(irg, node)               _set_irg_args(irg, node)
+#define get_irg_value_param_base(irg)         _get_irg_value_param_base(irg)
+#define set_irg_value_param_base(irg, node)   _set_irg_value_param_base(irg, node)
 #define get_irg_bad(irg)                      _get_irg_bad(irg)
 #define set_irg_bad(irg, node)                _set_irg_bad(irg, node)
 #define get_irg_no_mem(irg)                   _get_irg_no_mem(irg)
@@ -641,5 +658,6 @@ get_idx_irn(ir_graph *irg, unsigned idx) {
 #define inc_irg_block_visited(irg)            _inc_irg_block_visited(irg)
 #define dec_irg_block_visited(irg)            _dec_irg_block_visited(irg)
 #define get_irg_estimated_node_cnt(irg)       _get_irg_estimated_node_cnt(irg)
+#define get_irg_fp_model(irg)                 _get_irg_fp_model(irg)
 
 # endif /* _IRGRAPH_T_H_ */