* PURPOSE.
*/
-/*
- * Project: libFIRM
- * File name: ir/opt/cfopt.c
- * Purpose: control flow optimizations
- * Author:
- * Created:
- * CVS-ID: $Id$
- * Copyright: (c) 1998-2004 Universität Karlsruhe
+/**
+ * @file
+ * @brief Control flow optimizations.
+ * @author Goetz Lindenmaier, Michael Beck, Sebastian Hack
+ * @version $Id$
*/
-
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
* PURPOSE.
*/
-/*
- * Project: libFIRM
- * File name: ir/opt/cfopt.h
- * Purpose: control flow optimizations
- * Author: Goetz Lindenmaier
- * Created:
- * CVS-ID: $Id$
- * Copyright: (c) 1998-2004 Universität Karlsruhe
- */
-
/**
- * @file cfopt.h
- *
- * Control flow optimization.
- *
- * @author Goetz Lindenmaier
+ * @file
+ * @brief Control flow optimizations.
+ * @author Goetz Lindenmaier, Michael Beck, Sebastian Hack
+ * @version $Id$
*/
-#ifndef _CFOPT_H_
-#define _CFOPT_H_
+#ifndef FIRM_OPT_CFOPT_H
+#define FIRM_OPT_CFOPT_H
#include "irgraph.h"
*/
void optimize_cf(ir_graph *irg);
-#endif /* _CFOPT_H_ */
+#endif /* FIRM_OPT_CFOPT_H */
* PURPOSE.
*/
-/*
- * Project: libFIRM
- * File name: ir/opt/cfopt.c
- * Purpose: Partial condition evaluation
- * Author: Christoph Mallon, Matthias Braun
- * Created: 10. Sep. 2006
- * CVS-ID: $Id$
- * Copyright: (c) 1998-2006 Universität Karlsruhe
+/**
+ * @file
+ * @brief Partial condition evaluation
+ * @date 10. Sep. 2006
+ * @author Christoph Mallon, Matthias Braun
+ * @version $Id$
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
/**
- * Block-walker: searchs for the following construct
+ * Block-walker: searches for the following construct
*
* Const or Phi with constants
* |
remove_pred(env.cnst_pred, env.cnst_pos);
- // the graph is changed now
+ /* the graph is changed now */
*changed = 1;
- set_irg_doms_inconsistent(irg);
- set_irg_extblk_inconsistent(irg);
- set_irg_loopinfo_inconsistent(irg);
}
}
}
void opt_cond_eval(ir_graph* irg)
{
- int changed;
+ int changed, rerun;
FIRM_DBG_REGISTER(dbg, "firm.opt.condeval");
DB((dbg, LEVEL_1, "===> Performing condition evaluation on %+F\n", irg));
- edges_assure(irg);
remove_critical_cf_edges(irg);
-
normalize_proj_nodes(irg);
+ edges_assure(irg);
set_using_irn_link(irg);
set_using_visited(irg);
+ changed = 0;
do {
- changed = 0;
- irg_block_walk_graph(irg, cond_eval, NULL, &changed);
- } while(changed);
+ rerun = 0;
+ irg_block_walk_graph(irg, cond_eval, NULL, &rerun);
+ changed |= rerun;
+ } while (rerun);
+
+ if (changed) {
+ /* control flow changed, some blocks may become dead */
+ set_irg_doms_inconsistent(irg);
+ set_irg_extblk_inconsistent(irg);
+ set_irg_loopinfo_inconsistent(irg);
+ }
clear_using_visited(irg);
clear_using_irn_link(irg);
* PURPOSE.
*/
-#ifndef FIRM_COND_EVAL_H
-#define FIRM_COND_EVAL_H
+/**
+ * @file
+ * @brief Partial condition evaluation
+ * @author Christoph Mallon, Matthias Braun
+ * @version $Id$
+ */
+#ifndef FIRM_OPT_CONDEVAL_H
+#define FIRM_OPT_CONDEVAL_H
-#include "irgraph.h"
+#include "firm_types.h"
+/**
+ * Perform partial conditionla evaluation on the given graph.
+ *
+ * @param irg the graph
+ */
void opt_cond_eval(ir_graph* irg);
-#endif /* FIRM_COND_EVAL_H */
+#endif /* FIRM_OPT_CONDEVAL_H */