expr.c (emit_block_move_via_movmem): Use n_generator_args instead of n_operands.
authorRichard Sandiford <richard.sandiford@linaro.org>
Fri, 1 Apr 2011 08:19:13 +0000 (08:19 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Fri, 1 Apr 2011 08:19:13 +0000 (08:19 +0000)
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

gcc/ChangeLog
gcc/config/arm/arm.c
gcc/config/mips/mips.c
gcc/config/spu/spu.c
gcc/expr.c
gcc/optabs.c

index 32ad1daad55e5dacc1380fa517656628e96e528b..c38662ab245a7b7d83895873cb9ade40c3a38646 100644 (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.
index 56dc85ea4b8537bfa6ad0f09011098ca4a612e1a..4fee4dafa0274a6ab170005a2d3d4fcec31b52d0 100644 (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;
 
index 643e507fddfc7407ef04236ec6888360769758c4..74c7ba56d059ccb28acca82226b17a1b2c20aa87 100644 (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);
 
index 46bc586c2c75dac0ebd4cb01fdf2fcaf715a5e98..8a5928b6638bdf975e6752ab304bf1a44868408b 100644 (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;
 }
 
index ca61804068049889d8a305a43bcddd59e0da684d..4cbb09b0a457ffe02ce9096739f1f9690ab52430 100644 (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.  */
index e60abf83255b06348f37f972ee3ad826e50d8c9d..682b8e40f7c6bd4f9964e388cac46ef227bb9af6 100644 (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;