Commit 1b7f61eb by Tom de Vries Committed by Tom de Vries

Fix try_transform_to_exit_first_loop_alt

2015-06-08  Tom de Vries  <tom@codesourcery.com>

	PR tree-optimization/66442
	* gimple-iterator.h (gimple_seq_nondebug_singleton_p): Add function.
	* tree-parloops.c (try_transform_to_exit_first_loop_alt): Return false
	if the loop latch is not a singleton.  Use
	gimple_seq_nondebug_singleton_p instead of gimple_seq_singleton_p.

From-SVN: r224218
parent aa4e0c43
2015-06-08 Tom de Vries <tom@codesourcery.com>
PR tree-optimization/66442
* gimple-iterator.h (gimple_seq_nondebug_singleton_p): Add function.
* tree-parloops.c (try_transform_to_exit_first_loop_alt): Return false
if the loop latch is not a singleton. Use
gimple_seq_nondebug_singleton_p instead of gimple_seq_singleton_p.
2015-06-08 Marek Polacek <polacek@redhat.com>
PR sanitizer/66452
......
......@@ -345,4 +345,39 @@ gsi_seq (gimple_stmt_iterator i)
return *i.seq;
}
/* Determine whether SEQ is a nondebug singleton. */
static inline bool
gimple_seq_nondebug_singleton_p (gimple_seq seq)
{
gimple_stmt_iterator gsi;
gsi.ptr = gimple_seq_first (seq);
gsi.seq = &seq;
gsi.bb = NULL;
/* Not a singleton if the sequence is empty. */
if (gsi_end_p (gsi))
return false;
/* Find a nondebug gimple. */
while (!gsi_end_p (gsi)
&& is_gimple_debug (gsi_stmt (gsi)))
gsi_next (&gsi);
/* Not a nondebug singleton if there's no nondebug gimple. */
if (is_gimple_debug (gsi_stmt (gsi)))
return false;
/* Find the next nondebug gimple. */
while (!gsi_end_p (gsi)
&& is_gimple_debug (gsi_stmt (gsi)))
gsi_next (&gsi);
/* If there's a next nondebug gimple, it's not a nondebug singleton. */
if (!gsi_end_p (gsi))
return false;
return true;
}
#endif /* GCC_GIMPLE_ITERATOR_H */
......@@ -1769,8 +1769,8 @@ try_transform_to_exit_first_loop_alt (struct loop *loop,
tree nit)
{
/* Check whether the latch contains a single statement. */
if (!gimple_seq_singleton_p (bb_seq (loop->latch)))
return true;
if (!gimple_seq_nondebug_singleton_p (bb_seq (loop->latch)))
return false;
/* Check whether the latch contains the loop iv increment. */
edge back = single_succ_edge (loop->latch);
......
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