projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
instrument: Remove stale start loop test.
[libfirm]
/
ir
/
ir
/
irgopt.c
diff --git
a/ir/ir/irgopt.c
b/ir/ir/irgopt.c
index
11e45ba
..
87b0cb2
100644
(file)
--- a/
ir/ir/irgopt.c
+++ b/
ir/ir/irgopt.c
@@
-22,7
+22,6
@@
* @brief Optimizations for a whole ir graph, i.e., a procedure.
* @author Christian Schaefer, Goetz Lindenmaier, Sebastian Felis,
* Michael Beck
* @brief Optimizations for a whole ir graph, i.e., a procedure.
* @author Christian Schaefer, Goetz Lindenmaier, Sebastian Felis,
* Michael Beck
- * @version $Id$
*/
#include "config.h"
*/
#include "config.h"
@@
-36,6
+35,7
@@
#include "irgopt.h"
#include "irgmod.h"
#include "irgwalk.h"
#include "irgopt.h"
#include "irgmod.h"
#include "irgwalk.h"
+#include "ircons.h"
#include "adt/pdeq.h"
#include "adt/pdeq.h"
@@
-44,10
+44,6
@@
#include "iredges_t.h"
#include "irtools.h"
#include "iredges_t.h"
#include "irtools.h"
-/*------------------------------------------------------------------*/
-/* apply optimizations of iropt to all nodes. */
-/*------------------------------------------------------------------*/
-
/**
* A wrapper around optimize_inplace_2() to be called from a walker.
*/
/**
* A wrapper around optimize_inplace_2() to be called from a walker.
*/
@@
-73,12
+69,9
@@
static inline void do_local_optimize(ir_node *n)
{
ir_graph *irg = get_irn_irg(n);
{
ir_graph *irg = get_irn_irg(n);
- /* Handle graph state */
- assert(get_irg_phase_state(irg) != phase_building);
-
if (get_opt_global_cse())
set_irg_pinned(irg, op_pin_state_floats);
if (get_opt_global_cse())
set_irg_pinned(irg, op_pin_state_floats);
- clear_irg_
state(irg, IR_GRAPH_STATE
_CONSISTENT_DOMINANCE);
+ clear_irg_
properties(irg, IR_GRAPH_PROPERTY
_CONSISTENT_DOMINANCE);
/* Clean the value_table in irg for the CSE. */
new_identities(irg);
/* Clean the value_table in irg for the CSE. */
new_identities(irg);
@@
-87,7
+80,6
@@
static inline void do_local_optimize(ir_node *n)
irg_walk(n, firm_clear_link, optimize_in_place_wrapper, NULL);
}
irg_walk(n, firm_clear_link, optimize_in_place_wrapper, NULL);
}
-/* Applies local optimizations (see iropt.h) to all nodes reachable from node n */
void local_optimize_node(ir_node *n)
{
ir_graph *rem = current_ir_graph;
void local_optimize_node(ir_node *n)
{
ir_graph *rem = current_ir_graph;
@@
-112,11
+104,8
@@
static void enqueue_node(ir_node *node, pdeq *waitq)
*/
static void enqueue_users(ir_node *n, pdeq *waitq)
{
*/
static void enqueue_users(ir_node *n, pdeq *waitq)
{
- const ir_edge_t *edge;
-
foreach_out_edge(n, edge) {
foreach_out_edge(n, edge) {
- ir_node *succ = get_edge_src_irn(edge);
- const ir_edge_t *edge2;
+ ir_node *succ = get_edge_src_irn(edge);
enqueue_node(succ, waitq);
enqueue_node(succ, waitq);
@@
-148,9
+137,7
@@
static void find_unreachable_blocks(ir_node *block, void *env)
ir_graph *irg = get_irn_irg(block);
ir_node *end = get_irg_end(irg);
ir_graph *irg = get_irn_irg(block);
ir_node *end = get_irg_end(irg);
- const ir_edge_t *edge;
foreach_block_succ(block, edge) {
foreach_block_succ(block, edge) {
- const ir_edge_t *edge2;
ir_node *succ_block = get_edge_src_irn(edge);
enqueue_node(succ_block, waitq);
foreach_out_edge(succ_block, edge2) {
ir_node *succ_block = get_edge_src_irn(edge);
enqueue_node(succ_block, waitq);
foreach_out_edge(succ_block, edge2) {
@@
-163,7
+150,6
@@
static void find_unreachable_blocks(ir_node *block, void *env)
}
}
}
}
-/* Applies local optimizations (see iropt.h) to all nodes reachable from node n. */
void local_optimize_graph(ir_graph *irg)
{
ir_graph *rem = current_ir_graph;
void local_optimize_graph(ir_graph *irg)
{
ir_graph *rem = current_ir_graph;
@@
-205,11
+191,11
@@
int optimize_graph_df(ir_graph *irg)
set_irg_pinned(irg, op_pin_state_floats);
/* enable unreachable code elimination */
set_irg_pinned(irg, op_pin_state_floats);
/* enable unreachable code elimination */
- assert(!i
s_irg_state(irg, IR_GRAPH_STATE
_OPTIMIZE_UNREACHABLE_CODE));
-
set_irg_state(irg, IR_GRAPH_STATE
_OPTIMIZE_UNREACHABLE_CODE);
+ assert(!i
rg_is_constrained(irg, IR_GRAPH_CONSTRAINT
_OPTIMIZE_UNREACHABLE_CODE));
+
add_irg_constraints(irg, IR_GRAPH_CONSTRAINT
_OPTIMIZE_UNREACHABLE_CODE);
new_identities(irg);
new_identities(irg);
-
edges_assure
(irg);
+
assure_edges
(irg);
assure_doms(irg);
assure_doms(irg);
@@
-233,13
+219,12
@@
int optimize_graph_df(ir_graph *irg)
ir_free_resources(irg, IR_RESOURCE_IRN_LINK);
/* disable unreachable code elimination */
ir_free_resources(irg, IR_RESOURCE_IRN_LINK);
/* disable unreachable code elimination */
- clear_irg_
state(irg, IR_GRAPH_STATE
_OPTIMIZE_UNREACHABLE_CODE);
-
set_irg_state(irg, IR_GRAPH_STATE
_NO_UNREACHABLE_CODE);
+ clear_irg_
constraints(irg, IR_GRAPH_CONSTRAINT
_OPTIMIZE_UNREACHABLE_CODE);
+
add_irg_properties(irg, IR_GRAPH_PROPERTY
_NO_UNREACHABLE_CODE);
/* invalidate infos */
/* invalidate infos */
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_DOMINANCE);
- clear_irg_state(irg, IR_GRAPH_STATE_CONSISTENT_LOOPINFO);
- clear_irg_state(irg, IR_GRAPH_STATE_VALID_EXTENDED_BLOCKS);
+ clear_irg_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_DOMINANCE);
+ clear_irg_properties(irg, IR_GRAPH_PROPERTY_CONSISTENT_LOOPINFO);
edges_deactivate(irg);
/* Finally kill BAD and doublets from the keep alives.
edges_deactivate(irg);
/* Finally kill BAD and doublets from the keep alives.
@@
-255,6
+240,15
@@
int optimize_graph_df(ir_graph *irg)
return true;
}
return true;
}
+void local_opts_const_code(void)
+{
+ ir_graph *irg = get_const_code_irg();
+ /* Clean the value_table in irg for the CSE. */
+ new_identities(irg);
+
+ walk_const_code(firm_clear_link, optimize_in_place_wrapper, NULL);
+}
+
ir_graph_pass_t *optimize_graph_df_pass(const char *name)
{
return def_graph_pass_ret(name ? name : "optimize_graph_df", optimize_graph_df);
ir_graph_pass_t *optimize_graph_df_pass(const char *name)
{
return def_graph_pass_ret(name ? name : "optimize_graph_df", optimize_graph_df);