+2014-09-08 Richard Biener <rguenther@suse.de>
+
+ PR bootstrap/63204
+ * cfgloop.c (mark_loop_for_removal): Track former header
+ unconditionally.
+ * cfgloop.h (struct loop): Add former_header member unconditionally.
+ * loop-init.c (fix_loop_structure): Enable bogus loop removal
+ diagnostic unconditionally.
+
2014-09-07 Venkataramanan Kumar <venkataramanan.kumar@linaro.org>
PR target/63190
void
mark_loop_for_removal (loop_p loop)
{
-#ifdef ENABLE_CHECKING
loop->former_header = loop->header;
-#endif
loop->header = NULL;
loop->latch = NULL;
loops_state_set (LOOPS_NEED_FIXUP);
/* Number of iteration analysis data for RTL. */
struct niter_desc *simple_loop_desc;
-#ifdef ENABLE_CHECKING
/* For sanity checking during loop fixup we record here the former
loop header for loops marked for removal. Note that this prevents
the basic-block from being collected but its index can still be
reused. */
basic_block former_header;
-#endif
};
/* Flags for state of loop structure. */
}
/* Remove the loop. */
-#ifdef ENABLE_CHECKING
if (loop->header)
loop->former_header = loop->header;
else
gcc_assert (loop->former_header != NULL);
-#endif
loop->header = NULL;
flow_loop_tree_node_remove (loop);
}
FOR_EACH_VEC_ELT (*get_loops (cfun), i, loop)
if (loop && loop->header == NULL)
{
-#ifdef ENABLE_CHECKING
if (dump_file
&& ((unsigned) loop->former_header->index
< basic_block_info_for_fn (cfun)->length ()))
former_header->loop_father->header->index);
}
}
-#endif
(*get_loops (cfun))[i] = NULL;
flow_loop_free (loop);
}