diff options
author | Bernd Schmidt <bernds_cb1@t-online.de> | 2019-11-27 03:31:24 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2019-11-27 03:31:24 +0000 |
commit | af2f620578f46f09dba964ce5f739df0e61a595b (patch) | |
tree | 9102d9d21057f8555f20342ab2bcfcb106ac4025 /gcc/combine.c | |
parent | 6821245b3fd9e392ca56dfab4a4921a59ffa234b (diff) | |
download | gcc-af2f620578f46f09dba964ce5f739df0e61a595b.zip gcc-af2f620578f46f09dba964ce5f739df0e61a595b.tar.gz gcc-af2f620578f46f09dba964ce5f739df0e61a595b.tar.bz2 |
Allow autoinc in jumps, but only when using reload.
* auto-inc-dec.c (merge_in_block): Allow autoinc in jumps unless
LRA is enabled.
* combine.c (can_combine_p): Disallow autoinc in jumps unless LRA is
disabled.
From-SVN: r278756
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index 2e21459..3fbd84f 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -2117,12 +2117,16 @@ can_combine_p (rtx_insn *insn, rtx_insn *i3, rtx_insn *pred ATTRIBUTE_UNUSED, /* If INSN contains an autoincrement or autodecrement, make sure that register is not used between there and I3, and not already used in - I3 either. Neither must it be used in PRED or SUCC, if they exist. */ + I3 either. Neither must it be used in PRED or SUCC, if they exist. + Also insist that I3 not be a jump if using LRA; if it were one + and the incremented register were spilled, we would lose. + Reload handles this correctly. */ if (AUTO_INC_DEC) for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) if (REG_NOTE_KIND (link) == REG_INC - && (reg_used_between_p (XEXP (link, 0), insn, i3) + && ((JUMP_P (i3) && targetm.lra_p ()) + || reg_used_between_p (XEXP (link, 0), insn, i3) || (pred != NULL_RTX && reg_overlap_mentioned_p (XEXP (link, 0), PATTERN (pred))) || (pred2 != NULL_RTX |