@@ -1,5 +1,11 @@
2010-10-20 Sebastian Pop <sebastian.pop@amd.com>
+ * tree-if-conv.c (if_convertible_loop_p_1): Do not call
+ compute_data_dependences_for_loop.
+ (if_convertible_loop_p): Do not free refs and ddrs.
+
+2010-10-20 Sebastian Pop <sebastian.pop@amd.com>
+
PR tree-optimization/46029
* doc/invoke.texi (-ftree-loop-if-convert-stores): Update description.
* tree-if-conv.c (has_unaligned_memory_refs): New.
@@ -855,24 +855,15 @@ predicate_bbs (loop_p loop)
}
/* Return true when LOOP is if-convertible. This is a helper function
- for if_convertible_loop_p. REFS and DDRS are initialized and freed
- in if_convertible_loop_p. */
+ for if_convertible_loop_p. */
static bool
-if_convertible_loop_p_1 (struct loop *loop,
- VEC (data_reference_p, heap) **refs,
- VEC (ddr_p, heap) **ddrs)
+if_convertible_loop_p_1 (struct loop *loop)
{
bool res;
unsigned int i;
basic_block exit_bb = NULL;
- /* Don't if-convert the loop when the data dependences cannot be
- computed: the loop won't be vectorized in that case. */
- res = compute_data_dependences_for_loop (loop, true, refs, ddrs);
- if (!res)
- return false;
-
calculate_dominance_info (CDI_DOMINATORS);
/* Allow statements that can be handled during if-conversion. */
@@ -934,9 +925,6 @@ if_convertible_loop_p (struct loop *loop)
{
edge e;
edge_iterator ei;
- bool res = false;
- VEC (data_reference_p, heap) *refs;
- VEC (ddr_p, heap) *ddrs;
/* Handle only innermost loop. */
if (!loop || loop->inner)
@@ -968,13 +956,7 @@ if_convertible_loop_p (struct loop *loop)
if (loop_exit_edge_p (loop, e))
return false;
- refs = VEC_alloc (data_reference_p, heap, 5);
- ddrs = VEC_alloc (ddr_p, heap, 25);
- res = if_convertible_loop_p_1 (loop, &refs, &ddrs);
-
- free_data_refs (refs);
- free_dependence_relations (ddrs);
- return res;
+ return if_convertible_loop_p_1 (loop);
}
/* Basic block BB has two predecessors. Using predecessor's bb