aboutsummaryrefslogtreecommitdiff
path: root/gcc/varasm.c
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@redhat.com>2016-11-24 12:54:56 +0000
committerBernd Schmidt <bernds@gcc.gnu.org>2016-11-24 12:54:56 +0000
commit8cac4d85875ff23588908341fdd69fb4c39a7210 (patch)
tree931322bd6dd2151c71ebdfbe6eb4426040b2f49b /gcc/varasm.c
parenteb2afa1a80613d37aa12fdd5a0624b45fdef9377 (diff)
downloadgcc-8cac4d85875ff23588908341fdd69fb4c39a7210.zip
gcc-8cac4d85875ff23588908341fdd69fb4c39a7210.tar.gz
gcc-8cac4d85875ff23588908341fdd69fb4c39a7210.tar.bz2
common.opt (flimit-function-alignment): New.
gcc/ * common.opt (flimit-function-alignment): New. * doc/invoke.texi (-flimit-function-alignment): Document. * emit-rtl.h (struct rtl_data): Add max_insn_address field. * final.c (shorten_branches): Set it. * varasm.c (assemble_start_function): Limit alignment if requested. gcc/testsuite/ * gcc.target/i386/align-limit.c: New test. From-SVN: r242836
Diffstat (limited to 'gcc/varasm.c')
-rw-r--r--gcc/varasm.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/varasm.c b/gcc/varasm.c
index 2a20f64..54e06acd 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -1791,9 +1791,14 @@ assemble_start_function (tree decl, const char *fnname)
&& align_functions_log > align
&& optimize_function_for_speed_p (cfun))
{
+ int align_log = align_functions_log;
+ int max_skip = align_functions - 1;
+ if (flag_limit_function_alignment && crtl->max_insn_address > 0
+ && max_skip >= crtl->max_insn_address)
+ max_skip = crtl->max_insn_address - 1;
+
#ifdef ASM_OUTPUT_MAX_SKIP_ALIGN
- ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file,
- align_functions_log, align_functions - 1);
+ ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file, align_log, max_skip);
#else
ASM_OUTPUT_ALIGN (asm_out_file, align_functions_log);
#endif