diff options
author | Will Schmidt <willschm@gcc.gnu.org> | 2017-07-13 14:09:12 +0000 |
---|---|---|
committer | Will Schmidt <willschm@gcc.gnu.org> | 2017-07-13 14:09:12 +0000 |
commit | 1260d19905063540e560bda4924f09f1aff4bed5 (patch) | |
tree | 454af3d3098d9b80041311cdffd31de14ddcffc0 /gcc | |
parent | 1447cedf861772613f6cdc5571bb26ebc107c191 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/fold-vec-missing-lhs.c | 24 |
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); +} |