"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: http://gcc.gnu.org/ml/gcc-patches/2013-12/msg00824.html for the longer version. Thanks, Richard