* @brief Interblock liveness analysis.
* @author Sebastian Hack
* @date 06.12.2004
- * @version $Id$
*/
#ifndef FIRM_BE_BELIVE_H
#define FIRM_BE_BELIVE_H
#include "bearch.h"
#include "irnodeset.h"
-struct be_irg_t;
-
typedef enum {
be_lv_state_in = 1,
be_lv_state_end = 2,
* Compute the inter block liveness for a graph.
* @param irg The graph.
*/
-be_lv_t *be_liveness(ir_graph *irg);
+be_lv_t *be_liveness_new(ir_graph *irg);
/**
- * Check the given liveness information against a freshly computed one.
+ * Free the liveness information.
*/
-void be_liveness_check(be_lv_t *lv);
+void be_liveness_free(be_lv_t *lv);
/**
- * Free the liveness information.
+ * (Re)compute the liveness information if necessary.
*/
-void be_liveness_free(be_lv_t *lv);
+void be_liveness_compute_sets(be_lv_t *lv);
+void be_liveness_compute_chk(be_lv_t *lv);
/**
- * Recompute the complete liveness information.
+ * Invalidate the liveness information.
+ * You must call this if you modify the program and do not
+ * update the liveness with the be_liveness_{update,remove,introduce}
+ * functions.
+ * @note If changed the control flow then you must also call
+ * be_liveness_invalidate_chk()
*/
-void be_liveness_recompute(be_lv_t *lv);
+void be_liveness_invalidate_sets(be_lv_t *lv);
+void be_liveness_invalidate_chk(be_lv_t *lv);
/**
* Update the liveness information for a single node.
*/
void be_liveness_add_missing(be_lv_t *lv);
-/**
- * Dump the liveness information for a graph.
- * @param f The output.
- * @param irg The graph.
- */
-void be_liveness_dump(const be_lv_t *lv, FILE *f);
-
-/**
- * Dump the liveness information for a graph.
- * @param irg The graph.
- * @param cls_name A string used as substring in the filename.
- */
-void be_liveness_dumpto(const be_lv_t *lv, const char *cls_name);
-
/**
* Check, if a node is live in at a block.
* @param block The block.
*/
int (be_is_live_end)(const be_lv_t *lv, const ir_node *block, const ir_node *irn);
-/**
- * Check, if the SSA dominance property is fulfilled.
- * @param irg The graph.
- * @return 1 if dominance property is fulfilled, 0 otherwise
- */
-int be_check_dominance(ir_graph *irg);
-
/**
* The liveness transfer function.
* Updates a live set over a single step from a given node to its predecessor.
const arch_register_class_t *cls,
const ir_node *pos, ir_nodeset_t *live);
-/**
- * Make sure the live sets are computed.
- * @param lv The liveness information.
- */
-void be_liveness_assure_sets(be_lv_t *lv);
-
-/**
- * Make sure all information needed for liveness checks is available.
- * @param lv The liveness information.
- */
-void be_liveness_assure_chk(be_lv_t *lv);
-
-/**
- * Invalidate the liveness information.
- * You must call this if you modify the program and do not
- * update the liveness with the be_liveness_{update,remove,introduce}
- * functions.
- * @param lv The liveness info.
- */
-void be_liveness_invalidate(be_lv_t *lv);
-
-#endif /* FIRM_BE_BELIVE_H */
+#endif