cvsuser 03/03/06 00:58:51
Modified: languages/imcc TestCompiler.pm cfg.h imc.h optimizer.c
Log:
#21476 + more fixes WRT optimizer
Revision Changes Path
1.6 +5 -4 parrot/languages/imcc/TestCompiler.pm
Index: TestCompiler.pm
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/TestCompiler.pm,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -w -r1.5 -r1.6
--- TestCompiler.pm 20 Feb 2003 08:04:13 -0000 1.5
+++ TestCompiler.pm 6 Mar 2003 08:58:50 -0000 1.6
@@ -77,19 +77,20 @@
my $out_f = per_test('.out',$count);
my $TEST_PROG_ARGS = $ENV{TEST_PROG_ARGS} || '';
+ my $IMCC = $ENV{IMCC} || './imcc';
if ($gen_pasm) {
$TEST_PROG_ARGS =~ s/-O.//;
- system("./imcc ${TEST_PROG_ARGS} $opt -o $out_f $by_f");
+ system("$IMCC ${TEST_PROG_ARGS} $opt -o $out_f $by_f");
}
elsif ($TEST_PROG_ARGS =~ /-c/) {
my $pbc_f = per_test('.pbc',$count);
$TEST_PROG_ARGS =~ s/-c//;
- system("./imcc ${TEST_PROG_ARGS} -o $pbc_f $by_f");
- system("./imcc -r ${TEST_PROG_ARGS} $pbc_f >$out_f");
+ system("$IMCC ${TEST_PROG_ARGS} -o $pbc_f $by_f");
+ system("$IMCC -r ${TEST_PROG_ARGS} $pbc_f >$out_f");
}
else {
- system("./imcc -r ${TEST_PROG_ARGS} $by_f >$out_f");
+ system("$IMCC -r ${TEST_PROG_ARGS} $by_f >$out_f");
}
my $meth = $Test_Map{$func};
1.9 +1 -1 parrot/languages/imcc/cfg.h
Index: cfg.h
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/cfg.h,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -w -r1.8 -r1.9
--- cfg.h 5 Mar 2003 16:08:50 -0000 1.8
+++ cfg.h 6 Mar 2003 08:58:50 -0000 1.9
@@ -22,7 +22,7 @@
int flag;
} Basic_block;
-enum {
+EXTERN enum {
BB_IS_SUB = 1 << 0
} block_enum_flags;
1.32 +1 -1 parrot/languages/imcc/imc.h
Index: imc.h
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/imc.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -w -r1.31 -r1.32
--- imc.h 5 Mar 2003 16:08:50 -0000 1.31
+++ imc.h 6 Mar 2003 08:58:50 -0000 1.32
@@ -85,7 +85,7 @@
EXTERN int allocated;
-enum {
+EXTERN enum {
OPT_NONE,
OPT_PRE,
OPT_CFG = 0x002,
1.24 +17 -5 parrot/languages/imcc/optimizer.c
Index: optimizer.c
===================================================================
RCS file: /cvs/public/parrot/languages/imcc/optimizer.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -w -r1.23 -r1.24
--- optimizer.c 3 Mar 2003 09:11:02 -0000 1.23
+++ optimizer.c 6 Mar 2003 08:58:50 -0000 1.24
@@ -209,6 +209,7 @@
tmp = INS(interp, ins->op, "", ins->r, 2, 0, 0);
debug(DEBUG_OPT1, "%s\n", ins_string(tmp));
subst_ins(ins, tmp, 1);
+ ins = tmp;
found = 1;
break;
}
@@ -236,6 +237,7 @@
tmp = INS(interp, "set", "", ins->r, 2, 0, 0);
debug(DEBUG_OPT1, "%s\n", ins_string(tmp));
subst_ins(ins, tmp, 1);
+ ins = tmp;
continue;
}
/*
@@ -254,7 +256,8 @@
debug(DEBUG_OPT1, "opt1 %s => ", ins_string(ins));
if (ins->opsize == 3) {
/* mul Ix, 1 */
- delete_ins(ins, 1);
+ ins = delete_ins(ins, 1);
+ ins = ins->prev ? ins->prev : instructions;
debug(DEBUG_OPT1, "deleted\n");
continue;
}
@@ -268,6 +271,7 @@
tmp = INS(interp, "set", "", ins->r, 2, 0, 0);
debug(DEBUG_OPT1, "%s\n", ins_string(tmp));
subst_ins(ins, tmp, 1);
+ ins = tmp;
continue;
}
/*
@@ -319,6 +323,7 @@
tmp = INS(interp, ins->op, "", ins->r, 3, 0, 0);
debug(DEBUG_OPT1, "%s\n", ins_string(tmp));
subst_ins(ins, tmp, 1);
+ ins = tmp;
}
}
}
@@ -357,6 +362,7 @@
tmp = INS(interp, ins->op, "", ins->r, 2, 0, 0);
debug(DEBUG_OPT1, "%s\n", ins_string(tmp));
subst_ins(ins, tmp, 1);
+ ins = tmp;
}
}
}
@@ -505,6 +511,7 @@
tmp = INS(interp, "set", "", ins->r, 2, 0, 0);
debug(DEBUG_OPT1, "%s\n", ins_string(tmp));
subst_ins(ins, tmp, 1);
+ ins = tmp;
}
mem_sys_memcopy(&interp->ctx, ctx, sizeof(struct Parrot_Context));
mem_sys_free(ctx);
@@ -545,10 +552,12 @@
1, 0, 0);
debug(DEBUG_OPT1, "%s\n", ins_string(tmp));
subst_ins(ins, tmp, 1);
+ ins = tmp;
}
else {
debug(DEBUG_OPT1, "deleted\n");
- delete_ins(ins, 1);
+ ins = delete_ins(ins, 1);
+ ins = ins->prev ? ins->prev : instructions;
}
break;
case 'N':
@@ -683,10 +692,12 @@
1, 0, 0);
debug(DEBUG_OPT1, "%s\n", ins_string(tmp));
subst_ins(ins, tmp, 1);
+ ins = tmp;
}
else {
debug(DEBUG_OPT1, "deleted\n");
- delete_ins(ins, 1);
+ ins = delete_ins(ins, 1);
+ ins = ins->prev ? ins->prev : instructions;
}
break;
case 'N':
@@ -801,7 +812,7 @@
ostat.deleted_labels++;
debug(DEBUG_OPT1, "block %d label %s deleted\n", i, lab->name);
ostat.deleted_ins++;
- delete_ins(ins, 1);
+ ins = delete_ins(ins, 1);
changed = 1;
}
@@ -882,7 +893,8 @@
continue;
if (r->use_count == 1 && r->lhs_use_count == 1) {
debug(DEBUG_OPT2, "used once �%s� deleted\n", ins_string(ins));
- delete_ins(ins, 1);
+ ins = delete_ins(ins, 1);
+ ins = ins->prev ? ins->prev : instructions;
ostat.deleted_ins++;
ostat.used_once++;
opt++;