diff --git a/gcc/df-scan.cc b/gcc/df-scan.cc index 5df70e957516b4ca5c81d18902ea88c267ac4c50..9b2375d561bcd96173fe2bfa45ea55567e81dc9a 100644 --- a/gcc/df-scan.cc +++ b/gcc/df-scan.cc @@ -1769,13 +1769,15 @@ df_insn_change_bb (rtx_insn *insn, basic_block new_bb) if (!INSN_P (insn)) return; - df_set_bb_dirty (new_bb); + if (!DEBUG_INSN_P (insn)) + df_set_bb_dirty (new_bb); if (old_bb) { if (dump_file) fprintf (dump_file, " from %d to %d\n", old_bb->index, new_bb->index); - df_set_bb_dirty (old_bb); + if (!DEBUG_INSN_P (insn)) + df_set_bb_dirty (old_bb); } else if (dump_file) diff --git a/gcc/testsuite/gcc.dg/pr104459.c b/gcc/testsuite/gcc.dg/pr104459.c new file mode 100644 index 0000000000000000000000000000000000000000..de8a643d9e218f1c4dbb53d59727bee1267b8f51 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr104459.c @@ -0,0 +1,38 @@ +/* PR rtl-optimization/104459 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -funswitch-loops -fno-tree-dce -fcompare-debug -w" } */ + +void +foo (int x, int y) +{ + unsigned int a; + + for (;;) + { + short int *p = (short int *) &x; + unsigned int q = 0; + + a /= 2; + if (a) + { + q -= y; + while (q) + ; + } + + if (x) + { + for (q = 0; q != 1; q += 2) + { + unsigned int n; + + n = *p ? 0 : q; + y += n < 1; + + n = a || *p; + if (n % x == 0) + y /= x; + } + } + } +}