On Tue, Feb 2, 2016 at 5:55 AM, Ilya Enkovich <enkovich....@gmail.com> wrote:
> 2016-02-02 16:25 GMT+03:00 H.J. Lu <hjl.to...@gmail.com>:
>> On Tue, Feb 2, 2016 at 5:21 AM, Ilya Enkovich <enkovich....@gmail.com> wrote:
>>> 2016-02-02 16:14 GMT+03:00 H.J. Lu <hjl.to...@gmail.com>:
>>>> On Tue, Feb 2, 2016 at 5:11 AM, Ilya Enkovich <enkovich....@gmail.com> 
>>>> wrote:
>>>>> 2016-02-02 16:06 GMT+03:00 H.J. Lu <hjl.to...@gmail.com>:
>>>>>> On Tue, Feb 2, 2016 at 5:03 AM, Ilya Enkovich <enkovich....@gmail.com> 
>>>>>> wrote:
>>>>>>> 2016-02-02 15:46 GMT+03:00 H.J. Lu <hjl.to...@gmail.com>:
>>>>>>>> On Tue, Feb 2, 2016 at 4:30 AM, H.J. Lu <hjl.to...@gmail.com> wrote:
>>>>>>>>> On Tue, Feb 2, 2016 at 4:29 AM, Jakub Jelinek <ja...@redhat.com> 
>>>>>>>>> wrote:
>>>>>>>>>> On Tue, Feb 02, 2016 at 01:24:26PM +0100, Uros Bizjak wrote:
>>>>>>>>>>> On Tue, Feb 2, 2016 at 12:53 PM, Jakub Jelinek <ja...@redhat.com> 
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>> >> The bottom line is  ix86_minimum_alignment must return the 
>>>>>>>>>>> >> correct
>>>>>>>>>>> >> number for DImode or you can just turn off STV.   My suggestion 
>>>>>>>>>>> >> is
>>>>>>>>>>> >> to use my patch.
>>>>>>>>>>> >
>>>>>>>>>>> > Uros, any preferences here?  I mean, it is possible to use
>>>>>>>>>>> > e.g. the ix86_option_override_internal and have H.J's 
>>>>>>>>>>> > ix86_minimum_alignment
>>>>>>>>>>> > change as a safety net, in the usual case for 
>>>>>>>>>>> > -mpreferred-stack-boundary=2
>>>>>>>>>>> > we'll just disable TARGET_STV and ix86_minimum_alignment change 
>>>>>>>>>>> > won't do
>>>>>>>>>>> > anything, as TARGET_STV will be false, and if for whatever case 
>>>>>>>>>>> > it gets
>>>>>>>>>>> > through (target attribute, -mincoming-stack-boundary=, ...)
>>>>>>>>>>> > ix86_minimum_alignment will be there to ensure enough stack 
>>>>>>>>>>> > alignment.
>>>>>>>>>>> > Most of the smaller -mpreferred-stack-boundary= uses are -mno-sse 
>>>>>>>>>>> > anyway,
>>>>>>>>>>> > and that is something we don't want to affect.
>>>>>>>>>>>
>>>>>>>>>>> IMO, we should disable STV when -mpreferred-stack-boundary < 3, as 
>>>>>>>>>>> STV
>>>>>>>>>>> is only an optimization. Perhaps we can also emit a "sorry" for
>>>>>>>>>>> explicit -mstv in case stack boundary requirement is not satisfied.
>>>>>>>>>>> *If* there is a need for -mstv with smaller stack boundary, we can
>>>>>>>>>>> revisit this decision for later gcc versions.
>>>>>>>>>>>
>>>>>>>>>>> I think disabling STV is less surprising option than increasing 
>>>>>>>>>>> stack
>>>>>>>>>>> boundary behind the user's back.
>>>>>>>>>>
>>>>>>>>>> So, is http://gcc.gnu.org/ml/gcc-patches/2016-01/msg02129.html
>>>>>>>>>> ok for trunk then (alone or with additional sorry, incremental or 
>>>>>>>>>> not?)?
>>>>>>>>>> I believe it does just that.
>>>>>>>>>
>>>>>>>>> This patch is WRONG.
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> H.J.
>>>>>>>>
>>>>>>>> You will run into the same ICE with
>>>>>>>>
>>>>>>>> -mincoming-stack-boundary=2 -msse2 -O2 -m32
>>>>>>>>
>>>>>>>> in a leaf function which needs DImode spill/fill.
>>>>>>>
>>>>>>> Why would we need DImode spill/fill having no DImode registers?
>>>>>>>
>>>>>>
>>>>>> Because STV is enabled with
>>>>>>
>>>>>>  -mincoming-stack-boundary=2 -msse2 -O2 -m32
>>>>>
>>>>> I misread it as -mpreferred-... So why would we fail having a proper
>>>>> preferred stack alignment? AFAIK leaf function doesn't affect
>>>>> alignment until we finalize it after RA.
>>>>>
>>>>
>>>> /* Finalize stack_realign_needed flag, which will guide prologue/epilogue
>>>>    to be generated in correct form.  */
>>>> static void
>>>> ix86_finalize_stack_realign_flags (void)
>>>> {
>>>>   /* Check if stack realign is really needed after reload, and
>>>>      stores result in cfun */
>>>>   unsigned int incoming_stack_boundary
>>>>     = (crtl->parm_stack_boundary > ix86_incoming_stack_boundary
>>>>        ? crtl->parm_stack_boundary : ix86_incoming_stack_boundary);
>>>>   unsigned int stack_realign
>>>>     = (incoming_stack_boundary
>>>>        < (crtl->is_leaf && !ix86_current_function_calls_tls_descriptor
>>>>           ? crtl->max_used_stack_slot_alignment
>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>> We call it after RA when all spill slots are allocated and check if we
>>> may relax stack alignment. Don't see any problem here.
>>
>> Please see
>>
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69454#c26
>>
>> Why did LRA crash then?
>
> Because it tries a patch [1] which doesn't fix stack alignment and STV
> enabling and therefore doesn't resolve the problem when
> -mpreferred-stack-boundary=2 is used.
>

No, it is because RA doesn't increase stack alignment.  You have to
have the correct stack alignment requirement before entering RA.


-- 
H.J.

Reply via email to