2019-04-27 Uroš Bizjak <ubiz...@gmail.com> PR target/89261 * config/i386/i386-protos.h (ix86_data_alignment): Change the second argument type to unsigned int. * config/i386/i386.c (ix86_data_alignment): Change "align" argument type to unsigned int.
testsuite/ChangeLog: 2019-04-27 Uroš Bizjak <ubiz...@gmail.com> PR target/89261 * gcc.target/i386/pr89261.c: New test. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Committed to mainline SVN. Uros.
Index: config/i386/i386-protos.h =================================================================== --- config/i386/i386-protos.h (revision 270607) +++ config/i386/i386-protos.h (working copy) @@ -207,7 +207,7 @@ extern void init_cumulative_args (CUMULATIVE_ARGS #endif /* RTX_CODE */ #ifdef TREE_CODE -extern int ix86_data_alignment (tree, int, bool); +extern int ix86_data_alignment (tree, unsigned int, bool); extern unsigned int ix86_local_alignment (tree, machine_mode, unsigned int); extern unsigned int ix86_minimum_alignment (tree, machine_mode, Index: config/i386/i386.c =================================================================== --- config/i386/i386.c (revision 270607) +++ config/i386/i386.c (working copy) @@ -29802,7 +29802,7 @@ iamcu_alignment (tree type, int align) instead of that alignment to align the object. */ int -ix86_data_alignment (tree type, int align, bool opt) +ix86_data_alignment (tree type, unsigned int align, bool opt) { /* GCC 4.8 and earlier used to incorrectly assume this alignment even for symbols from other compilation units or symbols that don't need @@ -29810,7 +29810,7 @@ int those compilers, ensure we don't decrease alignment from what we used to assume. */ - int max_align_compat = MIN (256, MAX_OFILE_ALIGNMENT); + unsigned int max_align_compat = MIN (256, MAX_OFILE_ALIGNMENT); /* A data structure, equal or greater than the size of a cache line (64 bytes in the Pentium 4 and other recent Intel processors, including @@ -29817,7 +29817,7 @@ int processors based on Intel Core microarchitecture) should be aligned so that its base address is a multiple of a cache line size. */ - int max_align + unsigned int max_align = MIN ((unsigned) ix86_tune_cost->prefetch_block * 8, MAX_OFILE_ALIGNMENT); if (max_align < BITS_PER_WORD) Index: testsuite/gcc.target/i386/pr89261.c =================================================================== --- testsuite/gcc.target/i386/pr89261.c (nonexistent) +++ testsuite/gcc.target/i386/pr89261.c (working copy) @@ -0,0 +1,9 @@ +/* PR target/89261 */ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +typedef double __v2df __attribute__ ((__vector_size__ (16), aligned(1 << 28))); + +__v2df foo = { 1.0, 2.0 }; + +/* { dg-final { scan-assembler "\.align\[ \t]+268435456" } } */