> Omar Tahir <omar.ta...@arm.com> writes: > > Hi Richard, > > > > From: Richard Sandiford <richard.sandif...@arm.com> > >> > @@ -3719,6 +3722,7 @@ static unsigned int rest_of_handle_sched (void) > >> > { #ifdef INSN_SCHEDULING > >> > + first_moveable_pseudo = last_moveable_pseudo; > >> > if (flag_selective_scheduling > >> > && ! maybe_skip_selective_scheduling ()) > >> > run_selective_scheduling (); > >> > >> I think instead we should zero out both variables at the end of IRA. > >> There are other places besides the scheduler that call into the IRA code, > >> so tackling the problem there seems more general. > > > > If you zero first_moveable_pseudo and last_moveable_pseudo after IRA then > > they'll be zero for the second scheduler pass, which uses them. > > Are you sure? It shouldn't be doing that, since there are no pseudos > left when the second scheduling pass runs. RA replaces all pseudos > with hard registers. > > So if the values in the variables has a noticeable effect on sched2, > I think that's even more reason to clear them after IRA :-)
That's a good point. A few other passes call functions that make use of the moveable pseudo variables. But if they're before IRA then they should be zero, and as you say if they're after IRA then there are no pseudos left! I've moved the reset to the end of move_unallocated_pseudos. Unfortunately I can't inline the patch as there's a form feed (^L) that's mangling the text, not sure how to get around that. Thanks, Omar ---- gcc/ChangeLog: 2020-07-02: Omar Tahir <omar.ta...@arm.com> * ira.c (move_unallocated_pseudos): Zero first_moveable_pseudo and last_moveable_pseudo before returning. gcc/testsuite/ChangeLog: 2020-07-02: Omar Tahir <omar.ta...@arm.com> * gcc.target/aarch64/nospill.c: New test.
moveable_pseudo.patch
Description: moveable_pseudo.patch