From acff804059ca670f5a43b6f5ae2fca6dfc4b3697 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Fri, 29 Jun 2007 22:13:41 +0200 Subject: [PATCH] re PR rtl-optimization/32372 (ICE in df_refs_verify, at df-scan.c:4065) PR middle-end/32372 * cse.c (cse_insn): Avoid invalid sharing in between register note and the insn pattern. From-SVN: r126122 --- gcc/ChangeLog | 6 ++++++ gcc/cse.c | 6 +++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr32372.c | 21 +++++++++++++++++++ 4 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr32372.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e01cf06f0af..5da242ac5e7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-06-29 Jan Hubicka + + PR middle-end/32372 + * cse.c (cse_insn): Avoid invalid sharing in between register note and + the insn pattern. + 2007-06-29 Anatoly Sokolov PR target/32335 diff --git a/gcc/cse.c b/gcc/cse.c index 431a4194bef..d3334925ea0 100644 --- a/gcc/cse.c +++ b/gcc/cse.c @@ -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 447bcdeca8f..5657411231d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-06-29 Jan Hubicka + + PR middle-end/32372 + * gcc.c-torture/compile/pr32372.c: new. + 2007-06-29 Daniel Franke * 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 00000000000..cead1ca0096 --- /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; +} -- 2.30.2