Commit e2d3e85c by Ilya Leoshkevich Committed by Ilya Leoshkevich

Free dominance info at the beginning of pass_jump_after_combine

try_forward_edges does not update dominance info, and merge_blocks
relies on it being up-to-date.  In PR92430 stale dominance info makes
merge_blocks produce a loop in the dominator tree, which in turn makes
delete_basic_block loop forever.

Fix by freeing dominance info at the beginning of cleanup_cfg.

gcc/ChangeLog:

2019-11-12  Ilya Leoshkevich  <iii@linux.ibm.com>

	PR rtl-optimization/92430
	* cfgcleanup.c (pass_jump_after_combine::execute): Free
	dominance info at the beginning.

gcc/testsuite/ChangeLog:

2019-11-12  Ilya Leoshkevich  <iii@linux.ibm.com>

	PR rtl-optimization/92430
	* gcc.dg/pr92430.c: New test (from Arseny Solokha).

From-SVN: r278095
parent 41098a37
2019-11-12 Ilya Leoshkevich <iii@linux.ibm.com>
PR rtl-optimization/92430
* cfgcleanup.c (pass_jump_after_combine::execute): Free
dominance info at the beginning.
2019-11-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/92460
......@@ -3311,6 +3311,8 @@ public:
unsigned int
pass_jump_after_combine::execute (function *)
{
/* Jump threading does not keep dominators up-to-date. */
free_dominance_info (CDI_DOMINATORS);
cleanup_cfg (flag_thread_jumps ? CLEANUP_THREADING : 0);
return 0;
}
......
2019-11-12 Ilya Leoshkevich <iii@linux.ibm.com>
PR rtl-optimization/92430
* gcc.dg/pr92430.c: New test (from Arseny Solokha).
2019-11-12 Richard Biener <rguenther@suse.de>
PR tree-optimization/92461
......
// PR rtl-optimization/92430
// { dg-do compile }
// { dg-options "-Os -fno-if-conversion -fno-tree-dce -fno-tree-loop-optimize -fno-tree-vrp" }
int eb, ko;
void
e9 (int pe, int lx)
{
int ir;
for (ir = 0; ir < 1; ++ir)
{
for (ko = 0; ko < 1; ++ko)
{
for (eb = 0; eb < 1; ++eb)
ko += pe;
for (ko = 0; ko < 1; ++ko)
;
}
pe = ir = lx;
}
}
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