On Wed, 20 Nov 2019, Alexander Monakov wrote: > On Wed, 20 Nov 2019, Richard Biener wrote: > > > On Tue, Nov 19, 2019 at 5:07 PM Vladimir Makarov <vmaka...@redhat.com> > > wrote: > > > > > > The following patch fixes > > > > > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90007 > > > > > > Sometime ago a code which permits LRA to reload hard register into > > > memory as it did for pseudo were added. But this LRA possibility was > > > not reflected in recog.c. The following patch fixes this discrepancy > > > and as a result fixes PR90007. > > > > > > OK to commit? > > > > I guess the change is OK but for the bug itself it sounds like > > selective scheduling doesn't properly recognize insns it > > proagates into (and avoids doing that then)? That is, > > selective scheduling creates invalid RTL? > > We validate the substitution by invoking validate_replace_rtx_part_nosimplify > from substitute_reg_in_expr. I think that should be sufficient? I see > similar > code in haifa-sched uses attempt_change, which also ultimately uses > apply_change_group.
Although looking at this more, I see that we specifically arrange for a call to constrain_operands in replace_src_with_reg_ok_p (with a comment), but here in substitute_reg_in_expr we have a '???' comment that seems to mention that theoretically there might be a problem, but it never came up in practice. So there's an inconsistency in sel-sched as well. Alexander