Vladimir Makarov <[email protected]> writes:
> Index: ira.c
> ===================================================================
> --- ira.c     (revision 257157)
> +++ ira.c     (working copy)
> @@ -1578,7 +1578,8 @@ ira_init_register_move_cost (machine_mod
>    ira_assert (ira_register_move_cost[mode] == NULL
>             && ira_may_move_in_cost[mode] == NULL
>             && ira_may_move_out_cost[mode] == NULL);
> -  ira_assert (have_regs_of_mode[mode]);
> +  /* have_regs_of_mode[mode] might be false because it might be
> +     E_<mode> (see genmodes) of pseudo with <mode>.  */

Not sure about the E_<mode>/genmodes reference here.  Isn't it simply
"because it might be the mode a pseudo register"?

Is it OK to expand the explanation a bit, as below?

Richard


2018-02-01  Richard Sandiford  <[email protected]>

gcc/
        * ira.c (ira_init_register_move_cost): Adjust comment.

Index: gcc/ira.c
===================================================================
--- gcc/ira.c   2018-02-01 17:09:45.998165072 +0000
+++ gcc/ira.c   2018-02-01 17:09:46.150158481 +0000
@@ -1578,8 +1578,10 @@ ira_init_register_move_cost (machine_mod
   ira_assert (ira_register_move_cost[mode] == NULL
              && ira_may_move_in_cost[mode] == NULL
              && ira_may_move_out_cost[mode] == NULL);
-  /* have_regs_of_mode[mode] might be false because it might be
-     E_<mode> (see genmodes) of pseudo with <mode>.  */
+  /* Note that we might be asked about the move costs of modes that
+     cannot be stored in any hard register, for example if an inline
+     asm tries to create a register operand with an impossible mode.
+     We therefore can't assert have_regs_of_mode[mode] here.  */
   for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++)
     for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++)
       {

Reply via email to