Patchwork Add SCEV cprop dump

login
register
mail settings
Submitter Marek Polacek
Date May 15, 2013, 2:35 p.m.
Message ID <20130515143552.GC14240@redhat.com>
Download mbox | patch
Permalink /patch/244093/
State New
Headers show

Comments

Marek Polacek - May 15, 2013, 2:35 p.m.
On Wed, May 15, 2013 at 02:58:22PM +0200, Richard Biener wrote:
> On Wed, May 15, 2013 at 2:07 PM, Marek Polacek <polacek@redhat.com> wrote:
> >           /* Replace the uses of the name.  */
> >           if (name != ev)
> > -           replace_uses_by (name, ev);
> > +           {
> > +             replace_uses_by (name, ev);
> > +             if (dump_file && (dump_flags & TDF_SCEV))
> 
> should be without dump_flags checking

Ok.

> > +               {
> > +                 fprintf (dump_file, "(replace_stmt \n  (");
> > +                 print_generic_expr (dump_file, name, 0);
> > +                 fprintf (dump_file, " with ");
> > +                 print_generic_expr (dump_file, ev, 0);
> > +                 fprintf (dump_file, ")\n) \n");
> 
> and no need to do it the LISP-y way ;)

Good, I didn't like it much anyway.

> I would have liked to see failed attempts as well, then with TDF_DETAILS.
> Failed attempts for the "real" final value replacement stuff (I'm not sure
> the constant propagation part is worth keeping ... how often does it trigger?)

Not much often: I've measured it and it happens only in ~150 testcases
from the whole c/c++/fortran testsuites.  So, like this?  Thanks,

It looks like:
not replacing:
  n_4 = PHI <n_3(4)>

and

final value replacement:
  n_4 = PHI <n_3(4)>
  with
  n_4 = _1 + _12;

2013-05-15  Marek Polacek  <polacek@redhat.com>

	* tree-scalar-evolution.c (scev_const_prop): Add more dumps.


	Marek
Richard Guenther - May 16, 2013, 9:05 a.m.
On Wed, May 15, 2013 at 4:35 PM, Marek Polacek <polacek@redhat.com> wrote:
> On Wed, May 15, 2013 at 02:58:22PM +0200, Richard Biener wrote:
>> On Wed, May 15, 2013 at 2:07 PM, Marek Polacek <polacek@redhat.com> wrote:
>> >           /* Replace the uses of the name.  */
>> >           if (name != ev)
>> > -           replace_uses_by (name, ev);
>> > +           {
>> > +             replace_uses_by (name, ev);
>> > +             if (dump_file && (dump_flags & TDF_SCEV))
>>
>> should be without dump_flags checking
>
> Ok.
>
>> > +               {
>> > +                 fprintf (dump_file, "(replace_stmt \n  (");
>> > +                 print_generic_expr (dump_file, name, 0);
>> > +                 fprintf (dump_file, " with ");
>> > +                 print_generic_expr (dump_file, ev, 0);
>> > +                 fprintf (dump_file, ")\n) \n");
>>
>> and no need to do it the LISP-y way ;)
>
> Good, I didn't like it much anyway.
>
>> I would have liked to see failed attempts as well, then with TDF_DETAILS.
>> Failed attempts for the "real" final value replacement stuff (I'm not sure
>> the constant propagation part is worth keeping ... how often does it trigger?)
>
> Not much often: I've measured it and it happens only in ~150 testcases
> from the whole c/c++/fortran testsuites.  So, like this?  Thanks,
>
> It looks like:
> not replacing:
>   n_4 = PHI <n_3(4)>
>
> and
>
> final value replacement:
>   n_4 = PHI <n_3(4)>
>   with
>   n_4 = _1 + _12;

Ok.

Thanks,
Richard.

> 2013-05-15  Marek Polacek  <polacek@redhat.com>
>
>         * tree-scalar-evolution.c (scev_const_prop): Add more dumps.
>
> --- gcc/tree-scalar-evolution.c.mp      2013-05-15 15:09:06.579122696 +0200
> +++ gcc/tree-scalar-evolution.c 2013-05-15 16:32:11.569217537 +0200
> @@ -3385,12 +3385,24 @@ scev_const_prop (void)
>                  to be turned into n %= 45.  */
>               || expression_expensive_p (def))
>             {
> +             if (dump_file && (dump_flags & TDF_DETAILS))
> +               {
> +                 fprintf (dump_file, "not replacing:\n  ");
> +                 print_gimple_stmt (dump_file, phi, 0, 0);
> +                 fprintf (dump_file, "\n");
> +               }
>               gsi_next (&psi);
>               continue;
>             }
>
>           /* Eliminate the PHI node and replace it by a computation outside
>              the loop.  */
> +         if (dump_file)
> +           {
> +             fprintf (dump_file, "\nfinal value replacement:\n  ");
> +             print_gimple_stmt (dump_file, phi, 0, 0);
> +             fprintf (dump_file, "  with\n  ");
> +           }
>           def = unshare_expr (def);
>           remove_phi_node (&psi, false);
>
> @@ -3398,6 +3410,11 @@ scev_const_prop (void)
>                                           true, GSI_SAME_STMT);
>           ass = gimple_build_assign (rslt, def);
>           gsi_insert_before (&bsi, ass, GSI_SAME_STMT);
> +         if (dump_file)
> +           {
> +             print_gimple_stmt (dump_file, ass, 0, 0);
> +             fprintf (dump_file, "\n");
> +           }
>         }
>      }
>    return 0;
>
>         Marek

Patch

--- gcc/tree-scalar-evolution.c.mp	2013-05-15 15:09:06.579122696 +0200
+++ gcc/tree-scalar-evolution.c	2013-05-15 16:32:11.569217537 +0200
@@ -3385,12 +3385,24 @@  scev_const_prop (void)
 		 to be turned into n %= 45.  */
 	      || expression_expensive_p (def))
 	    {
+	      if (dump_file && (dump_flags & TDF_DETAILS))
+		{
+	          fprintf (dump_file, "not replacing:\n  ");
+	          print_gimple_stmt (dump_file, phi, 0, 0);
+	          fprintf (dump_file, "\n");
+		}
 	      gsi_next (&psi);
 	      continue;
 	    }
 
 	  /* Eliminate the PHI node and replace it by a computation outside
 	     the loop.  */
+	  if (dump_file)
+	    {
+	      fprintf (dump_file, "\nfinal value replacement:\n  ");
+	      print_gimple_stmt (dump_file, phi, 0, 0);
+	      fprintf (dump_file, "  with\n  ");
+	    }
 	  def = unshare_expr (def);
 	  remove_phi_node (&psi, false);
 
@@ -3398,6 +3410,11 @@  scev_const_prop (void)
       					  true, GSI_SAME_STMT);
 	  ass = gimple_build_assign (rslt, def);
 	  gsi_insert_before (&bsi, ass, GSI_SAME_STMT);
+	  if (dump_file)
+	    {
+	      print_gimple_stmt (dump_file, ass, 0, 0);
+	      fprintf (dump_file, "\n");
+	    }
 	}
     }
   return 0;