]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR middle-end/72747 (powerpc: wrong code generated for vec_splats in...
authorWill Schmidt <will_schmidt@vnet.ibm.com>
Wed, 2 Nov 2016 14:13:07 +0000 (14:13 +0000)
committerWill Schmidt <willschm@gcc.gnu.org>
Wed, 2 Nov 2016 14:13:07 +0000 (14:13 +0000)
[gcc]

2016-11-02  Will Schmidt <will_schmidt@vnet.ibm.com>

Backport from trunk
2016-10-26  Will Schmidt <will_schmidt@vnet.ibm.com>

PR middle-end/72747
* gimplify.c (gimplify_init_constructor): Move emit of constructor
assignment to earlier in the if/else logic.

[gcc/testsuite]

2016-11-02  Will Schmidt  <will_schmidt@vnet.ibm.com>

Backport from trunk
2016-10-26  Will Schmidt <will_schmidt@vnet.ibm.com>

PR middle-end/72747
* c-c++-common/pr72747-1.c: New test.
* c-c++-common/pr72747-2.c: Likewise.

From-SVN: r241793

gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/pr72747-1.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/pr72747-2.c [new file with mode: 0644]

index 7fdec07efde3e46adac6fbe54c83c9cd5db6fe5e..ddd152f624f06c62d7fa195eecb958df23ae914d 100644 (file)
@@ -1,3 +1,12 @@
+2016-11-02  Will Schmidt <will_schmidt@vnet.ibm.com>
+
+       Backport from trunk
+       2016-10-26  Will Schmidt <will_schmidt@vnet.ibm.com>
+
+       PR middle-end/72747
+       * gimplify.c (gimplify_init_constructor): Move emit of constructor
+       assignment to earlier in the if/else logic.
+
 2016-10-29  John David Anglin  <danglin@gcc.gnu.org>
 
        * config/pa/pa.h (BIGGEST_ALIGNMENT): Adjust comment.
index 46528ec8bf78a3755e970e719853a533db06e6d2..c571c66775a47b8142a8ad13506fa79f081bc0fe 100644 (file)
@@ -4120,24 +4120,23 @@ gimplify_init_constructor (tree *expr_p, gimple_seq *pre_p, gimple_seq *post_p,
 
   if (ret == GS_ERROR)
     return GS_ERROR;
-  else if (want_value)
+  /* If we have gimplified both sides of the initializer but have
+     not emitted an assignment, do so now.  */
+  if (*expr_p)
+    {
+      tree lhs = TREE_OPERAND (*expr_p, 0);
+      tree rhs = TREE_OPERAND (*expr_p, 1);
+      gassign *init = gimple_build_assign (lhs, rhs);
+      gimplify_seq_add_stmt (pre_p, init);
+    }
+  if (want_value)
     {
       *expr_p = object;
       return GS_OK;
     }
   else
     {
-      /* If we have gimplified both sides of the initializer but have
-        not emitted an assignment, do so now.  */
-      if (*expr_p)
-       {
-         tree lhs = TREE_OPERAND (*expr_p, 0);
-         tree rhs = TREE_OPERAND (*expr_p, 1);
-         gassign *init = gimple_build_assign (lhs, rhs);
-         gimplify_seq_add_stmt (pre_p, init);
-         *expr_p = NULL;
-       }
-
+      *expr_p = NULL;
       return GS_ALL_DONE;
     }
 }
index a85f04aebc38bd38be1bfbb78460883ae444f897..c8357e517e725c02cb9bfaa5e3f424af3b547850 100644 (file)
@@ -1,3 +1,12 @@
+2016-11-02  Will Schmidt  <will_schmidt@vnet.ibm.com>
+
+       Backport from trunk
+       2016-10-26  Will Schmidt <will_schmidt@vnet.ibm.com>
+
+       PR middle-end/72747
+       * c-c++-common/pr72747-1.c: New test.
+       * c-c++-common/pr72747-2.c: Likewise.
+
 2016-11-02  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * lib/target-supports.exp (check_gc_sections_available): Use
diff --git a/gcc/testsuite/c-c++-common/pr72747-1.c b/gcc/testsuite/c-c++-common/pr72747-1.c
new file mode 100644 (file)
index 0000000..e87069d
--- /dev/null
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec -fdump-tree-gimple" } */
+
+/* PR 72747: Test that cascaded definition is happening for constant vectors. */
+
+#include <altivec.h>
+
+int main (int argc, char *argv[])
+{
+       __vector int v1,v2;
+       v1 = v2 = vec_splats ((int) 42);
+       return 0;
+}
+/* { dg-final { scan-tree-dump-times " v2 = { 42, 42, 42, 42 }" 1 "gimple" } } */
+
diff --git a/gcc/testsuite/c-c++-common/pr72747-2.c b/gcc/testsuite/c-c++-common/pr72747-2.c
new file mode 100644 (file)
index 0000000..24a4364
--- /dev/null
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-c -maltivec -fdump-tree-gimple" } */
+
+/* PR 72747: test that cascaded definition is happening for non constants. */
+
+void foo ()
+{
+  extern int i;
+  __vector int v,w;
+    v = w = (vector int) { i };
+}
+
+int main (int argc, char *argv[])
+{
+  return 0;
+}
+/* { dg-final { scan-tree-dump-times " w = " 1 "gimple" } } */