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> 2003-01-09 Geoffrey Keating <geoffk@apple.com>
Merge from pch-branch: Merge from pch-branch:
......
/* Optimize jump instructions, for GNU compiler. /* Optimize jump instructions, for GNU compiler.
Copyright (C) 1987, 1988, 1989, 1991, 1992, 1993, 1994, 1995, 1996, 1997 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. This file is part of GCC.
...@@ -61,6 +61,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -61,6 +61,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
or even change what is live at any point. or even change what is live at any point.
So perhaps let combiner do it. */ So perhaps let combiner do it. */
static rtx next_nonnote_insn_in_loop PARAMS ((rtx));
static void init_label_info PARAMS ((rtx)); static void init_label_info PARAMS ((rtx));
static void mark_all_labels PARAMS ((rtx)); static void mark_all_labels PARAMS ((rtx));
static int duplicate_loop_exit_test PARAMS ((rtx)); static int duplicate_loop_exit_test PARAMS ((rtx));
...@@ -119,6 +120,27 @@ cleanup_barriers () ...@@ -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 void
copy_loop_headers (f) copy_loop_headers (f)
rtx f; rtx f;
...@@ -137,7 +159,7 @@ copy_loop_headers (f) ...@@ -137,7 +159,7 @@ copy_loop_headers (f)
the values of regno_first_uid and regno_last_uid. */ the values of regno_first_uid and regno_last_uid. */
if (GET_CODE (insn) == NOTE if (GET_CODE (insn) == NOTE
&& NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_BEG && 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)) && any_uncondjump_p (temp1) && onlyjump_p (temp1))
{ {
temp = PREV_INSN (insn); temp = PREV_INSN (insn);
...@@ -286,7 +308,8 @@ duplicate_loop_exit_test (loop_start) ...@@ -286,7 +308,8 @@ duplicate_loop_exit_test (loop_start)
rtx insn, set, reg, p, link; rtx insn, set, reg, p, link;
rtx copy = 0, first_copy = 0; rtx copy = 0, first_copy = 0;
int num_insns = 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; rtx lastexit;
int max_reg = max_reg_num (); int max_reg = max_reg_num ();
rtx *reg_map = 0; 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