mirror of git://gcc.gnu.org/git/gcc.git
re PR target/47197 (ICE in gimplify_expr, at gimplify.c:7153 on AltiVec code (vec_dst))
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. From-SVN: r186771
This commit is contained in:
parent
814671217c
commit
24d5b351b1
|
@ -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>
|
2012-04-24 Georg-Johann Lay <avr@gjlay.de>
|
||||||
|
|
||||||
PR target/53065
|
PR target/53065
|
||||||
|
|
|
@ -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.
|
/* Build a tree for a function call to an Altivec non-overloaded builtin.
|
||||||
The overloaded builtin that matched the types and args is described
|
The overloaded builtin that matched the types and args is described
|
||||||
by DESC. The N arguments are given in ARGS, respectively.
|
by DESC. The N arguments are given in ARGS, respectively.
|
||||||
|
@ -3470,18 +3486,18 @@ altivec_build_resolved_builtin (tree *args, int n,
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
call = build_call_expr (impl_fndecl, 1,
|
call = build_call_expr (impl_fndecl, 1,
|
||||||
fold_convert (arg_type[0], args[0]));
|
fully_fold_convert (arg_type[0], args[0]));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
call = build_call_expr (impl_fndecl, 2,
|
call = build_call_expr (impl_fndecl, 2,
|
||||||
fold_convert (arg_type[0], args[0]),
|
fully_fold_convert (arg_type[0], args[0]),
|
||||||
fold_convert (arg_type[1], args[1]));
|
fully_fold_convert (arg_type[1], args[1]));
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
call = build_call_expr (impl_fndecl, 3,
|
call = build_call_expr (impl_fndecl, 3,
|
||||||
fold_convert (arg_type[0], args[0]),
|
fully_fold_convert (arg_type[0], args[0]),
|
||||||
fold_convert (arg_type[1], args[1]),
|
fully_fold_convert (arg_type[1], args[1]),
|
||||||
fold_convert (arg_type[2], args[2]));
|
fully_fold_convert (arg_type[2], args[2]));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
gcc_unreachable ();
|
gcc_unreachable ();
|
||||||
|
|
|
@ -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>
|
2012-04-24 Richard Guenther <rguenther@suse.de>
|
||||||
|
|
||||||
PR tree-optimization/53085
|
PR tree-optimization/53085
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
Loading…
Reference in New Issue