diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 43d9a8fb6612..4056a358e810 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2009-12-07 Jakub Jelinek + + PR debug/42244 + * ddg.c (add_inter_loop_mem_dep): Use ANTI_DEP if from or to + is a DEBUG_INSN. + 2009-12-07 Sebastian Pop * config/i386/driver-i386.c (host_detect_local_cpu): Add -mlwp to the diff --git a/gcc/ddg.c b/gcc/ddg.c index 23fa6fa2aeb0..f51c5dc4e296 100644 --- a/gcc/ddg.c +++ b/gcc/ddg.c @@ -359,9 +359,13 @@ add_inter_loop_mem_dep (ddg_ptr g, ddg_node_ptr from, ddg_node_ptr to) if (mem_write_insn_p (from->insn)) { if (mem_read_insn_p (to->insn)) - create_ddg_dep_no_link (g, from, to, TRUE_DEP, MEM_DEP, 1); + create_ddg_dep_no_link (g, from, to, + DEBUG_INSN_P (to->insn) + ? ANTI_DEP : TRUE_DEP, MEM_DEP, 1); else if (from->cuid != to->cuid) - create_ddg_dep_no_link (g, from, to, OUTPUT_DEP, MEM_DEP, 1); + create_ddg_dep_no_link (g, from, to, + DEBUG_INSN_P (to->insn) + ? ANTI_DEP : OUTPUT_DEP, MEM_DEP, 1); } else { @@ -369,8 +373,11 @@ add_inter_loop_mem_dep (ddg_ptr g, ddg_node_ptr from, ddg_node_ptr to) return; else if (from->cuid != to->cuid) { - create_ddg_dep_no_link (g, from, to, ANTI_DEP, MEM_DEP, 1); - create_ddg_dep_no_link (g, to, from, TRUE_DEP, MEM_DEP, 1); + create_ddg_dep_no_link (g, from, to, ANTI_DEP, MEM_DEP, 1); + if (DEBUG_INSN_P (from->insn) || DEBUG_INSN_P (to->insn)) + create_ddg_dep_no_link (g, to, from, ANTI_DEP, MEM_DEP, 1); + else + create_ddg_dep_no_link (g, to, from, TRUE_DEP, MEM_DEP, 1); } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fbe13dd4fefe..7d245b73041a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-12-07 Jakub Jelinek + + PR debug/42244 + * gcc.dg/debug/pr42244.c: New test. + 2009-12-07 Jakub Jelinek * gcc.target/i386/sse-12.c: Add -mabm to dg-options, mention diff --git a/gcc/testsuite/gcc.dg/debug/pr42244.c b/gcc/testsuite/gcc.dg/debug/pr42244.c new file mode 100644 index 000000000000..ff2542873363 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/pr42244.c @@ -0,0 +1,13 @@ +/* PR debug/42444 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -g -fmodulo-sched -ffloat-store" } */ + +extern int a, b; + +double +foo (double x) +{ + for (; a > b; a--) + x *= (double) a; + return x; +}