From: Richard Biener Date: Mon, 3 Jun 2019 10:17:16 +0000 (+0000) Subject: re PR tree-optimization/90716 (gcc generates wrong debug information at -O2) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=efb34006e9c3f9592edd77bda2e57ce14c65579b;p=gcc.git re PR tree-optimization/90716 (gcc generates wrong debug information at -O2) 2019-06-03 Richard Biener PR tree-optimization/90716 * tree-loop-distribution.c (destroy_loop): Process blocks in correct order. * gcc.dg/guality/pr90716.c: New testcase. From-SVN: r271858 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f887329e929..7aabe88b4d8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-06-03 Richard Biener + + PR tree-optimization/90716 + * tree-loop-distribution.c (destroy_loop): Process blocks in + correct order. + 2019-06-03 Prathamesh Kulkarni PR target/88837 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 93b1f09b9de..75e38b8cf6a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-06-03 Richard Biener + + PR tree-optimization/90716 + * gcc.dg/guality/pr90716.c: New testcase. + 2019-06-03 Prathamesh Kulkarni PR target/88837 diff --git a/gcc/testsuite/gcc.dg/guality/pr90716.c b/gcc/testsuite/gcc.dg/guality/pr90716.c new file mode 100644 index 00000000000..b2f5c9d146e --- /dev/null +++ b/gcc/testsuite/gcc.dg/guality/pr90716.c @@ -0,0 +1,25 @@ +/* { dg-do run } */ +/* { dg-options "-g" } */ + +void __attribute__((noinline)) +optimize_me_not () +{ + __asm__ volatile ("" : : : "memory"); +} +int a[7][8]; +int main() +{ + int b, j; + b = 0; + for (; b < 7; b++) { + j = 0; + for (; j < 8; j++) + a[b][j] = 0; + } + /* j may very well be optimized out, so we cannot test for j == 8. + Instead test j + 1 which will make the test UNSUPPORTED if i + is optimized out. Since the test previously had wrong debug + with j == 0 this is acceptable. */ + optimize_me_not(); /* { dg-final { gdb-test . "j + 1" "9" } } */ + return 0; +} diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c index b2f2fd225a4..88f8e7a09d1 100644 --- a/gcc/tree-loop-distribution.c +++ b/gcc/tree-loop-distribution.c @@ -1104,15 +1104,13 @@ destroy_loop (struct loop *loop) gimple_stmt_iterator dst_gsi = gsi_after_labels (exit->dest); bool safe_p = single_pred_p (exit->dest); - i = nbbs; - do + for (unsigned i = 0; i < nbbs; ++i) { /* We have made sure to not leave any dangling uses of SSA names defined in the loop. With the exception of virtuals. Make sure we replace all uses of virtual defs that will remain outside of the loop with the bare symbol as delete_basic_block will release them. */ - --i; for (gphi_iterator gsi = gsi_start_phis (bbs[i]); !gsi_end_p (gsi); gsi_next (&gsi)) { @@ -1147,7 +1145,6 @@ destroy_loop (struct loop *loop) gsi_next (&gsi); } } - while (i != 0); redirect_edge_pred (exit, src); exit->flags &= ~(EDGE_TRUE_VALUE|EDGE_FALSE_VALUE);