cvsuser 03/02/23 05:17:34
Modified: languages/imcc cfg.c imc.c optimizer.c
Log:
imcc-opt1: bugfix - runs now all perl6 tests -O1
in t/rx/basic_2.imc 180 of 1457 lines are deleted
Revision Changes Path
1.19 +0 -3 parrot/languages/imcc/cfg.c
Index: cfg.c
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/cfg.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -w -r1.18 -r1.19
--- cfg.c 23 Feb 2003 11:08:39 -0000 1.18
+++ cfg.c 23 Feb 2003 13:17:34 -0000 1.19
@@ -163,9 +163,6 @@
last = bb;
}
-
- if (IMCC_DEBUG & DEBUG_CFG)
- dump_cfg();
}
1.39 +10 -3 parrot/languages/imcc/imc.c
Index: imc.c
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/imc.c,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -w -r1.38 -r1.39
--- imc.c 23 Feb 2003 11:08:39 -0000 1.38
+++ imc.c 23 Feb 2003 13:17:34 -0000 1.39
@@ -53,13 +53,20 @@
nodeStack = imcstack_new();
dont_optimize = n_spilled = 0;
- todo = 1;
+ todo = first = 1;
while (todo) {
find_basic_blocks();
build_cfg();
+
+ if (first && (IMCC_DEBUG & DEBUG_CFG))
+ dump_cfg();
+ first = 0;
todo = cfg_optimize(interpreter);
}
- first = todo = 1;
+
+ if (IMCC_DEBUG & DEBUG_CFG)
+ dump_cfg();
+ todo = first = 1;
while (todo) {
if (!first) {
find_basic_blocks();
@@ -151,7 +158,7 @@
static void imc_stat_init() {
imcsets[0] = imcsets[1] = imcsets[2] = imcsets[3] = 0;
make_stat(imcsets, 0);
- ostat.invariants_moved = 0;
+ memset(&ostat, 0, sizeof(ostat));
}
/* and final */
1.21 +8 -14 parrot/languages/imcc/optimizer.c
Index: optimizer.c
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/optimizer.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -w -r1.20 -r1.21
--- optimizer.c 23 Feb 2003 11:08:39 -0000 1.20
+++ optimizer.c 23 Feb 2003 13:17:34 -0000 1.21
@@ -138,9 +138,6 @@
Instruction *ins, *last;
int reg;
- /* reset statistic globals */
- ostat.if_branch = 0;
-
last = instructions;
if (!last->next)
return;
@@ -722,10 +719,10 @@
{
Instruction *ins, *next;
SymReg * r;
+ int changed = 0;
info(2, "\tbranch_branch\n");
/* reset statistic globals */
- ostat.branch_branch = 0;
for (ins = instructions; ins; ins = ins->next) {
if ((ins->type & IF_goto) && !strcmp(ins->op, "branch")) {
r = get_sym(ins->r[0]->name);
@@ -740,12 +737,12 @@
r->first_ins->r[0]->name, ins_string(next));
ostat.branch_branch++;
ins->r[0] = next->r[0];
- return 1;
+ changed = 1;
}
}
}
}
- return 0;
+ return changed;
}
static int unused_label()
@@ -753,6 +750,7 @@
Instruction *ins;
int used;
int i;
+ int changed = 0;
info(2, "\tunused_label\n");
for (i=1; i < n_basic_blocks; i++) {
@@ -801,12 +799,12 @@
debug(DEBUG_OPT1, "block %d label %s deleted\n", i, lab->name);
ostat.deleted_ins++;
delete_ins(ins, 1);
- return 1;
+ changed = 1;
}
}
}
- return 0;
+ return changed;
}
static int dead_code_remove(void)
@@ -828,19 +826,15 @@
if (!bb->pred_list) {
int bbi = bb->index;
debug(DEBUG_OPT1, "found dead block %d\n", bb->index);
- for (ins = bb->start; ins && ins->index == bbi; ) {
- debug(DEBUG_OPT1, "unreachable ins deleted (dead block) %s\n",
+ for (ins = bb->start; ins && ins->bbindex == bbi; ) {
+ debug(DEBUG_OPT1, "\tins deleted (dead block) %s\n",
ins_string(ins));
ins = delete_ins(ins, 1);
ostat.deleted_ins++;
changed++;
- if (!ins || ins == bb->end->next)
- break;
}
}
}
- if (changed)
- return changed;
for (last = instructions, ins=last->next; last && ins; ins = ins->next) {
if ((last->type & IF_goto) && !(ins->type & ITLABEL)) {
debug(DEBUG_OPT1, "unreachable ins deleted (after branch) %s\n",