Message ID | 540c9fcb-948b-f4b9-2561-033513db8219@redhat.com |
---|---|
State | New |
Headers | show |
Series | patch for PR82444 | expand |
Vladimir Makarov <vmakarov@redhat.com> 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 <richard.sandiford@linaro.org> 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++) {
On 02/01/2018 12:10 PM, Richard Sandiford wrote: > Vladimir Makarov <vmakarov@redhat.com> writes: > 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? > Yes, it is OK. It is a better explanation. Thank you, Richard. > 2018-02-01 Richard Sandiford <richard.sandiford@linaro.org> > > 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++) > {
Index: ChangeLog =================================================================== --- ChangeLog (revision 257252) +++ ChangeLog (working copy) @@ -1,3 +1,8 @@ +2018-01-31 Vladimir Makarov <vmakarov@redhat.com> + + PR target/82444 + * ira.c (ira_init_register_move_cost): Remove assert. + 2018-01-31 Eric Botcazou <ebotcazou@adacore.com> PR rtl-optimization/84071 Index: testsuite/ChangeLog =================================================================== --- testsuite/ChangeLog (revision 257252) +++ testsuite/ChangeLog (working copy) @@ -1,3 +1,8 @@ +2018-01-31 Vladimir Makarov <vmakarov@redhat.com> + + PR target/82444 + * gcc.target/i386/pr82444.c: New. + 2018-01-31 Paolo Carlini <paolo.carlini@oracle.com> PR c++/84092 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>. */ for (cl1 = 0; cl1 < N_REG_CLASSES; cl1++) for (cl2 = 0; cl2 < N_REG_CLASSES; cl2++) { Index: testsuite/gcc.target/i386/pr82444.c =================================================================== --- testsuite/gcc.target/i386/pr82444.c (nonexistent) +++ testsuite/gcc.target/i386/pr82444.c (working copy) @@ -0,0 +1,5 @@ +/* { dg-do compile { target { ia32 } } } */ +/* { dg-options "-march=athlon" } */ + +__float128 a; +void b () { __asm__("" : "+r"(a)); } /* { dg-error "inconsistent operand constraints in an" } */