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
This commit is contained in:
Jan Hubicka 2007-06-29 22:13:41 +02:00 committed by Jan Hubicka
parent 4e63b362a7
commit acff804059
4 changed files with 35 additions and 3 deletions

View File

@ -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

View File

@ -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 */

View File

@ -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.

View File

@ -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;
}