On Tue, Dec 10, 2013 at 10:26 AM, Richard Sandiford
<rdsandif...@googlemail.com> wrote:
> "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.
>

Why is

(define_insn "*movv4sfdi_subreg"
 [(set (match_operand:DI 0 "nonimmediate_operand"           "=rxm")
       (subreg:DI (match_operand:V4SF 1 "register_operand" "x") 0))]

invalid?  It can be used in libffi.call/struct8.c.  hjl/subreg branch
generates

movq    %xmm0, %xmm0    # 39    *movv4sfdi_subreg    [length = 4]

instead of

movq    -56(%rsp), %xmm0    # 44    *movdi_internal/15    [length = 7]

both clears upper 64 bits in %xmm0.

-- 
H.J.

Reply via email to