# include "ircons.h"
# include "irgraph_t.h"
# include "irprog_t.h"
+# include "irnode_t.h"
# include "iropt_t.h"
# include "irflag_t.h"
# include "array.h"
}
-bool interprocedural_view = false;
-INLINE bool get_interprocedural_view(void) {
- return interprocedural_view;
+int __interprocedural_view = false;
+
+int (get_interprocedural_view)(void) {
+ return __get_interprocedural_view();
}
-INLINE void set_interprocedural_view(bool state) {
- interprocedural_view = state;
+
+void (set_interprocedural_view)(int state) {
+ __interprocedural_view = state;
+
+ /* set function vectors for faster access */
+ if (state) {
+ __get_irn_arity = __get_irn_inter_arity;
+ __get_irn_n = __get_irn_inter_n;
+ }
+ else {
+ __get_irn_arity = __get_irn_intra_arity;
+ __get_irn_n = __get_irn_intra_n;
+ }
}
static ident* frame_type_suffix = NULL;
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->unknown = new_ir_node (NULL, res, res->start_block, op_Unknown, mode_T, 0, NULL); */
/* Proj results of start node */
projX = new_Proj (res->start, mode_X, pn_Start_X_initial_exec);
stat_new_graph(res, NULL);
current_ir_graph = res;
- res->n_loc = 1; /* Only the memory. */
+ res->n_loc = 1; /* Only the memory. */
res->visited = 0; /* visited flag, for the ir walker */
res->block_visited=0; /* visited flag, for the 'block'-walker */
#if USE_EXPLICIT_PHI_IN_STACK
res->end = new_End ();
res->end_reg = res->end;
res->end_except = res->end;
- mature_immBlock(get_cur_block());
+ 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->start = new_Start ();
+ res->initial_mem = new_Proj (res->start, mode_M, pn_Start_M);
/* Proj results of start node */
projX = new_Proj (res->start, mode_X, pn_Start_X_initial_exec);
- add_immBlock_pred(res->start_block, projX);
- mature_immBlock (res->current_block);
+ add_immBlock_pred (res->start_block, projX);
+ mature_immBlock (res->start_block); /* mature the start block */
+
add_immBlock_pred (new_immBlock (), projX);
- mature_immBlock(get_cur_block());
+ mature_immBlock (get_cur_block()); /* mature the 'body' block for expressions */
/* Set the visited flag high enough that the block will never be visited. */
set_irn_visited(get_cur_block(), -1);
set_Block_block_visited(get_cur_block(), -1);
Does not free types, entities or modes that are used only by this
graph, nor the entity standing for this graph. */
void free_ir_graph (ir_graph *irg) {
+
stat_free_graph(irg);
if (irg->outs_state != outs_none) free_outs(irg);
if (irg->frame_type) free_type(irg->frame_type);
(inc_irg_block_visited)(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");
+
+ ent = get_irg_entity(irg);
+ if(visibility_external_allocated == get_entity_visibility(ent)
+ && peculiarity_existent == get_entity_peculiarity(ent)) {
+ res = true;
+ }
+ return(res);
+}