diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/loop.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/20031216-1.c | 37 |
4 files changed, 48 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b0c3a30..6d2db65 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-12-18 Ulrich Weigand <uweigand@de.ibm.com> + + * loop.c (move_movables): Handle combination of m->consec, + m->move_insn_first, and m->insert_temp all nonzero correctly. + 2003-12-18 Kazu Hirata <kazu@cs.umass.edu> * calls.c (load_register_parameters): Don't use @@ -2113,7 +2113,8 @@ move_movables (struct loop *loop, struct loop_movables *movables, /* The SET_SRC might not be invariant, so we must use the REG_EQUAL note. */ start_sequence (); - emit_move_insn (m->set_dest, m->set_src); + emit_move_insn (m->insert_temp ? newreg : m->set_dest, + m->set_src); seq = get_insns (); end_sequence (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d4524f3..33e5eb8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-12-18 Ulrich Weigand <uweigand@de.ibm.com> + + * gcc.dg/20031216-1.c: New test. + 2003-12-18 Giovanni Bajo <giovannibajo@gcc.gnu.org> PR c++/9154 diff --git a/gcc/testsuite/gcc.dg/20031216-1.c b/gcc/testsuite/gcc.dg/20031216-1.c new file mode 100644 index 0000000..d8ee070 --- /dev/null +++ b/gcc/testsuite/gcc.dg/20031216-1.c @@ -0,0 +1,37 @@ +/* This used to abort due to a loop bug on s390*. */ + +/* { dg-do run } */ +/* { dg-options "-O2" } */ +/* { dg-options "-O2 -fPIC" { target s390*-*-* } } */ + +int count = 0; +char *str; + +void test (int flag) +{ + char *p; + + for (;;) + { + if (count > 5) + return; + + p = "test"; + + if (flag) + count++; + + str = p; + } +} + +int main (void) +{ + test (1); + + if (str[0] != 't') + abort (); + + return 0; +} + |