aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorWill Schmidt <willschm@gcc.gnu.org>2017-07-13 14:09:12 +0000
committerWill Schmidt <willschm@gcc.gnu.org>2017-07-13 14:09:12 +0000
commit1260d19905063540e560bda4924f09f1aff4bed5 (patch)
tree454af3d3098d9b80041311cdffd31de14ddcffc0 /gcc
parent1447cedf861772613f6cdc5571bb26ebc107c191 (diff)
downloadgcc-1260d19905063540e560bda4924f09f1aff4bed5.zip
gcc-1260d19905063540e560bda4924f09f1aff4bed5.tar.gz
gcc-1260d19905063540e560bda4924f09f1aff4bed5.tar.bz2
rs6000.c (rs6000_gimple_fold_builtin): Return early if there is no lhs.
[gcc] 2017-07-12 Will Schmidt <will_schmidt@vnet.ibm.com> * config/rs6000/rs6000.c (rs6000_gimple_fold_builtin): Return early if there is no lhs. [testsuite] 2017-07-12 Will Schmidt <will_schmidt@vnet.ibm.com> * gcc.target/powerpc/fold-vec-missing-lhs: New. From-SVN: r250185
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000.c4
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/powerpc/fold-vec-missing-lhs.c24
4 files changed, 37 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3246378..2a4f082 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+ 2017-07-13 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * config/rs6000/rs6000.c (rs6000_gimple_fold_builtin): Return
+ early if there is no lhs.
+
2017-07-13 Martin Liska <mliska@suse.cz>
* dwarf2out.c (gen_pointer_type_die): Remove dead code.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index af5b5f1..a114d61 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -16302,6 +16302,10 @@ rs6000_gimple_fold_builtin (gimple_stmt_iterator *gsi)
= (enum rs6000_builtins) DECL_FUNCTION_CODE (fndecl);
tree arg0, arg1, lhs;
+ /* Generic solution to prevent gimple folding of code without a LHS. */
+ if (!gimple_call_lhs (stmt))
+ return false;
+
switch (fn_code)
{
/* Flavors of vec_add. We deliberately don't expand
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b5ca7fa..b24aab8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+ 2017-07-13 Will Schmidt <will_schmidt@vnet.ibm.com>
+
+ * gcc.target/powerpc/fold-vec-missing-lhs.c: New.
+
2017-07-13 Martin Liska <mliska@suse.cz>
* c-c++-common/ubsan/sanitize-all-1.c: Update scanned pattern.
diff --git a/gcc/testsuite/gcc.target/powerpc/fold-vec-missing-lhs.c b/gcc/testsuite/gcc.target/powerpc/fold-vec-missing-lhs.c
new file mode 100644
index 0000000..6add903
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/fold-vec-missing-lhs.c
@@ -0,0 +1,24 @@
+/* This test is meant to verify that the gimple-folding does not
+ occur when the LHS portion of an expression is missing.
+ The intent of this test is to verify that we do not generate an ICE.
+ This was noticed during debug of PR81317. */
+
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_altivec_ok } */
+/* { dg-options "-maltivec" } */
+
+#include <altivec.h>
+
+vector signed short
+test1_nolhs (vector bool short x, vector signed short y)
+{
+ vec_add (x, y);
+ return vec_add (x, y);
+}
+
+vector signed short
+test2_nolhs (vector signed short x, vector bool short y)
+{
+ vec_add (x, y);
+ return vec_add (x, y);
+}