From: J"orn Rennecke Date: Fri, 24 Apr 1998 13:03:42 +0000 (+0000) Subject: cse.c (cse_set_around_loop): Don't do optimization when new pseudos are created. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e89d3e6fafba3bb7bfcda0e4a0096aac80200c1d;p=platform%2Fupstream%2Fgcc.git cse.c (cse_set_around_loop): Don't do optimization when new pseudos are created. * cse.c (cse_set_around_loop): Don't do optimization when new pseudos are created. From-SVN: r19404 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 85d4b24..c95f9d6 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Fri Apr 24 20:55:47 1998 J"orn Rennecke + + * cse.c (cse_set_around_loop): Don't do optimization when + new pseudos are created. + Fri Apr 24 11:00:18 1998 Jeffrey A Law (law@cygnus.com) * dbxout.c (dbxout_type_fields): Use HOST_WIDE_INT_PRINT_DEC diff --git a/gcc/cse.c b/gcc/cse.c index 19a02ef..ddaf689 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -8018,9 +8018,24 @@ cse_set_around_loop (x, insn, loop_start) if (cse_check_loop_start_value && validate_change (insn, &SET_SRC (x), src_elt->exp, 0)) - emit_insn_after (gen_move_insn (src_elt->exp, - SET_DEST (set)), - p); + { + /* If this creates new pseudos, this is unsafe, + because the regno of new pseudo is unsuitable + to index into reg_qty when cse_insn processes + the new insn. Therefore, if a new pseudo was + created, discard this optimization. */ + int nregs = max_reg_num (); + rtx move + = gen_move_insn (src_elt->exp, SET_DEST (set)); + if (nregs != max_reg_num ()) + { + if (! validate_change (insn, &SET_SRC (x), + SET_SRC (set), 0)) + abort (); + } + else + emit_insn_after (move, p); + } break; } }