# 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;
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;
void set_irg_{attr name} (ir_graph *irg, {attr type} {attr}); */
int
-(is_ir_graph)(void *thing) {
+(is_ir_graph)(const void *thing) {
return __is_ir_graph(thing);
}
}
ir_node *
-(get_irg_start_block)(ir_graph *irg) {
+(get_irg_start_block)(const ir_graph *irg) {
return __get_irg_start_block(irg);
}
}
ir_node *
-(get_irg_start)(ir_graph *irg) {
+(get_irg_start)(const ir_graph *irg) {
return __get_irg_start(irg);
}
}
ir_node *
-(get_irg_end_block)(ir_graph *irg) {
+(get_irg_end_block)(const ir_graph *irg) {
return __get_irg_end_block(irg);
}
}
ir_node *
-(get_irg_end)(ir_graph *irg) {
+(get_irg_end)(const ir_graph *irg) {
return __get_irg_end(irg);
}
}
ir_node *
-(get_irg_end_reg)(ir_graph *irg) {
+(get_irg_end_reg)(const ir_graph *irg) {
return __get_irg_end_reg(irg);
}
}
ir_node *
-(get_irg_end_except)(ir_graph *irg) {
+(get_irg_end_except)(const ir_graph *irg) {
return __get_irg_end_except(irg);
}
}
ir_node *
-(get_irg_cstore)(ir_graph *irg) {
+(get_irg_cstore)(const ir_graph *irg) {
return __get_irg_cstore(irg);
}
}
ir_node *
-(get_irg_frame)(ir_graph *irg) {
+(get_irg_frame)(const ir_graph *irg) {
return __get_irg_frame(irg);
}
}
ir_node *
-(get_irg_globals)(ir_graph *irg) {
+(get_irg_globals)(const ir_graph *irg) {
return __get_irg_globals(irg);
}
}
ir_node *
-(get_irg_initial_mem)(ir_graph *irg)
-{
+(get_irg_initial_mem)(const ir_graph *irg) {
return __get_irg_initial_mem(irg);
}
}
ir_node *
-(get_irg_args)(ir_graph *irg) {
+(get_irg_args)(const ir_graph *irg) {
return __get_irg_args(irg);
}
}
ir_node *
-(get_irg_bad)(ir_graph *irg) {
+(get_irg_bad)(const ir_graph *irg) {
return __get_irg_bad(irg);
}
__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)(ir_graph *irg) {
+(get_irg_current_block)(const ir_graph *irg) {
return __get_irg_current_block(irg);
}
}
entity *
-(get_irg_entity)(ir_graph *irg) {
- return __get_irg_ent(irg);
+(get_irg_entity)(const ir_graph *irg) {
+ return __get_irg_entity(irg);
}
void
(set_irg_entity)(ir_graph *irg, entity *ent) {
- __set_irg_ent(irg, ent);
+ __set_irg_entity(irg, ent);
}
type *
-(get_irg_frame_type)(ir_graph *irg) {
+(get_irg_frame_type)(const ir_graph *irg) {
return __get_irg_frame_type(irg);
}
/* To test for a frame type */
int
-is_frame_type(type *ftp) {
+is_frame_type(const type *ftp) {
int i;
if (is_class_type(ftp)) {
for (i = 0; i < get_irp_n_irgs(); i++) {
- type *frame_tp = get_irg_frame_type(get_irp_irg(i));
+ const type *frame_tp = get_irg_frame_type(get_irp_irg(i));
if (ftp == frame_tp) return true;
}
}
/* Returns the obstack associated with the graph. */
struct obstack *
-(get_irg_obstack)(ir_graph *irg) {
+(get_irg_obstack)(const ir_graph *irg) {
return __get_irg_obstack(irg);
}
}
irg_phase_state
-(get_irg_phase_state)(ir_graph *irg) {
+(get_irg_phase_state)(const ir_graph *irg) {
return __get_irg_phase_state(irg);
}
}
op_pin_state
-(get_irg_pinned)(ir_graph *irg) {
+(get_irg_pinned)(const ir_graph *irg) {
return __get_irg_pinned(irg);
}
irg_outs_state
-(get_irg_outs_state)(ir_graph *irg) {
+(get_irg_outs_state)(const ir_graph *irg) {
return __get_irg_outs_state(irg);
}
}
irg_dom_state
-(get_irg_dom_state)(ir_graph *irg) {
+(get_irg_dom_state)(const ir_graph *irg) {
return __get_irg_dom_state(irg);
}
}
irg_loopinfo_state
-(get_irg_loopinfo_state)(ir_graph *irg) {
+(get_irg_loopinfo_state)(const ir_graph *irg) {
return __get_irg_loopinfo_state(irg);
}
}
irg_callee_info_state
-(get_irg_callee_info_state)(ir_graph *irg) {
+(get_irg_callee_info_state)(const ir_graph *irg) {
return __get_irg_callee_info_state(irg);
}
}
irg_inline_property
-(get_irg_inline_property)(ir_graph *irg) {
+(get_irg_inline_property)(const ir_graph *irg) {
return __get_irg_inline_property(irg);
}
}
void *
-(get_irg_link)(ir_graph *irg) {
+(get_irg_link)(const ir_graph *irg) {
return __get_irg_link(irg);
}
static int max_irg_visited = 0;
unsigned long
-(get_irg_visited)(ir_graph *irg) {
+(get_irg_visited)(const ir_graph *irg) {
return __get_irg_visited(irg);
}
}
unsigned long
-(get_irg_block_visited)(ir_graph *irg) {
+(get_irg_block_visited)(const ir_graph *irg) {
return __get_irg_block_visited(irg);
}