Commit efb34006 by Richard Biener Committed by Richard Biener

re PR tree-optimization/90716 (gcc generates wrong debug information at -O2)

2019-06-03  Richard Biener  <rguenther@suse.de>

	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
parent 3a0afad0
2019-06-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/90716
* tree-loop-distribution.c (destroy_loop): Process blocks in
correct order.
2019-06-03 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> 2019-06-03 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
PR target/88837 PR target/88837
......
2019-06-03 Richard Biener <rguenther@suse.de>
PR tree-optimization/90716
* gcc.dg/guality/pr90716.c: New testcase.
2019-06-03 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> 2019-06-03 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
PR target/88837 PR target/88837
......
/* { 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;
}
...@@ -1104,15 +1104,13 @@ destroy_loop (struct loop *loop) ...@@ -1104,15 +1104,13 @@ destroy_loop (struct loop *loop)
gimple_stmt_iterator dst_gsi = gsi_after_labels (exit->dest); gimple_stmt_iterator dst_gsi = gsi_after_labels (exit->dest);
bool safe_p = single_pred_p (exit->dest); bool safe_p = single_pred_p (exit->dest);
i = nbbs; for (unsigned i = 0; i < nbbs; ++i)
do
{ {
/* We have made sure to not leave any dangling uses of SSA /* We have made sure to not leave any dangling uses of SSA
names defined in the loop. With the exception of virtuals. names defined in the loop. With the exception of virtuals.
Make sure we replace all uses of virtual defs that will remain Make sure we replace all uses of virtual defs that will remain
outside of the loop with the bare symbol as delete_basic_block outside of the loop with the bare symbol as delete_basic_block
will release them. */ will release them. */
--i;
for (gphi_iterator gsi = gsi_start_phis (bbs[i]); !gsi_end_p (gsi); for (gphi_iterator gsi = gsi_start_phis (bbs[i]); !gsi_end_p (gsi);
gsi_next (&gsi)) gsi_next (&gsi))
{ {
...@@ -1147,7 +1145,6 @@ destroy_loop (struct loop *loop) ...@@ -1147,7 +1145,6 @@ destroy_loop (struct loop *loop)
gsi_next (&gsi); gsi_next (&gsi);
} }
} }
while (i != 0);
redirect_edge_pred (exit, src); redirect_edge_pred (exit, src);
exit->flags &= ~(EDGE_TRUE_VALUE|EDGE_FALSE_VALUE); exit->flags &= ~(EDGE_TRUE_VALUE|EDGE_FALSE_VALUE);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment