Do not use get_nodes_block(). It is now available when global CSE is enabled
[libfirm] / ir / ir / irgraph.c
index c91e41a..0b033a1 100644 (file)
@@ -17,8 +17,9 @@
 #ifdef HAVE_STRING_H
 # include <string.h>
 #endif
-
-#include <stddef.h>
+#ifdef HAVE_STDDEF_H
+# include <stddef.h>
+#endif
 
 #include "xmalloc.h"
 #include "ircons.h"
@@ -201,6 +202,7 @@ new_r_ir_graph (entity *ent, int n_loc)
   res->execfreq_state      = exec_freq_none;
   res->class_cast_state    = ir_class_casts_transitive;
   res->extblk_state        = ir_extblk_info_none;
+  res->fp_model            = fp_model_precise;
 
   /*-- Type information for the procedure of the graph --*/
   res->ent = ent;
@@ -224,12 +226,13 @@ new_r_ir_graph (entity *ent, int n_loc)
   set_irg_start      (res, start);
 
   /* Proj results of start node */
-  projX              = new_Proj(start, mode_X, pn_Start_X_initial_exec);
-  set_irg_frame      (res, new_Proj(start, mode_P_data, pn_Start_P_frame_base));
-  set_irg_globals    (res, new_Proj(start, mode_P_data, pn_Start_P_globals));
-  set_irg_tls        (res, new_Proj(start, mode_P_data, pn_Start_P_tls));
-  set_irg_args       (res, new_Proj(start, mode_T, pn_Start_T_args));
-  initial_mem        = new_Proj(start, mode_M, pn_Start_M);
+  projX                   = new_Proj(start, mode_X, pn_Start_X_initial_exec);
+  set_irg_frame           (res, new_Proj(start, mode_P_data, pn_Start_P_frame_base));
+  set_irg_globals         (res, new_Proj(start, mode_P_data, pn_Start_P_globals));
+  set_irg_tls             (res, new_Proj(start, mode_P_data, pn_Start_P_tls));
+  set_irg_args            (res, new_Proj(start, mode_T,      pn_Start_T_args));
+  set_irg_value_param_base(res, new_Proj(start, mode_P_data, pn_Start_P_value_arg_base));
+  initial_mem             = new_Proj(start, mode_M, pn_Start_M);
   set_irg_initial_mem(res, initial_mem);
 
   add_immBlock_pred(start_block, projX);
@@ -266,7 +269,7 @@ new_ir_graph(entity *ent, int n_loc)
   return res;
 }
 
-/* Make a rudimentary ir graph for the constant code.
+/* Make a rudimentary IR graph for the constant code.
    Must look like a correct irg, spare everything else. */
 ir_graph *new_const_code_irg(void) {
   ir_graph *res;
@@ -298,6 +301,7 @@ ir_graph *new_const_code_irg(void) {
   res->phase_state      = phase_building;
   res->irg_pinned_state = op_pin_state_pinned;
   res->extblk_state     = ir_extblk_info_none;
+  res->fp_model         = fp_model_precise;
 
   res->value_table = new_identities (); /* value table for global value
                        numbering for optimizing use in
@@ -509,6 +513,16 @@ void
   _set_irg_args(irg, node);
 }
 
+ir_node *
+(get_irg_value_param_base)(const ir_graph *irg) {
+  return _get_irg_value_param_base(irg);
+}
+
+void
+(set_irg_value_param_base)(ir_graph *irg, ir_node *node) {
+  _set_irg_value_param_base(irg, node);
+}
+
 ir_node **
 (get_irg_proj_args) (const ir_graph *irg) {
   return _get_irg_proj_args (irg);
@@ -807,6 +821,15 @@ void
   _inc_irg_block_visited(irg);
 }
 
+/* Return the floating point model of this graph. */
+unsigned (get_irg_fp_model)(const ir_graph *irg) {
+  return _get_irg_fp_model(irg);
+}
+
+/* Sets the floating point model for this graph. */
+void set_irg_fp_model(ir_graph *irg, unsigned model) {
+  irg->fp_model = model;
+}
 
 /**
  * walker Start->End: places Proj nodes into the same block
@@ -815,8 +838,7 @@ void
  * @param n    the node
  * @param env  ignored
  */
-static void normalize_proj_walker(ir_node *n, void *env)
-{
+static void normalize_proj_walker(ir_node *n, void *env){
   if (is_Proj(n)) {
     ir_node *pred  = get_Proj_pred(n);
     ir_node *block = get_nodes_block(pred);
@@ -826,15 +848,13 @@ static void normalize_proj_walker(ir_node *n, void *env)
 }
 
 /* move Proj nodes into the same block as its predecessors */
-void normalize_proj_nodes(ir_graph *irg)
-{
+void normalize_proj_nodes(ir_graph *irg) {
   irg_walk_graph(irg, NULL, normalize_proj_walker, NULL);
   set_irg_outs_inconsistent(irg);
 }
 
 /* set a description for local value n */
-void set_irg_loc_description(ir_graph *irg, int n, void *description)
-{
+void set_irg_loc_description(ir_graph *irg, int n, void *description) {
   assert(0 <= n && n < irg->n_loc);
 
   if (! irg->loc_descriptions)
@@ -844,8 +864,7 @@ void set_irg_loc_description(ir_graph *irg, int n, void *description)
 }
 
 /* get the description for local value n */
-void *get_irg_loc_description(ir_graph *irg, int n)
-{
+void *get_irg_loc_description(ir_graph *irg, int n) {
   assert(0 <= n && n < irg->n_loc);
   return irg->loc_descriptions ? irg->loc_descriptions[n] : NULL;
 }