projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fixed bugs in remove_bad_predecessors.
[libfirm]
/
ir
/
ir
/
irgraph.c
diff --git
a/ir/ir/irgraph.c
b/ir/ir/irgraph.c
index
e64bacb
..
3f00b28
100644
(file)
--- a/
ir/ir/irgraph.c
+++ b/
ir/ir/irgraph.c
@@
-19,6
+19,7
@@
# include "ircons.h"
# include "irgraph_t.h"
# include "irprog_t.h"
# 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"
# include "iropt_t.h"
# include "irflag_t.h"
# include "array.h"
@@
-36,12
+37,24
@@
INLINE void set_current_ir_graph(ir_graph *graph) {
}
}
-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;
}
static ident* frame_type_suffix = NULL;
@@
-66,7
+79,7
@@
void free_Phi_in_stack(Phi_in_stack *s);
and optimization.
*/
ir_graph *
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;
{
ir_graph *res;
ir_node *first_block;
@@
-80,7
+93,6
@@
new_ir_graph (entity *ent, int n_loc)
stat_new_graph(res, ent);
current_ir_graph = res;
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()) {
/*-- initialized for each graph. --*/
if (get_opt_precise_exc_context()) {
@@
-138,10
+150,12
@@
new_ir_graph (entity *ent, int n_loc)
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->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);
/* 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
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
@@
-166,6
+180,14
@@
new_ir_graph (entity *ent, int n_loc)
}
}
+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) {
/* 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) {
@@
-201,7
+223,8
@@
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->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);
res->start = new_Start ();
res->initial_mem = new_Proj (res->start, mode_M, pn_Start_M);
@@
-218,6
+241,7
@@
ir_graph *new_const_code_irg(void) {
set_Block_block_visited(res->start_block, -1);
set_irn_visited(res->start_block, -1);
set_irn_visited(res->bad, -1);
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;
res->phase_state = phase_high;
return res;
@@
-262,7
+286,7
@@
void free_ir_graph (ir_graph *irg) {
void set_irg_{attr name} (ir_graph *irg, {attr type} {attr}); */
int
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);
}
return __is_ir_graph(thing);
}
@@
-279,7
+303,7
@@
get_irg_graph_nr(ir_graph *irg) {
}
ir_node *
}
ir_node *
-(get_irg_start_block)(ir_graph *irg) {
+(get_irg_start_block)(
const
ir_graph *irg) {
return __get_irg_start_block(irg);
}
return __get_irg_start_block(irg);
}
@@
-289,7
+313,7
@@
void
}
ir_node *
}
ir_node *
-(get_irg_start)(ir_graph *irg) {
+(get_irg_start)(
const
ir_graph *irg) {
return __get_irg_start(irg);
}
return __get_irg_start(irg);
}
@@
-299,7
+323,7
@@
void
}
ir_node *
}
ir_node *
-(get_irg_end_block)(ir_graph *irg) {
+(get_irg_end_block)(
const
ir_graph *irg) {
return __get_irg_end_block(irg);
}
return __get_irg_end_block(irg);
}
@@
-309,7
+333,7
@@
void
}
ir_node *
}
ir_node *
-(get_irg_end)(ir_graph *irg) {
+(get_irg_end)(
const
ir_graph *irg) {
return __get_irg_end(irg);
}
return __get_irg_end(irg);
}
@@
-319,7
+343,7
@@
void
}
ir_node *
}
ir_node *
-(get_irg_end_reg)(ir_graph *irg) {
+(get_irg_end_reg)(
const
ir_graph *irg) {
return __get_irg_end_reg(irg);
}
return __get_irg_end_reg(irg);
}
@@
-329,7
+353,7
@@
void set_irg_end_reg (ir_graph *irg, ir_node *node) {
}
ir_node *
}
ir_node *
-(get_irg_end_except)(ir_graph *irg) {
+(get_irg_end_except)(
const
ir_graph *irg) {
return __get_irg_end_except(irg);
}
return __get_irg_end_except(irg);
}
@@
-339,7
+363,7
@@
void set_irg_end_except (ir_graph *irg, ir_node *node) {
}
ir_node *
}
ir_node *
-(get_irg_cstore)(ir_graph *irg) {
+(get_irg_cstore)(
const
ir_graph *irg) {
return __get_irg_cstore(irg);
}
return __get_irg_cstore(irg);
}
@@
-349,7
+373,7
@@
void
}
ir_node *
}
ir_node *
-(get_irg_frame)(ir_graph *irg) {
+(get_irg_frame)(
const
ir_graph *irg) {
return __get_irg_frame(irg);
}
return __get_irg_frame(irg);
}
@@
-359,7
+383,7
@@
void
}
ir_node *
}
ir_node *
-(get_irg_globals)(ir_graph *irg) {
+(get_irg_globals)(
const
ir_graph *irg) {
return __get_irg_globals(irg);
}
return __get_irg_globals(irg);
}
@@
-369,8
+393,7
@@
void
}
ir_node *
}
ir_node *
-(get_irg_initial_mem)(ir_graph *irg)
-{
+(get_irg_initial_mem)(const ir_graph *irg) {
return __get_irg_initial_mem(irg);
}
return __get_irg_initial_mem(irg);
}
@@
-380,7
+403,7
@@
void
}
ir_node *
}
ir_node *
-(get_irg_args)(ir_graph *irg) {
+(get_irg_args)(
const
ir_graph *irg) {
return __get_irg_args(irg);
}
return __get_irg_args(irg);
}
@@
-390,7
+413,7
@@
void
}
ir_node *
}
ir_node *
-(get_irg_bad)(ir_graph *irg) {
+(get_irg_bad)(
const
ir_graph *irg) {
return __get_irg_bad(irg);
}
return __get_irg_bad(irg);
}
@@
-399,22
+422,18
@@
void
__set_irg_bad(irg, node);
}
__set_irg_bad(irg, node);
}
-/* GL removed: we need unknown with mode for analyses.
ir_node *
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
}
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 *
ir_node *
-(get_irg_current_block)(ir_graph *irg) {
+(get_irg_current_block)(
const
ir_graph *irg) {
return __get_irg_current_block(irg);
}
return __get_irg_current_block(irg);
}
@@
-424,17
+443,17
@@
void
}
entity *
}
entity *
-(get_irg_entity)(ir_graph *irg) {
- return __get_irg_ent(irg);
+(get_irg_entity)(
const
ir_graph *irg) {
+ return __get_irg_ent
ity
(irg);
}
void
(set_irg_entity)(ir_graph *irg, entity *ent) {
}
void
(set_irg_entity)(ir_graph *irg, entity *ent) {
- __set_irg_ent(irg, ent);
+ __set_irg_ent
ity
(irg, ent);
}
type *
}
type *
-(get_irg_frame_type)(ir_graph *irg) {
+(get_irg_frame_type)(
const
ir_graph *irg) {
return __get_irg_frame_type(irg);
}
return __get_irg_frame_type(irg);
}
@@
-446,11
+465,11
@@
void
/* To test for a frame type */
int
/* 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++) {
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;
}
}
if (ftp == frame_tp) return true;
}
}
@@
-479,7
+498,7
@@
set_irg_n_loc (ir_graph *irg, int n_loc)
/* Returns the obstack associated with the graph. */
struct obstack *
/* 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);
}
return __get_irg_obstack(irg);
}
@@
-505,7
+524,7
@@
int node_is_in_irgs_storage(ir_graph *irg, ir_node *n)
}
irg_phase_state
}
irg_phase_state
-(get_irg_phase_state)(ir_graph *irg) {
+(get_irg_phase_state)(
const
ir_graph *irg) {
return __get_irg_phase_state(irg);
}
return __get_irg_phase_state(irg);
}
@@
-515,12
+534,12
@@
void
}
op_pin_state
}
op_pin_state
-(get_irg_pinned)(ir_graph *irg) {
+(get_irg_pinned)(
const
ir_graph *irg) {
return __get_irg_pinned(irg);
}
irg_outs_state
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);
}
return __get_irg_outs_state(irg);
}
@@
-530,7
+549,7
@@
void
}
irg_dom_state
}
irg_dom_state
-(get_irg_dom_state)(ir_graph *irg) {
+(get_irg_dom_state)(
const
ir_graph *irg) {
return __get_irg_dom_state(irg);
}
return __get_irg_dom_state(irg);
}
@@
-540,7
+559,7
@@
void
}
irg_loopinfo_state
}
irg_loopinfo_state
-(get_irg_loopinfo_state)(ir_graph *irg) {
+(get_irg_loopinfo_state)(
const
ir_graph *irg) {
return __get_irg_loopinfo_state(irg);
}
return __get_irg_loopinfo_state(irg);
}
@@
-570,7
+589,7
@@
void
}
irg_callee_info_state
}
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);
}
return __get_irg_callee_info_state(irg);
}
@@
-580,7
+599,7
@@
void
}
irg_inline_property
}
irg_inline_property
-(get_irg_inline_property)(ir_graph *irg) {
+(get_irg_inline_property)(
const
ir_graph *irg) {
return __get_irg_inline_property(irg);
}
return __get_irg_inline_property(irg);
}
@@
-595,7
+614,7
@@
void
}
void *
}
void *
-(get_irg_link)(ir_graph *irg) {
+(get_irg_link)(
const
ir_graph *irg) {
return __get_irg_link(irg);
}
return __get_irg_link(irg);
}
@@
-603,7
+622,7
@@
void *
static int max_irg_visited = 0;
unsigned long
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);
}
return __get_irg_visited(irg);
}
@@
-652,7
+671,7
@@
inc_max_irg_visited(void)
}
unsigned long
}
unsigned long
-(get_irg_block_visited)(ir_graph *irg) {
+(get_irg_block_visited)(
const
ir_graph *irg) {
return __get_irg_block_visited(irg);
}
return __get_irg_block_visited(irg);
}
@@
-665,20
+684,3
@@
void
(inc_irg_block_visited)(ir_graph *irg) {
__inc_irg_block_visited(irg);
}
(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);
-}