From: Jan Hubicka Date: Sat, 25 Jan 2003 20:10:37 +0000 (+0100) Subject: re PR rtl-optimization/8492 (GCC spins forever compiling loop) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1649d92fb3790548b583dbc6a93e0383a90b9fea;p=gcc.git re PR rtl-optimization/8492 (GCC spins forever compiling loop) PR opt/8492 * gcse.c (one_cprop_pass): Delete unreachable blocks. Co-Authored-By: Eric Botcazou From-SVN: r61798 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b10a807ea49..b6e21f7ff06 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Sat Jan 25 21:04:33 CET 2003 Jan Hubicka + Eric Botcazou + PR opt/8492 + * gcse.c (one_cprop_pass): Delete unreachable blocks. + 2003-01-25 Richard Henderson * config/ia64/ia64.c (ia64_rwreloc_select_rtx_section): Rename diff --git a/gcc/gcse.c b/gcc/gcse.c index 21719948f5b..272e39a915b 100644 --- a/gcc/gcse.c +++ b/gcc/gcse.c @@ -4378,6 +4378,7 @@ local_cprop_pass (alter_jumps) rtx insn; struct reg_use *reg_used; rtx libcall_stack[MAX_NESTED_LIBCALLS + 1], *libcall_sp; + bool changed = false; cselib_init (); libcall_sp = &libcall_stack[MAX_NESTED_LIBCALLS]; @@ -4409,13 +4410,19 @@ local_cprop_pass (alter_jumps) reg_used++, reg_use_count--) if (do_local_cprop (reg_used->reg_rtx, insn, alter_jumps, libcall_sp)) - break; + { + changed = true; + break; + } } while (reg_use_count); } cselib_process_insn (insn); } cselib_finish (); + /* Global analysis may get into infinite loops for unreachable blocks. */ + if (changed && alter_jumps) + delete_unreachable_blocks (); } /* Forward propagate copies. This includes copies and constants. Return @@ -4506,6 +4513,9 @@ one_cprop_pass (pass, cprop_jumps, bypass_jumps) fprintf (gcse_file, "%d const props, %d copy props\n\n", const_prop_count, copy_prop_count); } + /* Global analysis may get into infinite loops for unreachable blocks. */ + if (changed && cprop_jumps) + delete_unreachable_blocks (); return changed; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7c331f1a98a..d26eb165e2c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +Sat Jan 25 21:06:49 CET 2003 Jan Hubicka + + PR opt/8492 + * gcc.c-torture/compile/20030125-1.c + 2003-01-25 Nathan Sidwell PR c++/9403 @@ -19,7 +24,7 @@ * gcc.c-torture/execute/switch-1.c: New test case. -Sat Jan 25 12:32:55 CET 2003 Jan HUbicka +Sat Jan 25 12:32:55 CET 2003 Jan Hubicka * gcc.c-torture/execute/20030125-1.[cx]: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/20030125-1.c b/gcc/testsuite/gcc.c-torture/compile/20030125-1.c new file mode 100644 index 00000000000..656304e2d67 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20030125-1.c @@ -0,0 +1,24 @@ + int count; + + int func(int *valp) { + int val, locked = 0; + + while ((val = *valp) != 0) { + if (count) { + if (count) + locked = 1; + else + locked = 1; + + if (!locked) + continue; + } + + if (!count) + count--; + + break; + } + + return val; + }