diff options
author | Claudiu Zissulescu <claziss@synopsys.com> | 2013-09-06 19:27:54 +0200 |
---|---|---|
committer | Joern Rennecke <amylaar@gcc.gnu.org> | 2013-09-06 18:27:54 +0100 |
commit | c42091c1b505de009cea3420537a5453d81d0165 (patch) | |
tree | e9d3367377ae74b0cd5bae6deee44fccdc09158d | |
parent | 2c641f8b3a3059353ac6f8798d10d2f5c611109b (diff) | |
download | gcc-c42091c1b505de009cea3420537a5453d81d0165.zip gcc-c42091c1b505de009cea3420537a5453d81d0165.tar.gz gcc-c42091c1b505de009cea3420537a5453d81d0165.tar.bz2 |
resource.c (mark_target_live_regs): Compute resources taking into account if a call is predicated or not.
2013-09-06 Claudiu Zissulescu <claziss@synopsys.com>
* resource.c (mark_target_live_regs): Compute resources taking
into account if a call is predicated or not.
From-SVN: r202343
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/resource.c | 17 |
2 files changed, 17 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cbaf4c4..8493ee1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-09-06 Claudiu Zissulescu <claziss@synopsys.com> + + * resource.c (mark_target_live_regs): Compute resources taking + into account if a call is predicated or not. + 2013-09-06 Eric Botcazou <ebotcazou@adacore.com> * toplev.c (output_stack_usage): Be prepared for suffixes created by diff --git a/gcc/resource.c b/gcc/resource.c index a0fd2ec..919cffb 100644 --- a/gcc/resource.c +++ b/gcc/resource.c @@ -994,11 +994,18 @@ mark_target_live_regs (rtx insns, rtx target, struct resources *res) if (CALL_P (real_insn)) { - /* CALL clobbers all call-used regs that aren't fixed except - sp, ap, and fp. Do this before setting the result of the - call live. */ - AND_COMPL_HARD_REG_SET (current_live_regs, - regs_invalidated_by_call); + /* Values in call-clobbered registers survive a COND_EXEC CALL + if that is not executed; this matters for resoure use because + they may be used by a complementarily (or more strictly) + predicated instruction, or if the CALL is NORETURN. */ + if (GET_CODE (PATTERN (real_insn)) != COND_EXEC) + { + /* CALL clobbers all call-used regs that aren't fixed except + sp, ap, and fp. Do this before setting the result of the + call live. */ + AND_COMPL_HARD_REG_SET (current_live_regs, + regs_invalidated_by_call); + } /* A CALL_INSN sets any global register live, since it may have been modified by the call. */ |