===================================================================
@@ -1293,11 +1293,8 @@ emit_block_move_via_movmem (rtx x, rtx y
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
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. */
===================================================================
@@ -7149,9 +7149,7 @@ maybe_legitimize_operands (enum insn_cod
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;
===================================================================
@@ -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
/* 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_co
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_
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;
}