diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2016-03-01 20:04:01 +0000 |
---|---|---|
committer | Eric Botcazou <ebotcazou@gcc.gnu.org> | 2016-03-01 20:04:01 +0000 |
commit | 355a43a19fd0f20cfdfdd0e406c60d5c3f5178df (patch) | |
tree | 9d8eef7ecfbe716d17be98b438245521b56c2b1e /gcc/ira.c | |
parent | 686e2237f31bd26851e3c8f9a528ab30aef16c54 (diff) | |
download | gcc-355a43a19fd0f20cfdfdd0e406c60d5c3f5178df.zip gcc-355a43a19fd0f20cfdfdd0e406c60d5c3f5178df.tar.gz gcc-355a43a19fd0f20cfdfdd0e406c60d5c3f5178df.tar.bz2 |
re PR ada/70017 (c52103x and c52104x test failure on s390x)
PR ada/70017
* ira.c (do_reload): Issue warning for generic stack checking here...
* reload1.c (reload): ...instead of here and streamline it.
From-SVN: r233862
Diffstat (limited to 'gcc/ira.c')
-rw-r--r-- | gcc/ira.c | 17 |
1 files changed, 15 insertions, 2 deletions
@@ -5404,9 +5404,8 @@ do_reload (void) { df_set_flags (DF_NO_INSN_RESCAN); build_insn_chain (); - - need_dce = reload (get_insns (), ira_conflicts_p); + need_dce = reload (get_insns (), ira_conflicts_p); } timevar_pop (TV_RELOAD); @@ -5484,6 +5483,20 @@ do_reload (void) inform (DECL_SOURCE_LOCATION (decl), "for %qD", decl); } + /* If we are doing generic stack checking, give a warning if this + function's frame size is larger than we expect. */ + if (flag_stack_check == GENERIC_STACK_CHECK) + { + HOST_WIDE_INT size = get_frame_size () + STACK_CHECK_FIXED_FRAME_SIZE; + + for (int i = 0; i < FIRST_PSEUDO_REGISTER; i++) + if (df_regs_ever_live_p (i) && !fixed_regs[i] && call_used_regs[i]) + size += UNITS_PER_WORD; + + if (size > STACK_CHECK_MAX_FRAME_SIZE) + warning (0, "frame size too large for reliable stack checking"); + } + if (pic_offset_table_regno != INVALID_REGNUM) pic_offset_table_rtx = gen_rtx_REG (Pmode, pic_offset_table_regno); |