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