Commit d330ce15 by Josef Zlomek Committed by Josef Zlomek

jump.c (next_nonnote_insn_in_loop): New function.

	* jump.c (next_nonnote_insn_in_loop): New function.
	(copy_loop_headers): Use next_nonnote_insn_in_loop instead of
	next_nonnote_insn.
	(duplicate_loop_exit_test). Likewise.

From-SVN: r61150
parent ca3b9033
2003-01-10 Josef Zlomek <zlomekj@suse.cz>
* jump.c (next_nonnote_insn_in_loop): New function.
(copy_loop_headers): Use next_nonnote_insn_in_loop instead of
next_nonnote_insn.
(duplicate_loop_exit_test). Likewise.
2003-01-09 Geoffrey Keating <geoffk@apple.com>
Merge from pch-branch:
......
/* Optimize jump instructions, for GNU compiler.
Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997
1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GCC.
......@@ -61,6 +61,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
or even change what is live at any point.
So perhaps let combiner do it. */
static rtx next_nonnote_insn_in_loop PARAMS ((rtx));
static void init_label_info PARAMS ((rtx));
static void mark_all_labels PARAMS ((rtx));
static int duplicate_loop_exit_test PARAMS ((rtx));
......@@ -119,6 +120,27 @@ cleanup_barriers ()
}
}
/* Return the next insn after INSN that is not a NOTE and is in the loop,
i.e. when there is no such INSN before NOTE_INSN_LOOP_END return NULL_RTX.
This routine does not look inside SEQUENCEs. */
static rtx
next_nonnote_insn_in_loop (insn)
rtx insn;
{
while (insn)
{
insn = NEXT_INSN (insn);
if (insn == 0 || GET_CODE (insn) != NOTE)
break;
if (GET_CODE (insn) == NOTE
&& NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END)
return NULL_RTX;
}
return insn;
}
void
copy_loop_headers (f)
rtx f;
......@@ -137,7 +159,7 @@ copy_loop_headers (f)
the values of regno_first_uid and regno_last_uid. */
if (GET_CODE (insn) == NOTE
&& NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG
&& (temp1 = next_nonnote_insn (insn)) != 0
&& (temp1 = next_nonnote_insn_in_loop (insn)) != 0
&& any_uncondjump_p (temp1) && onlyjump_p (temp1))
{
temp = PREV_INSN (insn);
......@@ -286,7 +308,8 @@ duplicate_loop_exit_test (loop_start)
rtx insn, set, reg, p, link;
rtx copy = 0, first_copy = 0;
int num_insns = 0;
rtx exitcode = NEXT_INSN (JUMP_LABEL (next_nonnote_insn (loop_start)));
rtx exitcode
= NEXT_INSN (JUMP_LABEL (next_nonnote_insn_in_loop (loop_start)));
rtx lastexit;
int max_reg = max_reg_num ();
rtx *reg_map = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment