On October 31, 2016 4:50:08 PM GMT+01:00, Jakub Jelinek <ja...@redhat.com> 
wrote:
>Hi!
>
>As the testcase shows, while reassociation of vector multiplication
>has been enabled, the eliminate_using_constants optimization
>isn't enabled for integral vectors (only for floating point vectors),
>so e.g. if we have more than one { ~0, ~0, ... } vectors in there
>coming from NEGATE_EXPRs, we don't actually fold them into a single
>{ ~0, ~0, ... } or { 1, 1, ... } vector (the former then into
>NEGATE_EXPR on the result, the latter removed altogether).
>
>Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK.

Richard.

>2016-10-31  Jakub Jelinek  <ja...@redhat.com>
>
>       PR tree-optimization/77860
>       * tree-ssa-reassoc.c (eliminate_using_constants): Handle
>       also integral complex and vector constants.
>
>       * gcc.dg/pr77860.c: New test.
>
>--- gcc/tree-ssa-reassoc.c.jj  2016-10-31 13:28:12.000000000 +0100
>+++ gcc/tree-ssa-reassoc.c     2016-10-31 13:47:00.364216248 +0100
>@@ -924,7 +924,7 @@ eliminate_using_constants (enum tree_cod
>   tree type = TREE_TYPE (oelast->op);
> 
>   if (oelast->rank == 0
>-      && (INTEGRAL_TYPE_P (type) || FLOAT_TYPE_P (type)))
>+      && (ANY_INTEGRAL_TYPE_P (type) || FLOAT_TYPE_P (type)))
>     {
>       switch (opcode)
>       {
>--- gcc/testsuite/gcc.dg/pr77860.c.jj  2016-10-31 13:50:34.019649814
>+0100
>+++ gcc/testsuite/gcc.dg/pr77860.c     2016-10-31 13:49:35.000000000 +0100
>@@ -0,0 +1,13 @@
>+/* PR tree-optimization/77860 */
>+/* { dg-do compile } */
>+/* { dg-options "-O2 -fno-tree-vrp -fno-tree-forwprop -Wno-psabi" } */
>+
>+typedef unsigned short V __attribute__((vector_size (16)));
>+
>+V
>+foo (V x, V y)
>+{
>+  V a = -x;
>+  V b = -y;
>+  return a * b;
>+}
>
>       Jakub


Reply via email to