and optimization.
*/
ir_graph *
-new_ir_graph (entity *ent, int n_loc)
+new_r_ir_graph (entity *ent, int n_loc)
{
ir_graph *res;
ir_node *first_block;
stat_new_graph(res, ent);
current_ir_graph = res;
- add_irp_irg(res); /* remember this graph global. */
/*-- initialized for each graph. --*/
if (get_opt_precise_exc_context()) {
res->start_block = new_immBlock();
res->start = new_Start();
res->bad = new_ir_node(NULL, res, res->start_block, op_Bad, mode_T, 0, NULL);
+ res->no_mem = new_ir_node(NULL, res, res->start_block, op_NoMem, mode_M, 0, NULL);
/* Proj results of start node */
projX = new_Proj (res->start, mode_X, pn_Start_X_initial_exec);
- res->frame = new_Proj (res->start, mode_P_mach, pn_Start_P_frame_base); res->globals = new_Proj (res->start, mode_P_mach, pn_Start_P_globals);
+ res->frame = new_Proj (res->start, mode_P_mach, pn_Start_P_frame_base);
+ res->globals = new_Proj (res->start, mode_P_mach, pn_Start_P_globals);
res->initial_mem = new_Proj (res->start, mode_M, pn_Start_M);
res->args = new_Proj (res->start, mode_T, pn_Start_T_args);
#ifdef DEBUG_libfirm
}
+ir_graph *
+new_ir_graph (entity *ent, int n_loc)
+{
+ ir_graph *res = new_r_ir_graph (ent, n_loc);
+ add_irp_irg(res); /* remember this graph global. */
+ return res;
+}
+
/* 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) {
res->end_reg = res->end;
res->end_except = res->end;
mature_immBlock(get_cur_block()); /* mature the end block */
- res->bad = new_ir_node (NULL, res, res->start_block, op_Bad, mode_T, 0, NULL);
+ res->bad = new_ir_node (NULL, res, res->start_block, op_Bad, mode_T, 0, NULL);
+ res->no_mem = new_ir_node (NULL, res, res->start_block, op_NoMem, mode_M, 0, NULL);
res->start = new_Start ();
res->initial_mem = new_Proj (res->start, mode_M, pn_Start_M);
set_Block_block_visited(res->start_block, -1);
set_irn_visited(res->start_block, -1);
set_irn_visited(res->bad, -1);
+ set_irn_visited(res->no_mem, -1);
res->phase_state = phase_high;
return res;
__set_irg_bad(irg, node);
}
-/* GL removed: we need unknown with mode for analyses.
ir_node *
-get_irg_unknown (ir_graph *irg)
-{
- return irg->unknown;
+(get_irg_no_mem)(const ir_graph *irg) {
+ return __get_irg_no_mem(irg);
}
void
-set_irg_unknown (ir_graph *irg, ir_node *node)
-{
- irg->unknown = node;
+(set_irg_no_mem)(ir_graph *irg, ir_node *node) {
+ __set_irg_no_mem(irg, node);
}
-*/
ir_node *
(get_irg_current_block)(const ir_graph *irg) {
__inc_irg_block_visited(irg);
}
-/* is irg a pseudo graph for analysis? */
-int is_pseudo_ir_graph(ir_graph *irg)
-{
- int res = false;
- entity *ent;
- assert(irg && "nothing here");
- assert(is_ir_graph(irg) && "no ir_graph given");
+/**
+ * walker Start->End: places Proj nodes into the same block
+ * as it's predecessors
+ *
+ * @param n the node
+ * @param env ignored
+ */
+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);
- ent = get_irg_entity(irg);
- if(visibility_external_allocated == get_entity_visibility(ent)
- && peculiarity_existent == get_entity_peculiarity(ent)) {
- res = true;
+ set_nodes_block(n, block);
}
- return(res);
+}
+
+/* put the proj's into the same block as its predecessors */
+void normalize_proj_nodes(ir_graph *irg)
+{
+ irg_walk_graph(irg, NULL, normalize_proj_walker, NULL);
}