Message ID | 5314FA90.6010807@linaro.org |
---|---|
State | Superseded |
Headers | show |
Ping ? > > > gcc/ > > 2014-03-03 Kugan Vivekanandarajah <kuganv@linaro.org> > > PR target/60034 > * aarch64/aarch64.c (aarch64_classify_address): Fix alignment for > section anchor. > > > > gcc/testsuite/ > > 2014-03-03 Kugan Vivekanandarajah <kuganv@linaro.org> > > PR target/60034 > * gcc.target/aarch64/pr60034.c: New file. >
Hi Kugan On 3 March 2014 21:56, Kugan <kugan.vivekanandarajah@linaro.org> wrote: > gcc/ > > 2014-03-03 Kugan Vivekanandarajah <kuganv@linaro.org> > > PR target/60034 > * aarch64/aarch64.c (aarch64_classify_address): Fix alignment for > section anchor. > > > > gcc/testsuite/ > > 2014-03-03 Kugan Vivekanandarajah <kuganv@linaro.org> > > PR target/60034 > * gcc.target/aarch64/pr60034.c: New file. > + else if (SYMBOL_REF_HAS_BLOCK_INFO_P (sym) This test makes sense. + && SYMBOL_REF_ANCHOR_P (sym) Do we need this test or is the patch being conservative? I would have thought that it is sufficient to drop this test and just take the block alignment... + && SYMBOL_REF_BLOCK (sym) != NULL) + align = SYMBOL_REF_BLOCK (sym)->alignment; +/* { dg-options "-std=gnu99 -fgnu89-inline -O -Wall -Winline -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wstrict-prototypes" } */ Can you drop all the options that are not actually required to reproduce the issue? Cheers /Marcus
On 12/03/14 20:07, Marcus Shawcroft wrote: > Hi Kugan > > > On 3 March 2014 21:56, Kugan <kugan.vivekanandarajah@linaro.org> wrote: > >> gcc/ >> >> 2014-03-03 Kugan Vivekanandarajah <kuganv@linaro.org> >> >> PR target/60034 >> * aarch64/aarch64.c (aarch64_classify_address): Fix alignment for >> section anchor. >> >> >> >> gcc/testsuite/ >> >> 2014-03-03 Kugan Vivekanandarajah <kuganv@linaro.org> >> >> PR target/60034 >> * gcc.target/aarch64/pr60034.c: New file. >> > > + else if (SYMBOL_REF_HAS_BLOCK_INFO_P (sym) > > This test makes sense. > > + && SYMBOL_REF_ANCHOR_P (sym) > > Do we need this test or is the patch being conservative? I would > have thought that it is sufficient to drop this test and just take the > block alignment... > Thanks for the review. If I understand gcc/rtl.h correctly, SYMBOL_REF_ANCHOR_P (sym) is required for anchor SYMBOL_REFS. SYMBOL_REF_BLOCK (sym) != NULL is probably redundant. This can probably become an gcc_assert (SYMBOL_REF_BLOCK (sym)) instead. > + && SYMBOL_REF_BLOCK (sym) != NULL) > + align = SYMBOL_REF_BLOCK (sym)->alignment; > > +/* { dg-options "-std=gnu99 -fgnu89-inline -O -Wall -Winline > -Wwrite-strings -fmerge-all-constants -frounding-math -g > -Wstrict-prototypes" } */ > > Can you drop all the options that are not actually required to > reproduce the issue? I will change it. Thanks, Kugan
>> + else if (SYMBOL_REF_HAS_BLOCK_INFO_P (sym) >> >> This test makes sense. >> >> + && SYMBOL_REF_ANCHOR_P (sym) >> >> Do we need this test or is the patch being conservative? I would >> have thought that it is sufficient to drop this test and just take the >> block alignment... >> > Thanks for the review. > > If I understand gcc/rtl.h correctly, SYMBOL_REF_ANCHOR_P (sym) is > required for anchor SYMBOL_REFS. SYMBOL_REF_BLOCK (sym) != NULL is > probably redundant. This can probably become an gcc_assert > (SYMBOL_REF_BLOCK (sym)) instead. I agree with your interpretation of the code and comments in rtl.h. I also accept that SYMBOL_REF_ANCHOR_P() is sufficient to resolve the test case. However I'm wondering why we need to constraint the test down to SYMBOL_REF_ANCHOR_P(). At this point in the code we are trying to find alignment of the object, if we have a SYMBOL_REF_BLOCK then we can get the block alignment irrespective of SYMBOL_REF_ANCHOR_P(). Cheers /Marcus
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 901ad3d..d2a9217 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -3199,6 +3199,10 @@ aarch64_classify_address (struct aarch64_address_info *info, } else if (SYMBOL_REF_DECL (sym)) align = DECL_ALIGN (SYMBOL_REF_DECL (sym)); + else if (SYMBOL_REF_HAS_BLOCK_INFO_P (sym) + && SYMBOL_REF_ANCHOR_P (sym) + && SYMBOL_REF_BLOCK (sym) != NULL) + align = SYMBOL_REF_BLOCK (sym)->alignment; else align = BITS_PER_UNIT; diff --git a/gcc/testsuite/gcc.target/aarch64/pr60034.c b/gcc/testsuite/gcc.target/aarch64/pr60034.c index e69de29..d126779 100644 --- a/gcc/testsuite/gcc.target/aarch64/pr60034.c +++ b/gcc/testsuite/gcc.target/aarch64/pr60034.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-std=gnu99 -fgnu89-inline -O -Wall -Winline -Wwrite-strings -fmerge-all-constants -frounding-math -g -Wstrict-prototypes" } */ + +static unsigned long global_max_fast; + +void __libc_mallopt (int param_number, int value) +{ + __asm__ __volatile__ ("# %[_SDT_A21]" :: [_SDT_A21] "nr" ((global_max_fast))); + global_max_fast = 1; +}