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:
parent
b29387eec6
commit
f04713eea7
6 changed files with 22 additions and 23 deletions
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
14
gcc/expr.c
14
gcc/expr.c
|
@ -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. */
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue