Use safe_dyn_cast instead of dyn_cast in find_loop_guard to fix PR92608.

2019-11-22  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

	PR tree-optimization/92608
	* tree-ssa-loop-unswitch.c (find_loop_guard): Use safe_dyn_cast instead
	of dyn_cast.

testsuite/
	* gcc.dg/torture/pr92608.c: New test.

From-SVN: r278598
This commit is contained in:
Prathamesh Kulkarni 2019-11-21 20:20:36 +00:00 committed by Prathamesh Kulkarni
parent d2993abd39
commit b30e83f809
4 changed files with 37 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2019-11-22 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
PR tree-optimization/92608
* tree-ssa-loop-unswitch.c (find_loop_guard): Use safe_dyn_cast instead
of dyn_cast.
2019-11-21 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/predicates.md (extra_insn_branch_comparison_operator):

View File

@ -1,3 +1,8 @@
2019-11-22 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
PR tree-optimization/92608
* gcc.dg/torture/pr92608.c: New test.
2019-11-21 Iain Sandoe <iain@sandoe.co.uk>
PR testsuite/92619

View File

@ -0,0 +1,25 @@
/* { dg-do compile } */
/* { dg-additional-options "-funswitch-loops" } */
int op, bs;
void
q0 (void)
{
op += 1 % (op == bs);
}
void __attribute__ ((returns_twice))
co (void)
{
}
void __attribute__ ((simd))
uq (void)
{
q0 ();
co ();
while (bs < 1)
++bs;
}

View File

@ -586,7 +586,7 @@ find_loop_guard (class loop *loop)
next = single_succ (header);
else
{
cond = dyn_cast <gcond *> (last_stmt (header));
cond = safe_dyn_cast <gcond *> (last_stmt (header));
if (! cond)
return NULL;
extract_true_false_edges_from_block (header, &te, &fe);