2015-10-09 Richard Biener <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Oct 2015 11:47:31 +0000 (11:47 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 9 Oct 2015 11:47:31 +0000 (11:47 +0000)
* genmatch.c (print_operand): Fix formatting.
(dt_node::append_simplify): Warn for multiple simplifiers
that match the same pattern.
* match.pd (log (exp @0)): Remove duplicates.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@228648 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/genmatch.c
gcc/match.pd

index 514bb31..11c3b47 100644 (file)
@@ -1,3 +1,10 @@
+2015-10-09  Richard Biener  <rguenther@suse.de>
+
+       * genmatch.c (print_operand): Fix formatting.
+       (dt_node::append_simplify): Warn for multiple simplifiers
+       that match the same pattern.
+       * match.pd (log (exp @0)): Remove duplicates.
+
 2015-10-09  Richard Biener  <rguenth@suse.de>
 
        PR target/67366
index 102a635..b05760e 100644 (file)
@@ -710,13 +710,9 @@ print_operand (operand *o, FILE *f = stderr, bool flattened = false)
 {
   if (capture *c = dyn_cast<capture *> (o))
     {
-      fprintf (f, "@%u", c->where);
       if (c->what && flattened == false)
-       {
-         putc (':', f);
-         print_operand (c->what, f, flattened);
-         putc (' ', f);
-       }
+       print_operand (c->what, f, flattened);
+      fprintf (f, "@%u", c->where);
     }
 
   else if (predicate *p = dyn_cast<predicate *> (o))
@@ -727,18 +723,22 @@ print_operand (operand *o, FILE *f = stderr, bool flattened = false)
 
   else if (expr *e = dyn_cast<expr *> (o))
     {
-      fprintf (f, "(%s", e->operation->id);
-
-      if (flattened == false)
+      if (e->ops.length () == 0)
+       fprintf (f, "%s", e->operation->id);
+      else
        {
-         putc (' ', f);
-         for (unsigned i = 0; i < e->ops.length (); ++i)
+         fprintf (f, "(%s", e->operation->id);
+
+         if (flattened == false)
            {
-             print_operand (e->ops[i], f, flattened);
-             putc (' ', f);
+             for (unsigned i = 0; i < e->ops.length (); ++i)
+               {
+                 putc (' ', f);
+                 print_operand (e->ops[i], f, flattened);
+               }
            }
+         putc (')', f);
        }
-      putc (')', f);
     }
 
   else
@@ -1563,6 +1563,14 @@ dt_node::append_simplify (simplify *s, unsigned pattern_no,
                          dt_operand **indexes)
 {
   dt_simplify *n = new dt_simplify (s, pattern_no, indexes);
+  for (unsigned i = 0; i < kids.length (); ++i)
+    if (dt_simplify *s2 = dyn_cast <dt_simplify *> (kids[i]))
+      {
+       warning_at (s->match->location, "duplicate pattern");
+       warning_at (s2->s->match->location, "previous pattern defined here");
+       print_operand (s->match, stderr);
+       fprintf (stderr, "\n");
+      }
   return append_node (n);
 }
 
index b87c436..170d73e 100644 (file)
@@ -2169,18 +2169,16 @@ along with GCC; see the file COPYING3.  If not see
    (mult @0 (POW @1 (negate @2))))
 
  /* Special case, optimize logN(expN(x)) = x.  */
- (for logs (LOG LOG2 LOG10)
-      exps (EXP EXP2 EXP10)
+ (for logs (LOG LOG2 LOG10 LOG10)
+      exps (EXP EXP2 EXP10 POW10)
   (simplify
    (logs (exps @0))
     @0))
  /* Optimize logN(func()) for various exponential functions.  We
     want to determine the value "x" and the power "exponent" in
     order to transform logN(x**exponent) into exponent*logN(x).  */
- (for logs (LOG LOG LOG LOG
-            LOG2 LOG2 LOG2 LOG2
-           LOG10 LOG10 LOG10 LOG10)
-      exps (EXP EXP2 EXP10 POW10)
+ (for logs (LOG  LOG   LOG   LOG2 LOG2  LOG2  LOG10 LOG10)
+      exps (EXP2 EXP10 POW10 EXP  EXP10 POW10 EXP   EXP2)
   (simplify
    (logs (exps @0))
    (with {