Hello Eric,
On 02 Jan 00:07, Eric Botcazou wrote:
> The change is actually to ix86_data_alignment, not to ix86_constant_alignment:
> 
> @@ -26219,7 +26433,8 @@ ix86_constant_alignment (tree exp, int align)
>  int
>  ix86_data_alignment (tree type, int align, bool opt)
>  {
> -  int max_align = optimize_size ? BITS_PER_WORD : MIN (256, 
> MAX_OFILE_ALIGNMENT);
> +  int max_align = optimize_size ? BITS_PER_WORD
> +                               : MIN (512, MAX_OFILE_ALIGNMENT);
>  
>    if (opt
>        && AGGREGATE_TYPE_P (type)
> Note that it has unexpected side-effects: previously, in 32-bit mode, 256-bit 
> aggregate objects would have been given 256-bit alignment; now, they will fall
> back to default alignment, for example 32-bit only.
Frankly speaking, I do not understand, what's wrong here.
IMHO, this change is pretty mechanical: we just extend maximal aligment 
available.
Because of 512-bit data types we now extend maximal aligment to 512 bits.

I suspect that an issue is here:
  if (opt
      && AGGREGATE_TYPE_P (type)
      && TYPE_SIZE (type)
      && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST
      && (TREE_INT_CST_LOW (TYPE_SIZE (type)) >= (unsigned) max_align
          || TREE_INT_CST_HIGH (TYPE_SIZE (type)))
      && align < max_align)
    align = max_align;

Maybe we can split it and handle 256-bit aggregates separately?

--
Thanks, K

Reply via email to