On 05/31/2018 04:39 AM, Alan Hayward wrote: > (Missed this thread initially due to incorrect email address) Sorry. Good to hear your're still interested in figuring this out.
> >> On 29 May 2018, at 11:05, Richard Sandiford <richard.sandif...@linaro.org> >> wrote: >> >> Jeff Law <l...@redhat.com> writes: >>> Now that we're in stage1 I do want to revisit the CLOBBER_HIGH stuff. >>> When we left things I think we were trying to decide between >>> CLOBBER_HIGH and clobbering the appropriate subreg. The problem with >>> the latter is the dataflow we compute is inaccurate (overly pessimistic) >>> so that'd have to be fixed. > > Yes, I want to get back to looking at this again, however I’ve been busy > elsewhere. Similarly. > >> >> The clobbered part of the register in this case is a high-part subreg, >> which is ill-formed for single registers. It would also be difficult >> to represent in terms of the mode, since there are no defined modes for >> what can be stored in the high part of an SVE register. For 128-bit >> SVE that mode would have zero bits. :-) >> >> I thought the alternative suggestion was instead to have: >> >> (set (reg:M X) (reg:M X)) >> >> when X is preserved in mode M but not in wider modes. But that seems >> like too much of a special case to me, both in terms of the source and >> the destination: > > Agreed. When I looked at doing it that way back in Jan, my conclusion was > that if we did it that way we end up with more or less the same code but > instead of: > > if (GET_CODE (setter) == CLOBBER_HIGH > && reg_is_clobbered_by_clobber_high(REGNO(dest), GET_MODE > (rsp->last_set_value)) > > Now becomes something like: > > if (GET_CODE (setter) == SET > && REG_P (dest) && HARD_REGISTER_P (dest) && REG_P (src) && REGNO(dst) == > REGNO(src) > && reg_is_clobbered_by_self_set(REGNO(dest), GET_MODE > (rsp->last_set_value)) > > Ok, some of that code can go into a macro, but it feel much clearer to > explicitly check for CLOBBER_HIGH rather then applying some special semantics > to a specific SET case. Then let's return to the CLOBBER_HIGH approach. The hope was that most of the places where you had to introduce CLOBBER_HIGH would "just work" with the self-set approach. If that's not the case, then there's really nothing to be gained with self-set. I suggest you get the patch updated for the trunk and repost now that we're in broad agreement that self-set is a rathole. jeff