Patchwork [4/6] if-convert even when the data dependences cannot be computed.

login
register
mail settings
Submitter Sebastian Pop
Date Oct. 28, 2010, 10:58 p.m.
Message ID <1288306702-5543-5-git-send-email-sebpop@gmail.com>
Download mbox | patch
Permalink /patch/69510/
State New
Headers show

Comments

Sebastian Pop - Oct. 28, 2010, 10:58 p.m.
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.
---
 gcc/ChangeLog      |    6 ++++++
 gcc/tree-if-conv.c |   24 +++---------------------
 2 files changed, 9 insertions(+), 21 deletions(-)

Patch

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f14d9b1..4439226 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index cb4828a..f05213e 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -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