diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cse.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr32372.c | 21 |
4 files changed, 35 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e01cf06..5da242a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-06-29 Jan Hubicka <jh@suse.cz> + + PR middle-end/32372 + * cse.c (cse_insn): Avoid invalid sharing in between register note and + the insn pattern. + 2007-06-29 Anatoly Sokolov <aesok@post.ru> PR target/32335 @@ -4181,7 +4181,7 @@ cse_insn (rtx insn, rtx libcall_insn) canon_reg (XEXP (tem, 0), insn); apply_change_group (); src_eqv = fold_rtx (XEXP (tem, 0), insn); - XEXP (tem, 0) = src_eqv; + XEXP (tem, 0) = copy_rtx (src_eqv); df_notes_rescan (insn); } @@ -7012,7 +7012,7 @@ struct tree_opt_pass pass_cse = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_df_finish | + TODO_df_finish | TODO_verify_rtl_sharing | TODO_dump_func | TODO_ggc_collect | TODO_verify_flow, /* todo_flags_finish */ @@ -7070,7 +7070,7 @@ struct tree_opt_pass pass_cse2 = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - TODO_df_finish | + TODO_df_finish | TODO_verify_rtl_sharing | TODO_dump_func | TODO_ggc_collect | TODO_verify_flow, /* todo_flags_finish */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 447bcde..5657411 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-06-29 Jan Hubicka <jh@suse.cz> + + PR middle-end/32372 + * gcc.c-torture/compile/pr32372.c: new. + 2007-06-29 Daniel Franke <franke.daniel@gmail.com> * gfortran.dg/operator_3.f90: New test. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr32372.c b/gcc/testsuite/gcc.c-torture/compile/pr32372.c new file mode 100644 index 0000000..cead1ca --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr32372.c @@ -0,0 +1,21 @@ +typedef struct AVCodecContext +{ + int flags; + void *priv_data; + char codec_name[32]; +} +AVCodecContext; +typedef struct ScanTable +{ + int obmc; + int umvplus; + int h263_aic; +} +MpegEncContext; +MPV_encode_init (AVCodecContext *avctx) +{ + MpegEncContext *s = avctx->priv_data; + s->umvplus = (avctx->flags & 0x02000000) ? 1 : 0; + s->h263_aic = (avctx->flags & 0x01000000) ? 1 : 0; + s->h263_aic = s->obmc || s->umvplus; +} |