thread through a joiner which has the latch edge.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205003
138bc75d-0d04-0410-961f-
82ee72b054a4
+2013-11-19 Jeff Law <law@redhat.com>
+
+ * tree-ssa-threadupdate.c (thread_through_loop_header): Do not
+ thread through a joiner which has the latch edge.
+
2013-11-19 Jan Hubicka <jh@suse.cz>
* md.texi (setmem): Document new parameter.
if (single_succ_p (header))
goto fail;
+ /* If we threaded the latch using a joiner block, we cancel the
+ threading opportunity out of an abundance of caution. However,
+ still allow threading from outside to inside the loop. */
if (latch->aux)
{
vec<jump_thread_edge *> *path = THREAD_PATH (latch);
if ((*path)[1]->type == EDGE_COPY_SRC_JOINER_BLOCK)
- goto fail;
+ {
+ delete_jump_thread_path (path);
+ latch->aux = NULL;
+ }
+ }
+
+ if (latch->aux)
+ {
+ vec<jump_thread_edge *> *path = THREAD_PATH (latch);
tgt_edge = (*path)[1]->e;
tgt_bb = tgt_edge->dest;
}