From cebf212fa5edc019a992981e7aab39517ac93c3f Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Thu, 18 Dec 2003 12:15:37 +0000 Subject: [PATCH] loop.c (move_movables): Handle combination of m->consec... ChangeLog: * loop.c (move_movables): Handle combination of m->consec, m->move_insn_first, and m->insert_temp all nonzero correctly. testsuite/ChangeLog: * gcc.dg/20031216-1.c: New test. From-SVN: r74778 --- gcc/ChangeLog | 5 +++++ gcc/loop.c | 3 ++- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/20031216-1.c | 37 +++++++++++++++++++++++++++++++ 4 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/20031216-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b0c3a3018c9..6d2db65e7d5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2003-12-18 Ulrich Weigand + + * 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 * calls.c (load_register_parameters): Don't use diff --git a/gcc/loop.c b/gcc/loop.c index 93bb328be34..d5329755058 100644 --- a/gcc/loop.c +++ b/gcc/loop.c @@ -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 d4524f3aabd..33e5eb89ae6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2003-12-18 Ulrich Weigand + + * gcc.dg/20031216-1.c: New test. + 2003-12-18 Giovanni Bajo 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 00000000000..d8ee0703d7f --- /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; +} + -- 2.30.2