]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR target/83660 (ICE with vec_extract inside expression statement)
authorAaron Sawdey <acsawdey@linux.ibm.com>
Tue, 24 Apr 2018 00:14:21 +0000 (00:14 +0000)
committerAaron Sawdey <acsawdey@gcc.gnu.org>
Tue, 24 Apr 2018 00:14:21 +0000 (19:14 -0500)
2018-04-23  Aaron Sawdey  <acsawdey@linux.ibm.com>

Backport from mainline
2018-04-16  Aaron Sawdey  <acsawdey@linux.ibm.com>

PR target/83660
* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin): Mark
vec_extract expression as having side effects to make sure it gets
a cleanup point.

2018-04-23  Aaron Sawdey  <acsawdey@linux.ibm.com>

Backport from mainline
2018-04-16  Aaron Sawdey  <acsawdey@linux.ibm.com>

PR target/83660
* gcc.target/powerpc/pr83660.C: New test.

From-SVN: r259586

gcc/ChangeLog
gcc/config/rs6000/rs6000-c.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/powerpc/pr83660.C [new file with mode: 0644]

index b7155e69dae56c4c440c95b8cf490609d68df0d8..c75e50dbca0a7b5af053c56ec41bde8fc3168f8a 100644 (file)
@@ -1,3 +1,13 @@
+2018-04-23  Aaron Sawdey  <acsawdey@linux.ibm.com>
+
+       Backport from mainline
+       2018-04-16  Aaron Sawdey  <acsawdey@linux.ibm.com>
+
+       PR target/83660
+       * config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin): Mark
+       vec_extract expression as having side effects to make sure it gets
+       a cleanup point.
+
 2018-04-23  Eric Botcazou  <ebotcazou@adacore.com>
 
        PR middle-end/85496
index 74f7bd522dc2a6d0e3793a35e3f85bb18e6bcbac..4a9a4794dcd943ed72459a98386d182c9ee5b0ac 100644 (file)
@@ -4919,6 +4919,15 @@ assignment for unaligned loads and stores");
       stmt = build_binary_op (loc, PLUS_EXPR, stmt, arg2, 1);
       stmt = build_indirect_ref (loc, stmt, RO_NULL);
 
+      /* PR83660: We mark this as having side effects so that
+        downstream in fold_build_cleanup_point_expr () it will get a
+        CLEANUP_POINT_EXPR.  If it does not we can run into an ICE
+        later in gimplify_cleanup_point_expr ().  Potentially this
+        causes missed optimization because the actually is no side
+        effect.  */
+      if (c_dialect_cxx ())
+       TREE_SIDE_EFFECTS (stmt) = 1;
+
       return stmt;
     }
 
index adaf01837ab61f78863008686e1368751474bf17..2f36f83abf9321cf716f97d5bab334fc0b6eab3e 100644 (file)
@@ -1,3 +1,11 @@
+2018-04-23  Aaron Sawdey  <acsawdey@linux.ibm.com>
+
+       Backport from mainline
+       2018-04-16  Aaron Sawdey  <acsawdey@linux.ibm.com>
+
+       PR target/83660
+       * gcc.target/powerpc/pr83660.C: New test.
+
 2018-04-23  Eric Botcazou  <ebotcazou@adacore.com>
 
        * g++.dg/torture/pr85496.C: New test.
diff --git a/gcc/testsuite/gcc.target/powerpc/pr83660.C b/gcc/testsuite/gcc.target/powerpc/pr83660.C
new file mode 100644 (file)
index 0000000..60adcda
--- /dev/null
@@ -0,0 +1,14 @@
+/* PR target/83660 */
+/* { dg-do compile } */
+/* { dg-options "-mcpu=power7" } */
+
+#include <altivec.h>
+
+typedef __vector unsigned int  uvec32_t  __attribute__((__aligned__(16)));
+
+unsigned get_word(uvec32_t v)
+{
+    return ({const unsigned _B1 = 32;
+            vec_extract((uvec32_t)v, 2);});
+}
+