projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
use more IR_RESOURCE_TYPE_VISITED, remove pointless inc_master_type_visited calls
[libfirm]
/
ir
/
be
/
bessaconstr.c
diff --git
a/ir/be/bessaconstr.c
b/ir/be/bessaconstr.c
index
98554ac
..
9b60c37
100644
(file)
--- a/
ir/be/bessaconstr.c
+++ b/
ir/be/bessaconstr.c
@@
-46,19
+46,18
@@
* This function reroutes all uses of the original value to the copies in the
* corresponding dominance subtrees and creates Phi functions where necessary.
*/
* This function reroutes all uses of the original value to the copies in the
* corresponding dominance subtrees and creates Phi functions where necessary.
*/
-#ifdef HAVE_CONFIG_H
#include "config.h"
#include "config.h"
-#endif
/* statev in this file is extensive, so only enable if needed */
#define DISABLE_STATEV
#include "bessaconstr.h"
#include "bemodule.h"
/* statev in this file is extensive, so only enable if needed */
#define DISABLE_STATEV
#include "bessaconstr.h"
#include "bemodule.h"
-#include "besched
_t
.h"
+#include "besched.h"
#include "beintlive_t.h"
#include "beintlive_t.h"
-#include "beirg
_t
.h"
+#include "beirg.h"
#include "be_t.h"
#include "be_t.h"
+#include "benode.h"
#include "debug.h"
#include "error.h"
#include "debug.h"
#include "error.h"
@@
-76,8
+75,8
@@
DEBUG_ONLY(static firm_dbg_module_t *dbg = NULL;)
* blocks as visited. Sets the link fields of the blocks in the dominance
* frontier to the block itself.
*/
* blocks as visited. Sets the link fields of the blocks in the dominance
* frontier to the block itself.
*/
-static
-
void mark_iterated_dominance_frontiers(
const be_ssa_construction_env_t *env)
+static
void mark_iterated_dominance_frontiers(
+
const be_ssa_construction_env_t *env)
{
stat_ev_cnt_decl(blocks);
DBG((dbg, LEVEL_3, "Dominance Frontier:"));
{
stat_ev_cnt_decl(blocks);
DBG((dbg, LEVEL_3, "Dominance Frontier:"));
@@
-108,25
+107,23
@@
void mark_iterated_dominance_frontiers(const be_ssa_construction_env_t *env)
DBG((dbg, LEVEL_3, "\n"));
}
DBG((dbg, LEVEL_3, "\n"));
}
-static
-ir_node *search_def_end_of_block(be_ssa_construction_env_t *env,
- ir_node *block);
+static ir_node *search_def_end_of_block(be_ssa_construction_env_t *env,
+ ir_node *block);
-static
-ir_node *create_phi(be_ssa_construction_env_t *env, ir_node *block,
- ir_node *link_with)
+static ir_node *create_phi(be_ssa_construction_env_t *env, ir_node *block,
+ ir_node *link_with)
{
int i, n_preds = get_Block_n_cfgpreds(block);
{
int i, n_preds = get_Block_n_cfgpreds(block);
- ir_graph *irg = get_
irn
_irg(block);
- ir_node *
phi
;
- ir_node
**ins = alloca(n_preds * sizeof(ins[0]))
;
+ ir_graph *irg = get_
Block
_irg(block);
+ ir_node *
*ins = ALLOCAN(ir_node*, n_preds)
;
+ ir_node
*phi
;
assert(n_preds > 1);
for(i = 0; i < n_preds; ++i) {
ins[i] = new_r_Unknown(irg, env->mode);
}
assert(n_preds > 1);
for(i = 0; i < n_preds; ++i) {
ins[i] = new_r_Unknown(irg, env->mode);
}
- phi =
new_r_Phi(irg, block, n_preds, ins, env->mode
);
+ phi =
be_new_Phi(block, n_preds, ins, env->mode, env->phi_cls
);
if(env->new_phis != NULL) {
ARR_APP1(ir_node*, env->new_phis, phi);
}
if(env->new_phis != NULL) {
ARR_APP1(ir_node*, env->new_phis, phi);
}
@@
-149,16
+146,15
@@
ir_node *create_phi(be_ssa_construction_env_t *env, ir_node *block,
return phi;
}
return phi;
}
-static
-ir_node *get_def_at_idom(be_ssa_construction_env_t *env, ir_node *block)
+static ir_node *get_def_at_idom(be_ssa_construction_env_t *env, ir_node *block)
{
ir_node *dom = get_Block_idom(block);
assert(dom != NULL);
return search_def_end_of_block(env, dom);
}
{
ir_node *dom = get_Block_idom(block);
assert(dom != NULL);
return search_def_end_of_block(env, dom);
}
-static
-
ir_node *search_def_end_of_block(be_ssa_construction_env_t *env,
ir_node *block)
+static
ir_node *search_def_end_of_block(be_ssa_construction_env_t *env,
+
ir_node *block)
{
if(irn_visited(block)) {
assert(get_irn_link(block) != NULL);
{
if(irn_visited(block)) {
assert(get_irn_link(block) != NULL);
@@
-173,8
+169,7
@@
ir_node *search_def_end_of_block(be_ssa_construction_env_t *env, ir_node *block)
}
}
}
}
-static
-ir_node *search_def(be_ssa_construction_env_t *env, ir_node *at)
+static ir_node *search_def(be_ssa_construction_env_t *env, ir_node *at)
{
ir_node *block = get_nodes_block(at);
ir_node *node;
{
ir_node *block = get_nodes_block(at);
ir_node *node;
@@
-219,8
+214,7
@@
ir_node *search_def(be_ssa_construction_env_t *env, ir_node *at)
* sorted by dominance. A non-visited block means no definition has been
* inserted yet.
*/
* sorted by dominance. A non-visited block means no definition has been
* inserted yet.
*/
-static
-void introduce_def_at_block(ir_node *block, ir_node *def)
+static void introduce_def_at_block(ir_node *block, ir_node *def)
{
if (irn_visited_else_mark(block)) {
ir_node *node = block;
{
if (irn_visited_else_mark(block)) {
ir_node *node = block;
@@
-299,7
+293,8
@@
void be_ssa_construction_add_copy(be_ssa_construction_env_t *env,
assert(env->iterated_domfront_calculated == 0);
if(env->mode == NULL) {
assert(env->iterated_domfront_calculated == 0);
if(env->mode == NULL) {
- env->mode = get_irn_mode(copy);
+ env->mode = get_irn_mode(copy);
+ env->phi_cls = arch_get_irn_reg_class_out(copy);
} else {
assert(env->mode == get_irn_mode(copy));
}
} else {
assert(env->mode == get_irn_mode(copy));
}
@@
-320,11
+315,12
@@
void be_ssa_construction_add_copies(be_ssa_construction_env_t *env,
assert(env->iterated_domfront_calculated == 0);
if(env->mode == NULL) {
assert(env->iterated_domfront_calculated == 0);
if(env->mode == NULL) {
- env->mode = get_irn_mode(copies[0]);
+ env->mode = get_irn_mode(copies[0]);
+ env->phi_cls = arch_get_irn_reg_class_out(copies[0]);
}
for(i = 0; i < copies_len; ++i) {
}
for(i = 0; i < copies_len; ++i) {
- ir_node *copy = copies[i];
+ ir_node *copy
= copies[i];
ir_node *block = get_nodes_block(copy);
assert(env->mode == get_irn_mode(copy));
ir_node *block = get_nodes_block(copy);
assert(env->mode == get_irn_mode(copy));
@@
-353,7
+349,7
@@
void be_ssa_construction_fix_users_array(be_ssa_construction_env_t *env,
size_t i;
stat_ev_cnt_decl(uses);
size_t i;
stat_ev_cnt_decl(uses);
-
BE_TIMER_PUSH(t_ssa_constr
);
+
be_timer_push(T_SSA_CONSTR
);
if(!env->iterated_domfront_calculated) {
mark_iterated_dominance_frontiers(env);
if(!env->iterated_domfront_calculated) {
mark_iterated_dominance_frontiers(env);
@@
-376,11
+372,11
@@
void be_ssa_construction_fix_users_array(be_ssa_construction_env_t *env,
if(env->ignore_uses != NULL &&
ir_nodeset_contains(env->ignore_uses, use))
continue;
if(env->ignore_uses != NULL &&
ir_nodeset_contains(env->ignore_uses, use))
continue;
- if(is_Anchor(use))
+ if(is_Anchor(use)
|| is_End(use)
)
continue;
if(is_Phi(use)) {
continue;
if(is_Phi(use)) {
- ir_node *block = get_nodes_block(use);
+ ir_node *block
= get_nodes_block(use);
ir_node *predblock = get_Block_cfgpred_block(block, pos);
at = sched_last(predblock);
}
ir_node *predblock = get_Block_cfgpred_block(block, pos);
at = sched_last(predblock);
}
@@
-396,7
+392,7
@@
void be_ssa_construction_fix_users_array(be_ssa_construction_env_t *env,
stat_ev_cnt_inc(uses);
}
}
stat_ev_cnt_inc(uses);
}
}
-
BE_TIMER_POP(t_ssa_constr
);
+
be_timer_pop(T_SSA_CONSTR
);
stat_ev_tim_pop("bessaconstr_fix_time");
stat_ev_cnt_done(uses, "bessaconstr_uses");
stat_ev_tim_pop("bessaconstr_fix_time");
stat_ev_cnt_done(uses, "bessaconstr_uses");
@@
-413,7
+409,7
@@
void be_ssa_construction_update_liveness_phis(be_ssa_construction_env_t *env,
{
int i, n;
{
int i, n;
-
BE_TIMER_PUSH(t_ssa_constr
);
+
be_timer_push(T_SSA_CONSTR
);
n = ARR_LEN(env->new_phis);
for(i = 0; i < n; ++i) {
n = ARR_LEN(env->new_phis);
for(i = 0; i < n; ++i) {
@@
-421,7
+417,7
@@
void be_ssa_construction_update_liveness_phis(be_ssa_construction_env_t *env,
be_liveness_introduce(lv, phi);
}
be_liveness_introduce(lv, phi);
}
-
BE_TIMER_POP(t_ssa_constr
);
+
be_timer_pop(T_SSA_CONSTR
);
}
void be_init_ssaconstr(void)
}
void be_init_ssaconstr(void)