Commit d74032d9 by Ulrich Weigand Committed by Ulrich Weigand

re PR target/34856 (ICE with some constant vectors)

	PR target/34856
	* config/spu/spu.c (spu_builtin_splats): Do not generate
	invalid CONST_VECTOR expressions.
	(spu_expand_vector_init): Likewise.

From-SVN: r137218
parent 069a1c33
2008-06-28 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
PR target/34856
* config/spu/spu.c (spu_builtin_splats): Do not generate
invalid CONST_VECTOR expressions.
(spu_expand_vector_init): Likewise.
2008-06-28 Richard Sandiford <rdsandiford@googlemail.com> 2008-06-28 Richard Sandiford <rdsandiford@googlemail.com>
* optabs.c (libfunc_decls): New variable. * optabs.c (libfunc_decls): New variable.
......
...@@ -4576,15 +4576,6 @@ spu_builtin_splats (rtx ops[]) ...@@ -4576,15 +4576,6 @@ spu_builtin_splats (rtx ops[])
constant_to_array (GET_MODE_INNER (mode), ops[1], arr); constant_to_array (GET_MODE_INNER (mode), ops[1], arr);
emit_move_insn (ops[0], array_to_constant (mode, arr)); emit_move_insn (ops[0], array_to_constant (mode, arr));
} }
else if (!flag_pic && GET_MODE (ops[0]) == V4SImode && CONSTANT_P (ops[1]))
{
rtvec v = rtvec_alloc (4);
RTVEC_ELT (v, 0) = ops[1];
RTVEC_ELT (v, 1) = ops[1];
RTVEC_ELT (v, 2) = ops[1];
RTVEC_ELT (v, 3) = ops[1];
emit_move_insn (ops[0], gen_rtx_CONST_VECTOR (mode, v));
}
else else
{ {
rtx reg = gen_reg_rtx (TImode); rtx reg = gen_reg_rtx (TImode);
...@@ -4903,7 +4894,9 @@ spu_expand_vector_init (rtx target, rtx vals) ...@@ -4903,7 +4894,9 @@ spu_expand_vector_init (rtx target, rtx vals)
for (i = 0; i < n_elts; ++i) for (i = 0; i < n_elts; ++i)
{ {
x = XVECEXP (vals, 0, i); x = XVECEXP (vals, 0, i);
if (!CONSTANT_P (x)) if (!(CONST_INT_P (x)
|| GET_CODE (x) == CONST_DOUBLE
|| GET_CODE (x) == CONST_FIXED))
++n_var; ++n_var;
else else
{ {
...@@ -4940,8 +4933,13 @@ spu_expand_vector_init (rtx target, rtx vals) ...@@ -4940,8 +4933,13 @@ spu_expand_vector_init (rtx target, rtx vals)
/* fill empty slots with the first constant, this increases /* fill empty slots with the first constant, this increases
our chance of using splats in the recursive call below. */ our chance of using splats in the recursive call below. */
for (i = 0; i < n_elts; ++i) for (i = 0; i < n_elts; ++i)
if (!CONSTANT_P (XVECEXP (constant_parts_rtx, 0, i))) {
XVECEXP (constant_parts_rtx, 0, i) = first_constant; x = XVECEXP (constant_parts_rtx, 0, i);
if (!(CONST_INT_P (x)
|| GET_CODE (x) == CONST_DOUBLE
|| GET_CODE (x) == CONST_FIXED))
XVECEXP (constant_parts_rtx, 0, i) = first_constant;
}
spu_expand_vector_init (target, constant_parts_rtx); spu_expand_vector_init (target, constant_parts_rtx);
} }
...@@ -4957,7 +4955,9 @@ spu_expand_vector_init (rtx target, rtx vals) ...@@ -4957,7 +4955,9 @@ spu_expand_vector_init (rtx target, rtx vals)
for (i = 0; i < n_elts; ++i) for (i = 0; i < n_elts; ++i)
{ {
x = XVECEXP (vals, 0, i); x = XVECEXP (vals, 0, i);
if (!CONSTANT_P (x)) if (!(CONST_INT_P (x)
|| GET_CODE (x) == CONST_DOUBLE
|| GET_CODE (x) == CONST_FIXED))
{ {
if (!register_operand (x, GET_MODE (x))) if (!register_operand (x, GET_MODE (x)))
x = force_reg (GET_MODE (x), x); x = force_reg (GET_MODE (x), x);
......
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