diff mbox

Fix modulo patterns in match.pd

Message ID alpine.LSU.2.11.1410241525520.9891@zhemvz.fhfr.qr
State New
Headers show

Commit Message

Richard Biener Oct. 24, 2014, 1:27 p.m. UTC
As noted by Marc I forgot to actually utilize the iterator variable.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

PS: How do we want to refer to patterns in ChangeLogs?

2014-10-24  Richard Biener  <rguenther@suse.de>

	* match.pd (0 % X): Properly use the iterator iterating over
	all modulo operators.
	(X % 1): Likewise.

Comments

Richard Biener Oct. 24, 2014, 1:43 p.m. UTC | #1
On Fri, 24 Oct 2014, Jakub Jelinek wrote:

> On Fri, Oct 24, 2014 at 03:27:19PM +0200, Richard Biener wrote:
> > As noted by Marc I forgot to actually utilize the iterator variable.
> > 
> > Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
> > 
> > Richard.
> > 
> > PS: How do we want to refer to patterns in ChangeLogs?
> 
> Perhaps the syntax should be (simplify "name" (...) { ... })
> (maybe the name being optional?), where you'd give some name to the
> simplification, say "0 % X" or "0 % X => 0" or "0 % X variant 3"
> or whatever, then you could easily refer to those strings in ChangeLog,
> on gcc-patches, in comments etc.

I ripped out optional name support when I added user-defined predicates
which look like

(match truth_valued_p
  (truth_not @0))

or

(match (logical_inverted_value @0)
 (bit_not truth_valued_p@0))

(un-)conveniently the parsers for (simplify...) and (match...)
are shared.

I can see to re-add the optional pattern naming.  OTOH it will be
fun to invent an unique name for each of them ;)  (patternN
anyone? ...)

Richard.

> > 2014-10-24  Richard Biener  <rguenther@suse.de>
> > 
> > 	* match.pd (0 % X): Properly use the iterator iterating over
> > 	all modulo operators.
> > 	(X % 1): Likewise.
> > 
> > Index: gcc/match.pd
> > ===================================================================
> > --- gcc/match.pd	(revision 216648)
> > +++ gcc/match.pd	(working copy)
> > @@ -64,13 +64,13 @@ (define_predicates
> >  (for op (ceil_mod floor_mod round_mod trunc_mod)
> >   /* 0 % X is always zero.  */
> >   (simplify
> > -  (trunc_mod integer_zerop@0 @1)
> > +  (op integer_zerop@0 @1)
> >    /* But not for 0 % 0 so that we can get the proper warnings and errors.  */
> >    (if (!integer_zerop (@1))
> >     @0))
> >   /* X % 1 is always zero.  */
> >   (simplify
> > -  (trunc_mod @0 integer_onep)
> > +  (op @0 integer_onep)
> >    { build_zero_cst (type); }))
> >  
> >  /* x | ~0 -> ~0  */
Jakub Jelinek Oct. 24, 2014, 1:43 p.m. UTC | #2
On Fri, Oct 24, 2014 at 03:27:19PM +0200, Richard Biener wrote:
> As noted by Marc I forgot to actually utilize the iterator variable.
> 
> Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
> 
> Richard.
> 
> PS: How do we want to refer to patterns in ChangeLogs?

Perhaps the syntax should be (simplify "name" (...) { ... })
(maybe the name being optional?), where you'd give some name to the
simplification, say "0 % X" or "0 % X => 0" or "0 % X variant 3"
or whatever, then you could easily refer to those strings in ChangeLog,
on gcc-patches, in comments etc.

> 2014-10-24  Richard Biener  <rguenther@suse.de>
> 
> 	* match.pd (0 % X): Properly use the iterator iterating over
> 	all modulo operators.
> 	(X % 1): Likewise.
> 
> Index: gcc/match.pd
> ===================================================================
> --- gcc/match.pd	(revision 216648)
> +++ gcc/match.pd	(working copy)
> @@ -64,13 +64,13 @@ (define_predicates
>  (for op (ceil_mod floor_mod round_mod trunc_mod)
>   /* 0 % X is always zero.  */
>   (simplify
> -  (trunc_mod integer_zerop@0 @1)
> +  (op integer_zerop@0 @1)
>    /* But not for 0 % 0 so that we can get the proper warnings and errors.  */
>    (if (!integer_zerop (@1))
>     @0))
>   /* X % 1 is always zero.  */
>   (simplify
> -  (trunc_mod @0 integer_onep)
> +  (op @0 integer_onep)
>    { build_zero_cst (type); }))
>  
>  /* x | ~0 -> ~0  */

	Jakub
diff mbox

Patch

Index: gcc/match.pd
===================================================================
--- gcc/match.pd	(revision 216648)
+++ gcc/match.pd	(working copy)
@@ -64,13 +64,13 @@  (define_predicates
 (for op (ceil_mod floor_mod round_mod trunc_mod)
  /* 0 % X is always zero.  */
  (simplify
-  (trunc_mod integer_zerop@0 @1)
+  (op integer_zerop@0 @1)
   /* But not for 0 % 0 so that we can get the proper warnings and errors.  */
   (if (!integer_zerop (@1))
    @0))
  /* X % 1 is always zero.  */
  (simplify
-  (trunc_mod @0 integer_onep)
+  (op @0 integer_onep)
   { build_zero_cst (type); }))
 
 /* x | ~0 -> ~0  */