cvsuser     03/06/06 04:14:43

  Modified:    languages/imcc imc.c optimizer.c
               languages/imcc/t/imcpasm opt2.t
  Log:
  repeat optimizer step after constant propagation
  
  Revision  Changes    Path
  1.47      +2 -0      parrot/languages/imcc/imc.c
  
  Index: imc.c
  ===================================================================
  RCS file: /cvs/public/parrot/languages/imcc/imc.c,v
  retrieving revision 1.46
  retrieving revision 1.47
  diff -u -w -r1.46 -r1.47
  --- imc.c     27 Apr 2003 07:42:23 -0000      1.46
  +++ imc.c     6 Jun 2003 11:14:41 -0000       1.47
  @@ -94,6 +94,8 @@
               todo = 0;
           else {
               todo = optimize(interpreter);
  +            if (todo)
  +                pre_optimize(interpreter);
           }
       }
       todo = 1;
  
  
  
  1.29      +8 -4      parrot/languages/imcc/optimizer.c
  
  Index: optimizer.c
  ===================================================================
  RCS file: /cvs/public/parrot/languages/imcc/optimizer.c,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -w -r1.28 -r1.29
  --- optimizer.c       4 Jun 2003 12:34:55 -0000       1.28
  +++ optimizer.c       6 Jun 2003 11:14:41 -0000       1.29
  @@ -57,7 +57,7 @@
   static void subst_constants_c(struct Parrot_Interp *interp);
   static void subst_constants_if(struct Parrot_Interp *interp);
   
  -static void constant_propagation(struct Parrot_Interp *interp);
  +static int constant_propagation(struct Parrot_Interp *interp);
   static int used_once(void);
   static int loop_optimization(struct Parrot_Interp *);
   static int clone_remove(void);
  @@ -95,9 +95,10 @@
   
   int optimize(struct Parrot_Interp *interp) {
   
  +    int any = 0;
       if (optimizer_level & OPT_CFG) {
           info(2, "optimize\n");
  -        constant_propagation(interp);
  +        any = constant_propagation(interp);
           if (clone_remove())
               return 1;
           if (used_once())
  @@ -105,7 +106,7 @@
           if (loop_optimization(interp))
               return 1;
       }
  -    return 0;
  +    return any;
   }
   
   /* get negated opterator for op */
  @@ -299,7 +300,7 @@
    * even though sometimes it may be safe
    */
   
  -static void
  +static int
   constant_propagation(struct Parrot_Interp *interp)
   {
       Instruction *ins, *ins2;
  @@ -307,6 +308,7 @@
       int i;
       char fullname[128];
       SymReg *c, *old, *o;
  +    int any = 0;
   
       info(2, "\tconstant_propagation\n");
       for (ins = instructions; ins; ins = ins->next) {
  @@ -344,6 +346,7 @@
                               else {
                                   --old->use_count;
                                   ins2->opnum = op;
  +                                any = 1;
                                   debug(DEBUG_OPT2," -> %s\n", ins_string(ins2));
                               }
                           }
  @@ -355,6 +358,7 @@
   next_constant:;
   
       }/*for(ins ... )*/
  +    return any;
   }
   
   
  
  
  
  1.5       +17 -2     parrot/languages/imcc/t/imcpasm/opt2.t
  
  Index: opt2.t
  ===================================================================
  RCS file: /cvs/public/parrot/languages/imcc/t/imcpasm/opt2.t,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -w -r1.4 -r1.5
  --- opt2.t    4 Jun 2003 12:34:57 -0000       1.4
  +++ opt2.t    6 Jun 2003 11:14:43 -0000       1.5
  @@ -1,6 +1,6 @@
   #!perl
   use strict;
  -use TestCompiler tests => 4;
  +use TestCompiler tests => 5;
   
   # these tests are run with -O2 by TestCompiler and show
   # generated PASM code for various optimizations at level 2
  @@ -57,7 +57,7 @@
   _main:
     set I1, 10
     set I0, 5
  -  lt 10, 20, nxt
  +  branch nxt
   add:
     add I0, I1, I1
     print I0
  @@ -94,5 +94,20 @@
        print I0
        lt I1, 4, next
        end
  +OUT
  +
  +##############################
  +output_is(<<'CODE', <<'OUT', "constant prop repeated");
  +  .local int a
  +  .local int b
  +  .local int sum
  +  a = 10
  +  b = 5
  +  sum = a + b
  +  print sum
  +  end
  +CODE
  +  print 15
  +  end
   OUT
   
  
  
  

Reply via email to