"H.J. Lu" <hjl.to...@gmail.com> writes: > On Tue, Dec 10, 2013 at 9:57 AM, Richard Sandiford > <rdsandif...@googlemail.com> wrote: >> "H.J. Lu" <hjl.to...@gmail.com> writes: >>> On Tue, Dec 10, 2013 at 8:05 AM, Kirill Yukhin >>> <kirill.yuk...@gmail.com> wrote: >>>> On 09 Dec 14:08, H.J. Lu wrote: >>>>> >>>>> There are no regressions on Linux/x86-64 with -m32 and -m64. >>>>> Can you check if it improves code quality on x886? >>>> >>>> As second thought. If Tejas and Richard are right and it is simply >>>> incorrect >>>> to check any offsets in this hook, may be we can end up with patch in the >>>> bottom? >>> >>> What is wrong to pass the correct offset to >>> CANNOT_CHANGE_MODE_CLASS? Backends are free to >>> ignore it. >> >> The point is that: >> >>>> - /* Vector registers do not support subreg with nonzero offsets, >>>> which >>>> - are otherwise valid for integer registers. Since we can't see >>>> - whether we have a nonzero offset from here, prohibit all >>>> - nonparadoxical subregs changing size. */ >>>> - if (GET_MODE_SIZE (to) < GET_MODE_SIZE (from)) >>>> - return true; >> >> seems to be trying to reject things like (subreg:SF (reg:V4SF X) 1), >> which is always invalid for a single-register V4SF. See: > > That is correct.
Sorry, what I mean is: that subreg is always invalid for single- register V4SFs regardless of the target. This isn't something that CANNOT_CHANGE_MODE_CLASS should be expected to check. Thanks, Richard