diff options
author | Jan Hubicka <jh@suse.cz> | 2001-12-15 01:53:44 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2001-12-15 00:53:44 +0000 |
commit | 08f7f057cc47625a6005912eca9f752f18a67167 (patch) | |
tree | 5b6cb99d81c2d3b5f62712aa4a7879120688ebfb /gcc | |
parent | aa28f076d609e79d8cc4d235bbb9679f2a08c9fe (diff) | |
download | gcc-08f7f057cc47625a6005912eca9f752f18a67167.zip gcc-08f7f057cc47625a6005912eca9f752f18a67167.tar.gz gcc-08f7f057cc47625a6005912eca9f752f18a67167.tar.bz2 |
cfgcleanup.c (flow_find_cross_jump): Replace tests for note by active_insn_p; count conditional jump as instruction.
* cfgcleanup.c (flow_find_cross_jump): Replace tests for note
by active_insn_p; count conditional jump as instruction.
From-SVN: r48022
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cfgcleanup.c | 23 |
2 files changed, 21 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 244080d..14fd691 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Sat Dec 15 01:39:12 CET 2001 Jan Hubicka <jh@suse.cz> + + * cfgcleanup.c (flow_find_cross_jump): Replace tests for note + by active_insn_p; count conditional jump as instruction. + 2001-12-14 DJ Delorie <dj@redhat.com> Danny Smith <dannysmith@users.sourceforge.net> diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index e7e31f9..2f01153 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -670,21 +670,30 @@ flow_find_cross_jump (mode, bb1, bb2, f1, f2) need to be compared for equivalence, which we'll do below. */ i1 = bb1->end; + last1 = afterlast1 = last2 = afterlast2 = NULL_RTX; if (onlyjump_p (i1) || (returnjump_p (i1) && !side_effects_p (PATTERN (i1)))) - i1 = PREV_INSN (i1); + { + last1 = i1; + /* Count everything except for unconditional jump as insn. */ + if (!simplejump_p (i1) && !returnjump_p (i1)) + ninsns++; + i1 = PREV_INSN (i1); + } i2 = bb2->end; if (onlyjump_p (i2) || (returnjump_p (i2) && !side_effects_p (PATTERN (i2)))) - i2 = PREV_INSN (i2); + { + last2 = i2; + i2 = PREV_INSN (i2); + } - last1 = afterlast1 = last2 = afterlast2 = NULL_RTX; while (true) { /* Ignore notes. */ - while ((GET_CODE (i1) == NOTE && i1 != bb1->head)) + while (!active_insn_p (i1) && i1 != bb1->head) i1 = PREV_INSN (i1); - while ((GET_CODE (i2) == NOTE && i2 != bb2->head)) + while (!active_insn_p (i2) && i2 != bb2->head) i2 = PREV_INSN (i2); if (i1 == bb1->head || i2 == bb2->head) @@ -735,11 +744,11 @@ flow_find_cross_jump (mode, bb1, bb2, f1, f2) Two, it keeps line number notes as matched as may be. */ if (ninsns) { - while (last1 != bb1->head && GET_CODE (PREV_INSN (last1)) == NOTE) + while (last1 != bb1->head && !active_insn_p (PREV_INSN (last1))) last1 = PREV_INSN (last1); if (last1 != bb1->head && GET_CODE (PREV_INSN (last1)) == CODE_LABEL) last1 = PREV_INSN (last1); - while (last2 != bb2->head && GET_CODE (PREV_INSN (last2)) == NOTE) + while (last2 != bb2->head && !active_insn_p (PREV_INSN (last2))) last2 = PREV_INSN (last2); if (last2 != bb2->head && GET_CODE (PREV_INSN (last2)) == CODE_LABEL) last2 = PREV_INSN (last2); |