http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56133
Bug #: 56133 Summary: [x86] align_loops, align_jumps and align_functions are ignored Classification: Unclassified Product: gcc Version: 4.8.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassig...@gcc.gnu.org ReportedBy: hjl.to...@gmail.com i386.c has /* Default align_* from the processor table. */ if (align_loops == 0) { align_loops = processor_target_table[ix86_tune].align_loop; align_loops_max_skip = processor_target_table[ix86_tune].align_loop_max_skip; } if (align_jumps == 0) { align_jumps = processor_target_table[ix86_tune].align_jump; align_jumps_max_skip = processor_target_table[ix86_tune].align_jump_max_skip; } if (align_functions == 0) { align_functions = processor_target_table[ix86_tune].align_func; } However, opts.c has { OPT_LEVELS_2_PLUS, OPT_falign_loops, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_falign_jumps, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_falign_labels, NULL, 1 }, { OPT_LEVELS_2_PLUS, OPT_falign_functions, NULL, 1 }, Those variables aren't zero unless they are set at command-line. I think they should be initialized to -1, which is handled by init_alignments: /* Default the align_* variables to 1 if they're still unset, and set up the align_*_log variables. */ static void init_alignments (void) { and i386.c should check <= 0, instead of == 0.