Commit 24d5b351 by Bill Schmidt Committed by William Schmidt

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
parent 81467121
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
......
......@@ -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 ();
......
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
......
/* { 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);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment