X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Firloop.h;h=ce552013cb108771a0f202f6e90b707ca8dd4280;hb=4bad1346ff2abc3923beea23e5ac949acc7ca514;hp=8ea6e71b28821ceb61fe44a79fee26d627996df2;hpb=d8bf70db0d64903b1b8511f8a6c0150fd50fcfae;p=libfirm diff --git a/ir/ana/irloop.h b/ir/ana/irloop.h index 8ea6e71b2..ce552013c 100644 --- a/ir/ana/irloop.h +++ b/ir/ana/irloop.h @@ -27,9 +27,7 @@ # include "irgraph.h" # include "irnode.h" - -/* @@@ Interprocedural backedges ... ???? */ - +/* ------------------------------------------------------------------- */ /* * Backedge information. * @@ -39,8 +37,11 @@ * The backedge information can only be used if the graph is not in * phase phase_building. */ +/* ------------------------------------------------------------------- */ /** Returns true if the predesessor pos is a backedge. */ +int is_inter_backedge(ir_node *n, int pos); +int is_intra_backedge(ir_node *n, int pos); bool is_backedge (ir_node *n, int pos); /** Remarks that edge pos is a backedge. */ void set_backedge (ir_node *n, int pos); @@ -51,6 +52,7 @@ bool has_backedges (ir_node *n); /** Sets backedge information to zero. */ void clear_backedges (ir_node *n); +/* ------------------------------------------------------------------- */ /** * The loops datastructure. * @@ -67,6 +69,7 @@ void clear_backedges (ir_node *n); * @todo We could add a field pointing from a node to the containing loop, * this would cost a lot of memory, though. */ +/* ------------------------------------------------------------------- */ typedef struct ir_loop ir_loop; /* Loop elements are loop nodes and ir nodes */ @@ -118,9 +121,9 @@ int get_loop_loop_nr(ir_loop *loop); void set_loop_link (ir_loop *loop, void *link); void *get_loop_link (const ir_loop *loop); -/* - * Constructing and destructing the loop/backedge information. - */ +/* ------------------------------------------------------------------- */ +/* Constructing and destructing the loop/backedge information. */ +/* ------------------------------------------------------------------- */ /** Constructs backedge information for irg in intraprocedural view. * @returns Maximal depth of loop tree. */ @@ -145,4 +148,21 @@ int construct_ip_cf_backedges (void); void free_loop_information(ir_graph *irg); void free_all_loop_information (void); + + + +/* ------------------------------------------------------------------- */ +/* Simple analyses based on the loop information */ +/* ------------------------------------------------------------------- */ + +/** Test whether a value is loop invariant. + * + * @param n The node to be tested. + * @param block A block node. + * + * Returns true, if the node n is not changed in the loop block + * belongs to or in inner loops of this block. */ +int is_loop_invariant(ir_node *n, ir_node *block); + + #endif /* _IRLOOP_H_ */