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",
  
  
  

Reply via email to