* @file
* @brief Reassociation
* @author Michael Beck
- * @version $Id$
*/
#include "config.h"
static void do_reassociation(walker_t *wenv)
{
int i, res, changed;
- ir_node *n, *blk;
+ ir_node *n;
while (! waitq_empty(wenv->wq)) {
n = (ir_node*)waitq_get(wenv->wq);
set_irn_link(n, NULL);
- blk = get_nodes_block(n);
-
hook_reassociate(1);
/* reassociation must run until a fixpoint is reached. */
int optimize_reassociation(ir_graph *irg)
{
walker_t env;
- irg_loopinfo_state state;
assert(get_irg_phase_state(irg) != phase_building);
assert(get_irg_pinned(irg) != op_pin_state_floats &&
/*
* Calculate loop info, so we could identify loop-invariant
- * code and threat it like a constant.
- * We only need control flow loops here but can handle generic
- * INTRA info as well.
+ * code and treat it like a constant.
*/
- state = get_irg_loopinfo_state(irg);
- if ((state & loopinfo_inter) ||
- (state & (loopinfo_constructed | loopinfo_valid)) != (loopinfo_constructed | loopinfo_valid))
- construct_cf_backedges(irg);
+ assure_loopinfo(irg);
env.changes = 0;
env.irg = irg;
}
set_reassoc_running(0);
- /* Handle graph state */
- if (env.changes) {
- set_irg_loopinfo_inconsistent(irg);
- }
-
#ifdef NEW_REASSOC
obstack_free(&commutative_args, NULL);
#endif
CASE(Eor);
CASE(Shl);
default:
- /* leave NULL */;
+ break;
}
return ops;