c-semantics.c (genrtl_while_stmt): Improve initial RTL generation when loop condition is known true, i.e.
* c-semantics.c (genrtl_while_stmt): Improve initial RTL generation when loop condition is known true, i.e. "while (1) { ... }". (genrtl_for_stmt): Similarly for "for" statements. From-SVN: r61338
This commit is contained in:
parent
03cd8aba32
commit
8cadeff16d
2 changed files with 24 additions and 12 deletions
|
@ -1,3 +1,9 @@
|
|||
2003-01-15 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* c-semantics.c (genrtl_while_stmt): Improve initial RTL generation
|
||||
when loop condition is known true, i.e. "while (1) { ... }".
|
||||
(genrtl_for_stmt): Similarly for "for" statements.
|
||||
|
||||
2003-01-15 Roger Sayle <roger@eyesopen.com>
|
||||
|
||||
* real.c (real_sqrt): Return a bool result indicating whether
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* This file contains the definitions and documentation for the common
|
||||
tree codes used in the GNU C and C++ compilers (see c-common.def
|
||||
for the standard codes).
|
||||
Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
|
||||
Written by Benjamin Chelf (chelf@codesourcery.com).
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -424,16 +424,20 @@ void
|
|||
genrtl_while_stmt (t)
|
||||
tree t;
|
||||
{
|
||||
tree cond;
|
||||
tree cond = WHILE_COND (t);
|
||||
|
||||
emit_nop ();
|
||||
emit_line_note (input_filename, lineno);
|
||||
expand_start_loop (1);
|
||||
genrtl_do_pushlevel ();
|
||||
|
||||
cond = expand_cond (WHILE_COND (t));
|
||||
emit_line_note (input_filename, lineno);
|
||||
expand_exit_loop_top_cond (0, cond);
|
||||
genrtl_do_pushlevel ();
|
||||
if (cond && !integer_nonzerop (cond))
|
||||
{
|
||||
cond = expand_cond (cond);
|
||||
emit_line_note (input_filename, lineno);
|
||||
expand_exit_loop_top_cond (0, cond);
|
||||
genrtl_do_pushlevel ();
|
||||
}
|
||||
|
||||
expand_stmt (WHILE_BODY (t));
|
||||
|
||||
|
@ -522,7 +526,7 @@ void
|
|||
genrtl_for_stmt (t)
|
||||
tree t;
|
||||
{
|
||||
tree cond;
|
||||
tree cond = FOR_COND (t);
|
||||
const char *saved_filename;
|
||||
int saved_lineno;
|
||||
|
||||
|
@ -539,7 +543,6 @@ genrtl_for_stmt (t)
|
|||
else
|
||||
expand_start_loop (1);
|
||||
genrtl_do_pushlevel ();
|
||||
cond = expand_cond (FOR_COND (t));
|
||||
|
||||
/* Save the filename and line number so that we expand the FOR_EXPR
|
||||
we can reset them back to the saved values. */
|
||||
|
@ -547,12 +550,15 @@ genrtl_for_stmt (t)
|
|||
saved_lineno = lineno;
|
||||
|
||||
/* Expand the condition. */
|
||||
emit_line_note (input_filename, lineno);
|
||||
if (cond)
|
||||
expand_exit_loop_top_cond (0, cond);
|
||||
if (cond && !integer_nonzerop (cond))
|
||||
{
|
||||
cond = expand_cond (cond);
|
||||
emit_line_note (input_filename, lineno);
|
||||
expand_exit_loop_top_cond (0, cond);
|
||||
genrtl_do_pushlevel ();
|
||||
}
|
||||
|
||||
/* Expand the body. */
|
||||
genrtl_do_pushlevel ();
|
||||
expand_stmt (FOR_BODY (t));
|
||||
|
||||
/* Expand the increment expression. */
|
||||
|
|
Loading…
Add table
Reference in a new issue