PATCH: PR target/40838: gcc shouldn't assume that the stack is aligned

Richard Guenther richard.guenther@gmail.com
Sat Oct 17 19:02:00 GMT 2009


On Sat, Oct 17, 2009 at 8:14 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Fri, Oct 16, 2009 at 5:59 PM, Ian Lance Taylor <iant@google.com> wrote:
>> "H.J. Lu" <hjl.tools@gmail.com> writes:
>>
>>> @@ -947,6 +949,12 @@ vect_verify_datarefs_alignment (loop_vec_info loop_vinfo, bb_vec_info bb_vinfo)
>>>              }
>>>            return false;
>>>          }
>>> +
>>> +      mode = TYPE_MODE (STMT_VINFO_VECTYPE (stmt_info));
>>> +      align = GET_MODE_ALIGNMENT (mode);
>>> +      if (cfun->hard_stack_alignment < align)
>>> +     cfun->hard_stack_alignment = align;
>>> +
>>>        if (supportable_dr_alignment != dr_aligned
>>>            && vect_print_dump_info (REPORT_ALIGNMENT))
>>>          fprintf (vect_dump, "Vectorizing an unaligned access.");
>>
>> I do not understand why this is the right place to set your new cfun
>> field.  Your patch is about a misaligned stack.  The code you are
>> changing here does not appear to have anything to do with a misaligned
>> stack.  This code is about the correct alignment of data.  The data
>> may be on the stack but it need not be.  If the data is on the stack,
>> then the compiler should be able to determine the alignment available
>> on the stack.
>
> The issue here is to set proper incoming stack alignment. We have
> to do it before RTL expansion which uses this information to check
> if stack alignment is needed. To do that, we need to know what the
> minimum stack alignment required by hardware. We collect hard
> stack alignment when we put variables on stack and check the alignment
> generated by vectorizer.

It's surely not the right function to do this.  Nor is it a proper
interface IMHO.
Why don't you need to check whether the access is to stack memory at all?

I think you want to instead see if any user-alignment on automatic
variables requires stack realignment.  Thus, wherever the vectorizer
sets DECL_USER_ALIGN on automatic storage.

Richard.



More information about the Gcc-patches mailing list