These patches are for this bug:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66240
"RFE: extend -falign-xyz syntax"
An extended explanation is in commit message of patch 3.
The test program:
int g();
int f(int i) {
i *= 3;
while (--i > 100) {
L1: if (g()) goto L1;
if (g()) goto L2;
}
return i;
L2: return 123;
}
"-O2" assembly before the patch: After the patch:
.text .text
.p2align 4,,15 .p2align 4
.globl f .globl f
.type f, @function .type f, @function
f: f:
.LFB0: .LFB0:
pushq %rbx pushq %rbx
leal (%rdi,%rdi,2), %ebx leal (%rdi,%rdi,2), %ebx
.p2align 4,,10 .p2align 4,,10
.p2align 3 .p2align 3
.L2: .L2:
subl $1, %ebx subl $1, %ebx
cmpl $100, %ebx cmpl $100, %ebx
jle .L1 jle .L1
.p2align 4,,10 .p2align 4,,10
.p2align 3 .p2align 3
.L3: .L3:
xorl %eax, %eax xorl %eax, %eax
call g call g
testl %eax, %eax testl %eax, %eax
jne .L3 jne .L3
call g call g
testl %eax, %eax testl %eax, %eax
je .L2 je .L2
movl $123, %ebx movl $123, %ebx
.L4: .L4:
.L1: .L1:
movl %ebx, %eax movl %ebx, %eax
popq %rbx popq %rbx
ret ret
This is version 8 of the patch set.
Changes since version 7:
* Documentation fixes
Changes since version 6:
* Rediffed to accomodate changes introduced by recently introduced
-flimit-function-alignment
Changes since version 5:
* Changes in rs6000, mips, alpha, visium, sh, rx, spu to accomodate
new alignment options.
* Explicitly list secondary alignment of 8 ("n,m,8") in x86 tables
for all types of jump targets.
Changes since version 4:
* Deleted rather than NOPed -malign-foo=N support.
* Improved behavior match with x86 8-byte subalignment for labels.
Changes since version 3:
* Improved documentation in invoke.texi
* Fixed x86-specific calculation of default N2 value:
previous version was doing it incorrectly for cross-compile