Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
8f530048
Commit
8f530048
authored
Aug 16, 2009
by
Michael Beck
Browse files
- add more passes
[r26351]
parent
f8b8a445
Changes
7
Hide whitespace changes
Inline
Side-by-side
include/libfirm/iroptimize.h
View file @
8f530048
...
...
@@ -287,6 +287,17 @@ ir_graph_pass_t *opt_if_conv_pass(
void
opt_sync
(
ir_graph
*
irg
);
/**
* Creates an ir_graph pass for opt_sync().
*
* @param name the name of this pass or NULL
* @param verify should this pass be verified?
* @param dump should this pass result be dumped?
*
* @return the newly created ir_graph pass
*/
ir_graph_pass_t
*
opt_sync_pass
(
const
char
*
name
,
int
verify
,
int
dump
);
/*
* Check if we can replace the load by a given const from
* the const code irg.
...
...
@@ -329,6 +340,17 @@ ir_node *can_replace_load_by_const(const ir_node *load, ir_node *c);
*/
int
optimize_load_store
(
ir_graph
*
irg
);
/**
* Creates an ir_graph pass for optimize_load_store().
*
* @param name the name of this pass or NULL
* @param verify should this pass be verified?
* @param dump should this pass result be dumped?
*
* @return the newly created ir_graph pass
*/
ir_graph_pass_t
*
optimize_load_store_pass
(
const
char
*
name
,
int
verify
,
int
dump
);
/**
* New experimental alternative to optimize_load_store.
* Based on a dataflow analysis, so load/stores are moved out of loops
...
...
@@ -336,11 +358,33 @@ int optimize_load_store(ir_graph *irg);
*/
int
opt_ldst
(
ir_graph
*
irg
);
/**
* Creates an ir_graph pass for opt_ldst().
*
* @param name the name of this pass or NULL
* @param verify should this pass be verified?
* @param dump should this pass result be dumped?
*
* @return the newly created ir_graph pass
*/
ir_graph_pass_t
*
opt_ldst_pass
(
const
char
*
name
,
int
verify
,
int
dump
);
/**
* Do Loop unrolling in the given graph.
*/
void
optimize_loop_unrolling
(
ir_graph
*
irg
);
/**
* Creates an ir_graph pass for optimize_loop_unrolling().
*
* @param name the name of this pass or NULL
* @param verify should this pass be verified?
* @param dump should this pass result be dumped?
*
* @return the newly created ir_graph pass
*/
ir_graph_pass_t
*
optimize_loop_unrolling_pass
(
const
char
*
name
,
int
verify
,
int
dump
);
/**
* Optimize the frame type of an irg by removing
* never touched entities.
...
...
@@ -353,6 +397,17 @@ void optimize_loop_unrolling(ir_graph *irg);
*/
void
opt_frame_irg
(
ir_graph
*
irg
);
/**
* Creates an ir_graph pass for opt_frame_irg().
*
* @param name the name of this pass or NULL
* @param verify should this pass be verified?
* @param dump should this pass result be dumped?
*
* @return the newly created ir_graph pass
*/
ir_graph_pass_t
*
opt_frame_irg_pass
(
const
char
*
name
,
int
verify
,
int
dump
);
/** Possible flags for the Operator Scalar Replacement. */
typedef
enum
osr_flags
{
osr_flag_none
=
0
,
/**< no additional flags */
...
...
@@ -428,6 +483,18 @@ typedef enum osr_flags {
*/
void
opt_osr
(
ir_graph
*
irg
,
unsigned
flags
);
/**
* Creates an ir_graph pass for remove_phi_cycles().
*
* @param name the name of this pass or NULL
* @param verify should this pass be verified?
* @param dump should this pass result be dumped?
* @param flags set of osr_flags
*
* @return the newly created ir_graph pass
*/
ir_graph_pass_t
*
opt_osr_pass
(
const
char
*
name
,
int
verify
,
int
dump
,
unsigned
flags
);
/**
* Removes useless Phi cycles, i.e cycles of Phi nodes with only one
* non-Phi node.
...
...
@@ -440,6 +507,19 @@ void opt_osr(ir_graph *irg, unsigned flags);
*/
void
remove_phi_cycles
(
ir_graph
*
irg
);
/**
* Creates an ir_graph pass for remove_phi_cycles().
*
* @param name the name of this pass or NULL
* @param verify should this pass be verified?
* @param dump should this pass result be dumped?
* @param params The parameters for the if conversion.
*
* @return the newly created ir_graph pass
*/
ir_graph_pass_t
*
remove_phi_cycles_pass
(
const
char
*
name
,
int
verify
,
int
dump
);
/** A default threshold. */
#define DEFAULT_CLONE_THRESHOLD 300
...
...
ir/opt/ifconv.c
View file @
8f530048
...
...
@@ -522,7 +522,7 @@ ir_graph_pass_t *opt_if_conv_pass(
pass
->
pass
.
kind
=
k_ir_prog_pass
;
pass
->
pass
.
run_on_irg
=
pass_wrapper
;
pass
->
pass
.
context
=
pass
;
pass
->
pass
.
name
=
name
;
pass
->
pass
.
name
=
name
?
name
:
"if_conv"
;
pass
->
pass
.
verify
=
verify
!=
0
;
pass
->
pass
.
dump
=
dump
!=
0
;
...
...
ir/opt/ldst2.c
View file @
8f530048
...
...
@@ -41,6 +41,7 @@
#include "irdump.h"
#include "irflag_t.h"
#include "irprintf.h"
#include "irtools.h"
#if +0
#define OPTIMISE_LOAD_AFTER_LOAD
...
...
@@ -845,3 +846,8 @@ void opt_sync(ir_graph *irg)
//optimize_graph_df(irg);
//irg_walk_graph(irg, NormaliseSync, NULL, NULL);
}
ir_graph_pass_t
*
opt_sync_pass
(
const
char
*
name
,
int
verify
,
int
dump
)
{
return
def_graph_pass
(
name
?
name
:
"opt_sync"
,
verify
,
dump
,
opt_sync
);
}
ir/opt/ldstopt.c
View file @
8f530048
...
...
@@ -2300,3 +2300,8 @@ int optimize_load_store(ir_graph *irg) {
}
return
env
.
changes
!=
0
;
}
/* optimize_load_store */
ir_graph_pass_t
*
optimize_load_store_pass
(
const
char
*
name
,
int
verify
,
int
dump
)
{
return
def_graph_pass
(
name
?
name
:
"ldst"
,
verify
,
dump
,
optimize_load_store
);
}
/* optimize_load_store_pass */
ir/opt/opt_frame.c
View file @
8f530048
...
...
@@ -33,6 +33,7 @@
#include "type_t.h"
#include "irouts.h"
#include "iredges.h"
#include "irtools.h"
/*
* Optimize the frame type of an irg by removing
...
...
@@ -107,3 +108,8 @@ void opt_frame_irg(ir_graph *irg) {
}
irp_free_resources
(
irp
,
IR_RESOURCE_ENTITY_LINK
);
}
ir_graph_pass_t
*
opt_frame_irg_pass
(
const
char
*
name
,
int
verify
,
int
dump
)
{
return
def_graph_pass
(
name
?
name
:
"opt_frame_irg"
,
verify
,
dump
,
opt_frame_irg
);
}
ir/opt/opt_ldst.c
View file @
8f530048
...
...
@@ -42,6 +42,7 @@
#include "raw_bitset.h"
#include "debug.h"
#include "error.h"
#include "irtools.h"
/* maximum number of output Proj's */
#define MAX_PROJ (pn_Load_max > pn_Store_max ? pn_Load_max : pn_Store_max)
...
...
@@ -2405,3 +2406,8 @@ end:
current_ir_graph
=
rem
;
return
env
.
changed
!=
0
;
}
/* opt_ldst */
ir_graph_pass_t
*
opt_ldst_pass
(
const
char
*
name
,
int
verify
,
int
dump
)
{
return
def_graph_pass
(
name
?
name
:
"ldst_df"
,
verify
,
dump
,
opt_ldst
);
}
/* opt_ldst_pass */
ir/opt/opt_osr.c
View file @
8f530048
...
...
@@ -51,6 +51,7 @@
#include "array.h"
#include "firmstat.h"
#include "error.h"
#include "irpass_t.h"
/** The debug handle. */
DEBUG_ONLY
(
static
firm_dbg_module_t
*
dbg
;)
...
...
@@ -1320,6 +1321,11 @@ void remove_phi_cycles(ir_graph *irg) {
current_ir_graph
=
rem
;
}
/* remove_phi_cycles */
ir_graph_pass_t
*
remove_phi_cycles_pass
(
const
char
*
name
,
int
verify
,
int
dump
)
{
return
def_graph_pass
(
name
?
name
:
"remove_phi_cycles"
,
verify
,
dump
,
remove_phi_cycles
);
}
/* remove_phi_cycles_pass */
/**
* Post-walker: fix Add and Sub nodes that where results of I<->P conversions.
*/
...
...
@@ -1452,3 +1458,35 @@ void opt_osr(ir_graph *irg, unsigned flags) {
current_ir_graph
=
rem
;
}
/* opt_osr */
struct
pass_t
{
ir_graph_pass_t
pass
;
unsigned
flags
;
};
/**
* Wrapper for running opt_osr() as an ir_graph pass.
*/
static
int
pass_wrapper
(
ir_graph
*
irg
,
void
*
context
)
{
struct
pass_t
*
pass
=
context
;
opt_osr
(
irg
,
pass
->
flags
);
return
0
;
}
/* pass_wrapper */
ir_graph_pass_t
*
opt_osr_pass
(
const
char
*
name
,
int
verify
,
int
dump
,
unsigned
flags
)
{
struct
pass_t
*
pass
=
xmalloc
(
sizeof
(
*
pass
));
pass
->
pass
.
kind
=
k_ir_prog_pass
;
pass
->
pass
.
run_on_irg
=
pass_wrapper
;
pass
->
pass
.
context
=
pass
;
pass
->
pass
.
name
=
name
?
name
:
"osr"
;
pass
->
pass
.
verify
=
verify
!=
0
;
pass
->
pass
.
dump
=
dump
!=
0
;
pass
->
flags
=
flags
;
INIT_LIST_HEAD
(
&
pass
->
pass
.
list
);
return
&
pass
->
pass
;
}
/* opt_osr_pass */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment