These patches are for this bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66240 "RFE: extend -falign-xyz syntax"
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 6 of the patch set. Bernd asked to replace use of a new SUBALIGN_LOG define with a hook. Don't see an easy way to do that (short of adding a dedicated hook), for now retained SUBALIGN_LOG method. Suggestions welcome. 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