diff options
author | wschmidt <wschmidt@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-04-24 15:51:58 +0000 |
---|---|---|
committer | wschmidt <wschmidt@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-04-24 15:51:58 +0000 |
commit | 745d490feb9c9ecf99c20ffbdf8beab0f33c06d6 (patch) | |
tree | 975041ebfdf128eec33889abe5a1294aeb7b3445 | |
parent | ec020dc2e15a6387b6a4cb073ee78cbc0dae60da (diff) | |
download | gcc-745d490feb9c9ecf99c20ffbdf8beab0f33c06d6.tar.gz |
gcc:
2012-04-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR target/47197
* config/rs6000/rs6000-c.c (fully_fold_convert): New function.
(altivec_build_resolved_builtin): Call fully_fold_convert.
gcc/testsuite:
2012-04-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
PR target/47197
* gcc.target/powerpc/pr47197.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@186771 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000-c.c | 28 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/pr47197.c | 12 |
4 files changed, 45 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9d55ef06477..5eb9411fc13 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-04-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + PR target/47197 + * config/rs6000/rs6000-c.c (fully_fold_convert): New function. + (altivec_build_resolved_builtin): Call fully_fold_convert. + 2012-04-24 Georg-Johann Lay <avr@gjlay.de> PR target/53065 diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c index 76a21463ec3..0717b91b2bc 100644 --- a/gcc/config/rs6000/rs6000-c.c +++ b/gcc/config/rs6000/rs6000-c.c @@ -3421,6 +3421,22 @@ rs6000_builtin_type_compatible (tree t, int id) } +/* In addition to calling fold_convert for EXPR of type TYPE, also + call c_fully_fold to remove any C_MAYBE_CONST_EXPRs that could be + hiding there (PR47197). */ + +static tree +fully_fold_convert (tree type, tree expr) +{ + tree result = fold_convert (type, expr); + bool maybe_const = true; + + if (!c_dialect_cxx ()) + result = c_fully_fold (result, false, &maybe_const); + + return result; +} + /* Build a tree for a function call to an Altivec non-overloaded builtin. The overloaded builtin that matched the types and args is described by DESC. The N arguments are given in ARGS, respectively. @@ -3470,18 +3486,18 @@ altivec_build_resolved_builtin (tree *args, int n, break; case 1: call = build_call_expr (impl_fndecl, 1, - fold_convert (arg_type[0], args[0])); + fully_fold_convert (arg_type[0], args[0])); break; case 2: call = build_call_expr (impl_fndecl, 2, - fold_convert (arg_type[0], args[0]), - fold_convert (arg_type[1], args[1])); + fully_fold_convert (arg_type[0], args[0]), + fully_fold_convert (arg_type[1], args[1])); break; case 3: call = build_call_expr (impl_fndecl, 3, - fold_convert (arg_type[0], args[0]), - fold_convert (arg_type[1], args[1]), - fold_convert (arg_type[2], args[2])); + fully_fold_convert (arg_type[0], args[0]), + fully_fold_convert (arg_type[1], args[1]), + fully_fold_convert (arg_type[2], args[2])); break; default: gcc_unreachable (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 646a150f134..0a4d974ef08 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-04-24 Bill Schmidt <wschmidt@linux.vnet.ibm.com> + + PR target/47197 + * gcc.target/powerpc/pr47197.c: New test. + 2012-04-24 Richard Guenther <rguenther@suse.de> PR tree-optimization/53085 diff --git a/gcc/testsuite/gcc.target/powerpc/pr47197.c b/gcc/testsuite/gcc.target/powerpc/pr47197.c new file mode 100644 index 00000000000..729dcfb364a --- /dev/null +++ b/gcc/testsuite/gcc.target/powerpc/pr47197.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ +/* { dg-options "-maltivec" } */ + +/* Compile-only test to ensure that expressions can be passed to + Altivec builtins without error. */ + +#include <altivec.h> + +void func(unsigned char *buf, unsigned len) +{ + vec_dst(buf, (len >= 256 ? 0 : len) | 512, 2); +} |