expr.c (emit_block_move_via_movmem): Use n_generator_args instead of n_operands.

gcc/
	* expr.c (emit_block_move_via_movmem): Use n_generator_args
	instead of n_operands.
	(set_storage_via_setmem): Likewise.
	* optabs.c (maybe_gen_insn): Likewise.
	* config/arm/arm.c (arm_init_neon_builtins): Likewise.
	* config/mips/mips.c (mips_expand_builtin_compare_1): Likewise.
	(mips_expand_builtin_direct): Likewise.
	* config/spu/spu.c (expand_builtin_args): Likewise.

From-SVN: r171823
This commit is contained in:
Richard Sandiford 2011-04-01 08:19:13 +00:00 committed by Richard Sandiford
parent b29387eec6
commit f04713eea7
6 changed files with 22 additions and 23 deletions

View File

@ -1,3 +1,14 @@
2011-04-01 Richard Sandiford <richard.sandiford@linaro.org>
* expr.c (emit_block_move_via_movmem): Use n_generator_args
instead of n_operands.
(set_storage_via_setmem): Likewise.
* optabs.c (maybe_gen_insn): Likewise.
* config/arm/arm.c (arm_init_neon_builtins): Likewise.
* config/mips/mips.c (mips_expand_builtin_compare_1): Likewise.
(mips_expand_builtin_direct): Likewise.
* config/spu/spu.c (expand_builtin_args): Likewise.
2011-04-01 Richard Sandiford <richard.sandiford@linaro.org>
* recog.h (insn_data_d): Add n_generator_args.

View File

@ -18944,7 +18944,7 @@ arm_init_neon_builtins (void)
/* Build a function type directly from the insn_data for this
builtin. The build_function_type() function takes care of
removing duplicates for us. */
for (k = insn_data[icode].n_operands - 1; k >= 0; k--)
for (k = insn_data[icode].n_generator_args - 1; k >= 0; k--)
{
tree eltype;

View File

@ -13252,7 +13252,7 @@ mips_expand_builtin_compare_1 (enum insn_code icode,
/* The instruction should have a target operand, an operand for each
argument, and an operand for COND. */
gcc_assert (nargs + 2 == insn_data[(int) icode].n_operands);
gcc_assert (nargs + 2 == insn_data[(int) icode].n_generator_args);
opno = 0;
create_output_operand (&ops[opno++], NULL_RTX,
@ -13280,11 +13280,9 @@ mips_expand_builtin_direct (enum insn_code icode, rtx target, tree exp,
if (has_target_p)
create_output_operand (&ops[opno++], target, TYPE_MODE (TREE_TYPE (exp)));
/* Map the arguments to the other operands. The n_operands value
for an expander includes match_dups and match_scratches as well as
match_operands, so n_operands is only an upper bound on the number
of arguments to the expander function. */
gcc_assert (opno + call_expr_nargs (exp) <= insn_data[icode].n_operands);
/* Map the arguments to the other operands. */
gcc_assert (opno + call_expr_nargs (exp)
== insn_data[icode].n_generator_args);
for (argno = 0; argno < call_expr_nargs (exp); argno++)
mips_prepare_builtin_arg (&ops[opno++], exp, argno);

View File

@ -6545,9 +6545,7 @@ expand_builtin_args (struct spu_builtin_description *d, tree exp,
ops[i] = expand_expr (arg, NULL_RTX, VOIDmode, EXPAND_NORMAL);
}
/* The insn pattern may have additional operands (SCRATCH).
Return the number of actual non-SCRATCH operands. */
gcc_assert (i <= insn_data[icode].n_operands);
gcc_assert (i == insn_data[icode].n_generator_args);
return i;
}

View File

@ -1293,11 +1293,8 @@ emit_block_move_via_movmem (rtx x, rtx y, rtx size, unsigned int align,
nice if there were some way to inform the backend, so
that it doesn't fail the expansion because it thinks
emitting the libcall would be more efficient. */
nops = insn_data[(int) code].n_operands;
/* ??? n_operands includes match_scratches; find some other
way to select the 6 operand variant, or force all targets
to have exactly 6 operands. */
gcc_assert (nops >= 4 && nops <= 6);
nops = insn_data[(int) code].n_generator_args;
gcc_assert (nops == 4 || nops == 6);
create_fixed_operand (&ops[0], x);
create_fixed_operand (&ops[1], y);
@ -2719,11 +2716,8 @@ set_storage_via_setmem (rtx object, rtx size, rtx val, unsigned int align,
struct expand_operand ops[6];
unsigned int nops;
nops = insn_data[(int) code].n_operands;
/* ??? n_operands includes match_scratches; find some other
way to select the 6 operand variant, or force all targets
to have exactly 6 operands. */
gcc_assert (nops >= 4 && nops <= 6);
nops = insn_data[(int) code].n_generator_args;
gcc_assert (nops == 4 || nops == 6);
create_fixed_operand (&ops[0], object);
/* The check above guarantees that this size conversion is valid. */

View File

@ -7118,9 +7118,7 @@ rtx
maybe_gen_insn (enum insn_code icode, unsigned int nops,
struct expand_operand *ops)
{
/* n_operands includes any automatically-generated match_scratches,
so we can't check for equality here. */
gcc_assert (nops <= (unsigned int) insn_data[(int) icode].n_operands);
gcc_assert (nops == (unsigned int) insn_data[(int) icode].n_generator_args);
if (!maybe_legitimize_operands (icode, 0, nops, ops))
return NULL_RTX;