* [doc PATCH] document when GCC ignores attribute aligned
@ 2018-12-04 3:23 Martin Sebor
2018-12-04 7:20 ` Sandra Loosemore
0 siblings, 1 reply; 3+ messages in thread
From: Martin Sebor @ 2018-12-04 3:23 UTC (permalink / raw)
To: Jeff Law, Gcc Patch List
[-- Attachment #1: Type: text/plain, Size: 571 bytes --]
Last week we agreed to clarify that attribute aligned on a function
can decrease its alignment if it hasn't been previously declared
with one. Attached is this change.
Besides the above, I also mention that the attribute specifies
the alignment of the first instruction of the function (in case
that wasn't obvious) , and that it has no effect in the absence
of a definition.
I wrote some tests to convince myself this actually works as
I expected. Where it does I add those tests to the testsuite
via this patch. Where it doesn't I opened a bug (PR 88345).
Martin
[-- Attachment #2: gcc-doc-attr-func-align.diff --]
[-- Type: text/x-patch, Size: 3912 bytes --]
gcc/ChangeLog:
* doc/extend.texi (attribute aligned): Expand.
gcc/testsuite/ChangeLog:
* gcc.target/i386/attr-aligned-2.c: New test.
* gcc.target/i386/falign-functions-3.c: New test.
Index: gcc/doc/extend.texi
===================================================================
--- gcc/doc/extend.texi (revision 266766)
+++ gcc/doc/extend.texi (working copy)
@@ -2386,16 +2386,20 @@ and may not be available on all targets.
@itemx aligned (@var{alignment})
@cindex @code{aligned} function attribute
The @code{aligned} attribute specifies a minimum alignment for
-the function, measured in bytes. When specified, @var{alignment} must
-be an integer constant power of 2. Specifying no @var{alignment} argument
-implies the maximum alignment for the target, which is often, but by no
-means always, 8 or 16 bytes.
+the first instruction of the function, measured in bytes. When specified,
+@var{alignment} must be an integer constant power of 2. Specifying no
+@var{alignment} argument implies the ideal alignment for the target,
+which is often, but by no means always, 8 or 16 bytes. The attribute
+has no effect when a definition for the function is not provided in
+the same translation unit.
-You cannot use this attribute to decrease the alignment of a function,
-only to increase it. However, when you explicitly specify a function
-alignment this overrides the effect of the
-@option{-falign-functions} (@pxref{Optimize Options}) option for this
-function.
+The attribute cannot be used to decrease the alignment of a function
+previously declared with a more restrictive alignment; only to increase
+it. Attempts to do otherwise are diagnosed. Some targets specify
+a minimum default alignment for functions that is greater than 1. On
+such targets, specifying a less restrictive alignment is silently ignored.
+Using the attribute overrides the effect of the @option{-falign-functions}
+(@pxref{Optimize Options}) option for this function.
Note that the effectiveness of @code{aligned} attributes may be
limited by inherent limitations in the system linker
Index: gcc/testsuite/gcc.target/i386/attr-aligned-2.c
===================================================================
--- gcc/testsuite/gcc.target/i386/attr-aligned-2.c (nonexistent)
+++ gcc/testsuite/gcc.target/i386/attr-aligned-2.c (working copy)
@@ -0,0 +1,28 @@
+/* Verify that valid alignment on either a function declaration
+ or a definition has the expected effect and overrides -Os.
+ { dg-do compile }
+ { dg-options "-Os" } */
+
+#define ALIGN(n) __attribute__ ((aligned (n)))
+
+/* No alignment specified (to cause the subsequent instruction
+ to be at an odd boundary due to -Os). */
+void f (void) { }
+
+void f4 (void);
+
+ALIGN (4)
+void f4 (void) { }
+
+/* { dg-final { scan-assembler ".align 4\n\t.globl\tf4" } } */
+
+
+void g (void) { }
+
+
+ALIGN (4)
+void g4 (void);
+
+void g4 (void) { }
+
+/* { dg-final { scan-assembler ".align 4\n\t.globl\tg4" } } */
Index: gcc/testsuite/gcc.target/i386/falign-functions-3.c
===================================================================
--- gcc/testsuite/gcc.target/i386/falign-functions-3.c (nonexistent)
+++ gcc/testsuite/gcc.target/i386/falign-functions-3.c (working copy)
@@ -0,0 +1,23 @@
+/* Verify that attribute aligned overrides the effect of -falign-functions.
+ (But see PR 88345 showing that -Os overrides -falign-functions.)
+ The test may need to be adjusted if/when GCC implements PR 88231.
+ { dg-do compile }
+ { dg-options "-O2 -falign-functions=32" } */
+
+#define ALIGN(n) __attribute__ ((aligned (n)))
+
+ALIGN (4)
+void f4 (void) { }
+
+/* { dg-final { scan-assembler ".align 4\n\t.globl\tf4" } } */
+
+
+void f32 (void) { }
+
+/* { dg-final { scan-assembler ".p2align 5\n\t.globl\tf32" } } */
+
+
+ALIGN (64)
+void f64 (void) { }
+
+/* { dg-final { scan-assembler ".align 64\n\t.globl\tf64" } } */
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [doc PATCH] document when GCC ignores attribute aligned
2018-12-04 3:23 [doc PATCH] document when GCC ignores attribute aligned Martin Sebor
@ 2018-12-04 7:20 ` Sandra Loosemore
2018-12-04 18:42 ` Martin Sebor
0 siblings, 1 reply; 3+ messages in thread
From: Sandra Loosemore @ 2018-12-04 7:20 UTC (permalink / raw)
To: Martin Sebor, Jeff Law, Gcc Patch List
On 12/3/18 8:23 PM, Martin Sebor wrote:
> Last week we agreed to clarify that attribute aligned on a function
> can decrease its alignment if it hasn't been previously declared
> with one. Attached is this change.
>
> Besides the above, I also mention that the attribute specifies
> the alignment of the first instruction of the function (in case
> that wasn't obvious) , and that it has no effect in the absence
> of a definition.
>
> I wrote some tests to convince myself this actually works as
> I expected. Where it does I add those tests to the testsuite
> via this patch. Where it doesn't I opened a bug (PR 88345).
>
> Martin
> Index: gcc/doc/extend.texi
> ===================================================================
> --- gcc/doc/extend.texi (revision 266766)
> +++ gcc/doc/extend.texi (working copy)
> @@ -2386,16 +2386,20 @@ and may not be available on all targets.
> @itemx aligned (@var{alignment})
> @cindex @code{aligned} function attribute
> The @code{aligned} attribute specifies a minimum alignment for
> -the function, measured in bytes. When specified, @var{alignment} must
> -be an integer constant power of 2. Specifying no @var{alignment} argument
> -implies the maximum alignment for the target, which is often, but by no
> -means always, 8 or 16 bytes.
> +the first instruction of the function, measured in bytes. When specified,
> +@var{alignment} must be an integer constant power of 2. Specifying no
> +@var{alignment} argument implies the ideal alignment for the target,
> +which is often, but by no means always, 8 or 16 bytes. The attribute
I think you might as well delete the end of the sentence starting with
"which is often...". It adds words but no useful information. (Maybe
it's 8 bytes, maybe it's 16 bytes, maybe it's something else....)
> +has no effect when a definition for the function is not provided in
> +the same translation unit.
>
> -You cannot use this attribute to decrease the alignment of a function,
> -only to increase it. However, when you explicitly specify a function
> -alignment this overrides the effect of the
> -@option{-falign-functions} (@pxref{Optimize Options}) option for this
> -function.
> +The attribute cannot be used to decrease the alignment of a function
> +previously declared with a more restrictive alignment; only to increase
> +it. Attempts to do otherwise are diagnosed. Some targets specify
> +a minimum default alignment for functions that is greater than 1. On
> +such targets, specifying a less restrictive alignment is silently ignored.
> +Using the attribute overrides the effect of the @option{-falign-functions}
> +(@pxref{Optimize Options}) option for this function.
>
> Note that the effectiveness of @code{aligned} attributes may be
> limited by inherent limitations in the system linker
This patch is OK with the above nit fixed.
-Sandra
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [doc PATCH] document when GCC ignores attribute aligned
2018-12-04 7:20 ` Sandra Loosemore
@ 2018-12-04 18:42 ` Martin Sebor
0 siblings, 0 replies; 3+ messages in thread
From: Martin Sebor @ 2018-12-04 18:42 UTC (permalink / raw)
To: Sandra Loosemore, Jeff Law, Gcc Patch List
On 12/4/18 12:20 AM, Sandra Loosemore wrote:
> On 12/3/18 8:23 PM, Martin Sebor wrote:
>> Last week we agreed to clarify that attribute aligned on a function
>> can decrease its alignment if it hasn't been previously declared
>> with one. Attached is this change.
>>
>> Besides the above, I also mention that the attribute specifies
>> the alignment of the first instruction of the function (in case
>> that wasn't obvious) , and that it has no effect in the absence
>> of a definition.
>>
>> I wrote some tests to convince myself this actually works as
>> I expected. Where it does I add those tests to the testsuite
>> via this patch. Where it doesn't I opened a bug (PR 88345).
>>
>> Martin
>
>> Index: gcc/doc/extend.texi
>> ===================================================================
>> --- gcc/doc/extend.texi   (revision 266766)
>> +++ gcc/doc/extend.texi   (working copy)
>> @@ -2386,16 +2386,20 @@ and may not be available on all targets.
>> Â @itemx aligned (@var{alignment})
>> Â @cindex @code{aligned} function attribute
>> Â The @code{aligned} attribute specifies a minimum alignment for
>> -the function, measured in bytes. When specified, @var{alignment} must
>> -be an integer constant power of 2. Specifying no @var{alignment}
>> argument
>> -implies the maximum alignment for the target, which is often, but by no
>> -means always, 8 or 16 bytes.
>> +the first instruction of the function, measured in bytes. When
>> specified,
>> +@var{alignment} must be an integer constant power of 2. Specifying no
>> +@var{alignment} argument implies the ideal alignment for the target,
>> +which is often, but by no means always, 8 or 16 bytes. The attribute
>
> I think you might as well delete the end of the sentence starting with
> "which is often...". It adds words but no useful information. (Maybe
> it's 8 bytes, maybe it's 16 bytes, maybe it's something else....)
I added those words in r265498. I was hoping to give people
an idea of roughly what they might expect because I couldn't
think of a good way to find out. But since then I realized
that the __alignof__ operator can be used to query this
alignment and I agree that the sentence isn't helpful anymore
(maybe it never really was). I've replaced it with a reference
to __alignof__ instead and checked in r266792.
Martin
>
>> +has no effect when a definition for the function is not provided in
>> +the same translation unit.
>>
>> -You cannot use this attribute to decrease the alignment of a function,
>> -only to increase it. However, when you explicitly specify a function
>> -alignment this overrides the effect of the
>> -@option{-falign-functions} (@pxref{Optimize Options}) option for this
>> -function.
>> +The attribute cannot be used to decrease the alignment of a function
>> +previously declared with a more restrictive alignment; only to increase
>> +it. Attempts to do otherwise are diagnosed. Some targets specify
>> +a minimum default alignment for functions that is greater than 1. On
>> +such targets, specifying a less restrictive alignment is silently
>> ignored.
>> +Using the attribute overrides the effect of the
>> @option{-falign-functions}
>> +(@pxref{Optimize Options}) option for this function.
>>
>> Â Note that the effectiveness of @code{aligned} attributes may be
>> Â limited by inherent limitations in the system linker
>
> This patch is OK with the above nit fixed.
>
> -Sandra
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-12-04 18:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-04 3:23 [doc PATCH] document when GCC ignores attribute aligned Martin Sebor
2018-12-04 7:20 ` Sandra Loosemore
2018-12-04 18:42 ` Martin Sebor
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).