diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2014-01-18 10:12:22 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2014-01-18 10:12:22 +0000 |
commit | 04da56800d7dab3b3aee10b742328efc49ff3a4a (patch) | |
tree | 08a94ea963a1b5777d0b73d6d37380df36dd60d0 /gcc | |
parent | 1e99bee598858cf783e585f48bda3dfc7702b4c9 (diff) | |
download | gcc-04da56800d7dab3b3aee10b742328efc49ff3a4a.zip gcc-04da56800d7dab3b3aee10b742328efc49ff3a4a.tar.gz gcc-04da56800d7dab3b3aee10b742328efc49ff3a4a.tar.bz2 |
jump.c (delete_related_insns): Keep (use (insn))s.
gcc/
* jump.c (delete_related_insns): Keep (use (insn))s.
* reorg.c (redundant_insn): Check for barriers too.
From-SVN: r206749
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/jump.c | 7 | ||||
-rw-r--r-- | gcc/reorg.c | 5 |
3 files changed, 16 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 01ba1fd..51d6cc6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2014-01-18 Richard Sandiford <rdsandiford@googlemail.com> + + * jump.c (delete_related_insns): Keep (use (insn))s. + * reorg.c (redundant_insn): Check for barriers too. + 2014-01-17 H.J. Lu <hongjiu.lu@intel.com> * config/i386/i386.c (ix86_split_lea_for_addr): Fix a comment @@ -1355,6 +1355,13 @@ delete_related_insns (rtx insn) /* Keep going past other deleted labels to delete what follows. */ else if (code == CODE_LABEL && INSN_DELETED_P (next)) next = NEXT_INSN (next); + /* Keep the (use (insn))s created by dbr_schedule, which needs + them in order to track liveness relative to a previous + barrier. */ + else if (INSN_P (next) + && GET_CODE (PATTERN (next)) == USE + && INSN_P (XEXP (PATTERN (next), 0))) + next = NEXT_INSN (next); else if (code == BARRIER || INSN_P (next)) /* Note: if this deletes a jump, it can cause more deletion of unreachable code, after a different label. diff --git a/gcc/reorg.c b/gcc/reorg.c index de33232..054304a 100644 --- a/gcc/reorg.c +++ b/gcc/reorg.c @@ -1512,7 +1512,10 @@ redundant_insn (rtx insn, rtx target, rtx delay_list) trial && insns_to_search > 0; trial = PREV_INSN (trial)) { - if (LABEL_P (trial)) + /* (use (insn))s can come immediately after a barrier if the + label that used to precede them has been deleted as dead. + See delete_related_insns. */ + if (LABEL_P (trial) || BARRIER_P (trial)) return 0; if (!INSN_P (trial)) |