* @file
* @brief restarting SSA construction for values.
* @author Michael Beck
- * @version $Id$
*/
#include "config.h"
*/
static void prepare_blocks(ir_node *block, void *env)
{
- unsigned n_loc = current_ir_graph->n_loc;
- struct obstack *obst = current_ir_graph->obst;
- (void)env;
+ ir_graph *const irg = get_Block_irg(block);
+ unsigned const n_loc = irg->n_loc;
+ (void)env;
/* reset mature flag */
set_Block_matured(block, 0);
- block->attr.block.graph_arr = NEW_ARR_D(ir_node *, obst, n_loc);
- memset(block->attr.block.graph_arr, 0, sizeof(ir_node*) * n_loc);
+ block->attr.block.graph_arr = NEW_ARR_DZ(ir_node*, get_irg_obstack(irg), n_loc);
set_Block_phis(block, NULL);
}
-/*
- * Restarts SSA construction on the given graph with n_loc
- * new values.
- *
- * @param irg the graph on which the SSA construction is restarted
- * @param n_loc number of new variables
- *
- * After this function is complete, the graph is in phase_building
- * again and set_value()/get_value() and mature_block() can be used
- * to construct new values.
- */
void ssa_cons_start(ir_graph *irg, int n_loc)
{
- /* for now we support only phase_high graphs */
- assert(irg->phase_state == phase_high);
-
- /* reset the phase to phase building: some optimization might depend on it */
- set_irg_phase_state(irg, phase_building);
+ add_irg_constraints(irg, IR_GRAPH_CONSTRAINT_CONSTRUCTION);
irg_set_nloc(irg, n_loc);
{
(void)env;
- if (!get_Block_matured(block))
- mature_immBlock(block);
+ mature_immBlock(block);
}
-/*
- * Finalize the (restarted) SSA construction. Matures all blocks that are
- * not matured yet and reset the graph state to phase_high.
- */
void ssa_cons_finish(ir_graph *irg)
{
ssa_cons_walker(irg, NULL, finish_block, NULL);