aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cse.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr32372.c21
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
diff --git a/gcc/cse.c b/gcc/cse.c
index 431a419..d333492 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 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;
+}