+/*
+ * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
+ *
+ * This file is part of libFirm.
+ *
+ * This file may be distributed and/or modified under the terms of the
+ * GNU General Public License version 2 as published by the Free Software
+ * Foundation and appearing in the file LICENSE.GPL included in the
+ * packaging of this file.
+ *
+ * Licensees holding valid libFirm Professional Edition licenses may use
+ * this file in accordance with the libFirm Commercial License.
+ * Agreement provided with the Software.
+ *
+ * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+ * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE.
+ */
+
/**
*
* @file strength_red.c
* Created: 22.8.2004
* CVS-ID: $Id$
* Copyright: (c) 2004 Universität Karlsruhe
- * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
*/
-
-# include "strength_red.h"
-
-# include "irouts.h"
-# include "irnode_t.h"
-# include "irgwalk.h"
-# include "irloop_t.h"
-# include "ircons.h"
-# include "irgmod.h"
-# include "irdump_t.h"
-# include "firmstat.h"
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "strength_red_t.h"
+#include "iroptimize.h"
+#include "irouts.h"
+#include "irnode_t.h"
+#include "irgwalk.h"
+#include "irloop_t.h"
+#include "ircons.h"
+#include "irgmod.h"
+#include "irdump_t.h"
+#include "irprintf.h"
+#include "firmstat.h"
/** Counter for verbose information about optimization. */
* @verbatim
*
* init
- * /|\
+ * ^
* |
* +-- Phi
- * | /|\
+ * | ^
* | |
* +-->op
*
n_made_new_phis++;
if (get_opt_strength_red_verbose() && get_firm_verbosity() > 1) {
- printf("The new Phi node is : "); DDMN(ivi->itervar_phi);
- printf("reducing operation is : "); DDMN(reduce_var);
- printf("in graph : "); DDMG(current_ir_graph);
+ ir_printf("The new Phi node is : %+F\n", ivi->itervar_phi);
+ ir_printf("reducing operation is : %+F\n", reduce_var);
+ ir_printf("in graph : %+F\n", current_ir_graph);
}
ivi->new_increment = new_r_Mul (current_ir_graph, block_inc, ivi->increment, mul_const,
get_irn_mode(mul_const));
}
if (get_opt_strength_red_verbose() && get_firm_verbosity() > 1) {
- printf("\nReducing operation is : "); DDMN(reduce_var);
- printf("in graph : "); DDMG(current_ir_graph);
+ ir_printf("\nReducing operation is : %+F\n", reduce_var);
+ ir_printf("in graph : %+F\n", current_ir_graph);
}
return 1;
}
add_const, ivi->new_init);
}
if (get_opt_strength_red_verbose() && get_firm_verbosity() > 1) {
- printf("\nReducing operation is : "); DDMN(reduce_var);
- printf("in graph : "); DDMG(current_ir_graph);
+ ir_printf("\nReducing operation is : %+F\n", reduce_var);
+ ir_printf("in graph : %+F\n", current_ir_graph);
}
return 1;
}
ivi->new_init = my_new_r_Sub (current_ir_graph, block_init,
ivi->new_init, sub_const);
if (get_opt_strength_red_verbose() && get_firm_verbosity() > 1) {
- printf("\nReducing operation is : "); DDMN(reduce_var);
- printf("in graph : "); DDMG(current_ir_graph);
+ ir_printf("\nReducing operation is : %+F", reduce_var);
+ ir_printf("in graph : %+F", current_ir_graph);
}
return 1;
}
induct_var_info ivi;
/* check if a iteration variable be reduced.*/
int reduced = 0;
+ (void) env;
- if (get_irn_op(itervar_phi) != op_Phi)
+ if (! is_Phi(itervar_phi))
return;
- /* A candidate is found.*/
+
+ /* A potential candidate is found.*/
ivi.itervar_phi = itervar_phi;
- /* It musss be a induction variable.*/
+ /* check if it's a induction variable.*/
if (is_induction_variable(&ivi)) {
int i, op_out;
/* Call algorithm that computes the backedges */
construct_cf_backedges(irg);
/* Call algorithm that computes the dominator trees. */
- compute_doms(irg);
+ assure_doms(irg);
/* Call algorithm that computes the out edges */
- compute_irg_outs(irg);
+ assure_irg_outs(irg);
/* -- Search expressions that can be optimized -- */
irg_walk_graph(irg, NULL, reduce_itervar, NULL);