This patch from Jakub should fix issues with my previous patch.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Richard.

2012-09-20  Jakub Jelinek  <ja...@redhat.com>

        PR tree-optimization/54629
        * tree-loop-distribution.c (classify_partition): Free loop nest only
        after freeing ddr.  Free ddr and loop nest also if successful.

--- gcc/tree-loop-distribution.c.jj     2012-09-20 09:22:02.000000000 +0200
+++ gcc/tree-loop-distribution.c        2012-09-20 09:35:05.953016313 +0200
@@ -1019,10 +1019,10 @@ classify_partition (loop_p loop, struct
       ddr = initialize_data_dependence_relation (single_load, single_store,
                                                 loops);
       compute_affine_dependence (ddr, loop);
-      VEC_free (loop_p, heap, loops);
       if (DDR_ARE_DEPENDENT (ddr) == chrec_dont_know)
        {
          free_dependence_relation (ddr);
+         VEC_free (loop_p, heap, loops);
          return;
        }
       if (DDR_ARE_DEPENDENT (ddr) != chrec_known)
@@ -1030,6 +1030,7 @@ classify_partition (loop_p loop, struct
          if (DDR_NUM_DIST_VECTS (ddr) == 0)
            {
              free_dependence_relation (ddr);
+             VEC_free (loop_p, heap, loops);
              return;
            }
          lambda_vector dist_v;
@@ -1040,10 +1041,13 @@ classify_partition (loop_p loop, struct
              if (dist > 0 && !DDR_REVERSED_P (ddr))
                {
                  free_dependence_relation (ddr);
+                 VEC_free (loop_p, heap, loops);
                  return;
                }
            }
        }
+      free_dependence_relation (ddr);
+      VEC_free (loop_p, heap, loops);
       partition->kind = PKIND_MEMCPY;
       partition->main_dr = single_store;
       partition->secondary_dr = single_load;

Reply via email to