https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57955

--- Comment #24 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Just to summarize this bug as far as I read it, please correct me if I am
wrong; note I am not proposing a change, just trying to summarize the back and
forth since it is not obvious right away of what the problem was.

This was the testcase:
 void foo(void)
 {
  int x[8] __attribute__((aligned(128))) = { 1, 1, 1, 1, 1, 1, 1, 1 };
  bar (x);
 }

Before the gimplification change the initializer {1,....} was promoted to a
static const and given an alignment of 128; due to this part of the code:

                if (align > DECL_ALIGN (new_tree))
                  {
                    DECL_ALIGN (new_tree) = align;
                    DECL_USER_ALIGN (new_tree) = 1;
                  }

But now it just uses DATA_ALIGNMENT (the code should be using
TARGET_CONSTANT_ALIGNMENT but does not right now, that was a proposal).

rs6000_constant_alignment (TARGET_CONSTANT_ALIGNMENT) only aligns strings csts
to word (32 or 64) aligned. rs6000_data_alignment (DATA_ALIGNMENT) only aligns
vectors to 128 and char arrays to word (32 or 64) align.

Reply via email to