* [PATCH] Fix PR47002: memory leaks.
@ 2010-12-22 6:42 Sebastian Pop
2010-12-22 14:35 ` Richard Guenther
2010-12-22 22:56 ` Jack Howarth
0 siblings, 2 replies; 7+ messages in thread
From: Sebastian Pop @ 2010-12-22 6:42 UTC (permalink / raw)
To: gcc-patches; +Cc: rguenther, Sebastian Pop
Hi,
Although I am not able to reproduce the error reported on
http://gcc.gnu.org/PR47002 I went and fixed all the memory leaks I
found related to the tree-loop-distribution.c and tree-data-ref.c
reported by valgrind --leak-check=full ./cc1 -O3 pr47002.i
I am testing this patch on amd64-linux. Ok for trunk after test?
Thanks,
Sebastian
2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/47002
* tree-data-ref.c (compute_data_dependences_for_loop): Free vloops.
(free_dependence_relations): Do not free loop_nest.
(build_rdg): Pass in datarefs and dependence_relations.
(free_rdg): Also free the data on edges.
* tree-data-ref.h (build_rdg): Update declaration.
* tree-loop-distribution.c (rdg_flag_loop_exits): Free conds.
(rdg_build_partitions): Free comps.
(ldist_gen): Free components.
(distribute_loop): Update call to build_rdg. Allocate and free
datarefs and dependence_relations.
* tree-vect-loop.c (destroy_loop_vec_info): Free
LOOP_VINFO_MAY_ALIAS_DDRS.
* tree-vect-slp.c (destroy_bb_vec_info): Call free_data_refs and
free_dependence_relations.
---
gcc/ChangeLog | 18 +++++++++++
gcc/tree-data-ref.c | 70 ++++++++++++++++++------------------------
gcc/tree-data-ref.h | 3 +-
gcc/tree-loop-distribution.c | 15 ++++++++-
gcc/tree-vect-loop.c | 1 +
gcc/tree-vect-slp.c | 2 +
6 files changed, 66 insertions(+), 43 deletions(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 944f806..9fcdd6c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,21 @@
+2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
+
+ PR tree-optimization/47002
+ * tree-data-ref.c (compute_data_dependences_for_loop): Free vloops.
+ (free_dependence_relations): Do not free loop_nest.
+ (build_rdg): Pass in datarefs and dependence_relations.
+ (free_rdg): Also free the data on edges.
+ * tree-data-ref.h (build_rdg): Update declaration.
+ * tree-loop-distribution.c (rdg_flag_loop_exits): Free conds.
+ (rdg_build_partitions): Free comps.
+ (ldist_gen): Free components.
+ (distribute_loop): Update call to build_rdg. Allocate and free
+ datarefs and dependence_relations.
+ * tree-vect-loop.c (destroy_loop_vec_info): Free
+ LOOP_VINFO_MAY_ALIAS_DDRS.
+ * tree-vect-slp.c (destroy_bb_vec_info): Call free_data_refs and
+ free_dependence_relations.
+
2010-12-17 Paolo Bonzini <bonzini@gnu.org>
PR c/20385
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index a6d0731..dc14989 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -4274,6 +4274,9 @@ compute_data_dependences_for_loop (struct loop *loop,
compute_all_dependences (*datarefs, dependence_relations, vloops,
compute_self_and_read_read_dependences);
+ if (vloops)
+ VEC_free (loop_p, heap, vloops);
+
if (dump_file && (dump_flags & TDF_STATS))
{
fprintf (dump_file, "Dependence tester statistics:\n");
@@ -4454,22 +4457,11 @@ free_dependence_relations (VEC (ddr_p, heap) *dependence_relations)
{
unsigned int i;
struct data_dependence_relation *ddr;
- VEC (loop_p, heap) *loop_nest = NULL;
FOR_EACH_VEC_ELT (ddr_p, dependence_relations, i, ddr)
- {
- if (ddr == NULL)
- continue;
- if (loop_nest == NULL)
- loop_nest = DDR_LOOP_NEST (ddr);
- else
- gcc_assert (DDR_LOOP_NEST (ddr) == NULL
- || DDR_LOOP_NEST (ddr) == loop_nest);
+ if (ddr)
free_dependence_relation (ddr);
- }
- if (loop_nest)
- VEC_free (loop_p, heap, loop_nest);
VEC_free (ddr_p, heap, dependence_relations);
}
@@ -4905,37 +4897,23 @@ build_empty_rdg (int n_stmts)
scalar dependence. */
struct graph *
-build_rdg (struct loop *loop)
+build_rdg (struct loop *loop,
+ VEC (ddr_p, heap) **dependence_relations,
+ VEC (data_reference_p, heap) **datarefs)
{
- int nb_data_refs = 10;
struct graph *rdg = NULL;
- VEC (ddr_p, heap) *dependence_relations;
- VEC (data_reference_p, heap) *datarefs;
- VEC (gimple, heap) *stmts = VEC_alloc (gimple, heap, nb_data_refs);
-
- dependence_relations = VEC_alloc (ddr_p, heap, nb_data_refs * nb_data_refs) ;
- datarefs = VEC_alloc (data_reference_p, heap, nb_data_refs);
- compute_data_dependences_for_loop (loop,
- false,
- &datarefs,
- &dependence_relations);
-
- if (!known_dependences_p (dependence_relations))
- {
- free_dependence_relations (dependence_relations);
- free_data_refs (datarefs);
- VEC_free (gimple, heap, stmts);
-
- return rdg;
- }
+ VEC (gimple, heap) *stmts = VEC_alloc (gimple, heap, 10);
- stmts_from_loop (loop, &stmts);
- rdg = build_empty_rdg (VEC_length (gimple, stmts));
+ compute_data_dependences_for_loop (loop, false, datarefs,
+ dependence_relations);
- rdg->indices = htab_create (nb_data_refs, hash_stmt_vertex_info,
- eq_stmt_vertex_info, hash_stmt_vertex_del);
- create_rdg_vertices (rdg, stmts);
- create_rdg_edges (rdg, dependence_relations);
+ if (known_dependences_p (*dependence_relations))
+ {
+ stmts_from_loop (loop, &stmts);
+ rdg = build_empty_rdg (VEC_length (gimple, stmts));
+ create_rdg_vertices (rdg, stmts);
+ create_rdg_edges (rdg, *dependence_relations);
+ }
VEC_free (gimple, heap, stmts);
return rdg;
@@ -4949,7 +4927,19 @@ free_rdg (struct graph *rdg)
int i;
for (i = 0; i < rdg->n_vertices; i++)
- free (rdg->vertices[i].data);
+ {
+ struct vertex *v = &(rdg->vertices[i]);
+ struct graph_edge *e;
+
+ for (e = v->succ; e; e = e->succ_next)
+ {
+ free_dependence_relation (RDGE_RELATION (e));
+ if (e->data)
+ free (e->data);
+ }
+
+ free (v->data);
+ }
htab_delete (rdg->indices);
free_graph (rdg);
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h
index b4f317f..8585b2b 100644
--- a/gcc/tree-data-ref.h
+++ b/gcc/tree-data-ref.h
@@ -577,7 +577,8 @@ typedef struct rdg_edge
#define RDGE_LEVEL(E) ((struct rdg_edge *) ((E)->data))->level
#define RDGE_RELATION(E) ((struct rdg_edge *) ((E)->data))->relation
-struct graph *build_rdg (struct loop *);
+struct graph *build_rdg (struct loop *, VEC (ddr_p, heap) **,
+ VEC (data_reference_p, heap) **);
struct graph *build_empty_rdg (int);
void free_rdg (struct graph *);
diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
index a9ee67f..d095e8a 100644
--- a/gcc/tree-loop-distribution.c
+++ b/gcc/tree-loop-distribution.c
@@ -653,6 +653,8 @@ rdg_flag_loop_exits (struct graph *rdg, bitmap loops, bitmap partition,
BITMAP_FREE (new_loops);
}
+
+ VEC_free (gimple, heap, conds);
}
/* Returns a bitmap in which all the statements needed for computing
@@ -965,6 +967,7 @@ rdg_build_partitions (struct graph *rdg, VEC (rdgc, heap) *components,
VEC_free (int, heap, foo);
free_rdg_components (comps);
+ VEC_free (rdgc, heap, comps);
}
add_scalar_computations_to_partition (rdg, *partitions, partition);
@@ -1129,6 +1132,7 @@ ldist_gen (struct loop *loop, struct graph *rdg,
VEC_free (int, heap, other_stores);
VEC_free (bitmap, heap, partitions);
free_rdg_components (components);
+ VEC_free (rdgc, heap, components);
return nbp;
}
@@ -1146,6 +1150,8 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
gimple s;
unsigned i;
VEC (int, heap) *vertices;
+ VEC (ddr_p, heap) *dependence_relations;
+ VEC (data_reference_p, heap) *datarefs;
if (loop->num_nodes > 2)
{
@@ -1157,7 +1163,9 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
return res;
}
- rdg = build_rdg (loop);
+ datarefs = VEC_alloc (data_reference_p, heap, 10);
+ dependence_relations = VEC_alloc (ddr_p, heap, 100);
+ rdg = build_rdg (loop, &dependence_relations, &datarefs);
if (!rdg)
{
@@ -1166,6 +1174,8 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
"FIXME: Loop %d not distributed: failed to build the RDG.\n",
loop->num);
+ free_dependence_relations (dependence_relations);
+ free_data_refs (datarefs);
return res;
}
@@ -1191,7 +1201,8 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
res = ldist_gen (loop, rdg, vertices);
VEC_free (int, heap, vertices);
free_rdg (rdg);
-
+ free_dependence_relations (dependence_relations);
+ free_data_refs (datarefs);
return res;
}
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 2644c9e..3aa21c7 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -794,6 +794,7 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo, bool clean_stmts)
free_data_refs (LOOP_VINFO_DATAREFS (loop_vinfo));
free_dependence_relations (LOOP_VINFO_DDRS (loop_vinfo));
VEC_free (gimple, heap, LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo));
+ VEC_free (ddr_p, heap, LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo));
free (loop_vinfo);
loop->aux = NULL;
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index fdaaff2..00fb345 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -1457,6 +1457,8 @@ destroy_bb_vec_info (bb_vec_info bb_vinfo)
free_stmt_vec_info (stmt);
}
+ free_data_refs (BB_VINFO_DATAREFS (bb_vinfo));
+ free_dependence_relations (BB_VINFO_DDRS (bb_vinfo));
VEC_free (gimple, heap, BB_VINFO_STRIDED_STORES (bb_vinfo));
VEC_free (slp_instance, heap, BB_VINFO_SLP_INSTANCES (bb_vinfo));
free (bb_vinfo);
--
1.7.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Fix PR47002: memory leaks.
2010-12-22 6:42 [PATCH] Fix PR47002: memory leaks Sebastian Pop
@ 2010-12-22 14:35 ` Richard Guenther
2010-12-22 22:56 ` Jack Howarth
1 sibling, 0 replies; 7+ messages in thread
From: Richard Guenther @ 2010-12-22 14:35 UTC (permalink / raw)
To: Sebastian Pop; +Cc: gcc-patches, rguenther
On Wed, Dec 22, 2010 at 7:17 AM, Sebastian Pop <sebpop@gmail.com> wrote:
> Hi,
>
> Although I am not able to reproduce the error reported on
> http://gcc.gnu.org/PR47002 I went and fixed all the memory leaks I
> found related to the tree-loop-distribution.c and tree-data-ref.c
> reported by valgrind --leak-check=full ./cc1 -O3 pr47002.i
> I am testing this patch on amd64-linux. Ok for trunk after test?
Ok.
Thanks,
Richard.
> Thanks,
> Sebastian
>
> 2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
>
> PR tree-optimization/47002
> * tree-data-ref.c (compute_data_dependences_for_loop): Free vloops.
> (free_dependence_relations): Do not free loop_nest.
> (build_rdg): Pass in datarefs and dependence_relations.
> (free_rdg): Also free the data on edges.
> * tree-data-ref.h (build_rdg): Update declaration.
> * tree-loop-distribution.c (rdg_flag_loop_exits): Free conds.
> (rdg_build_partitions): Free comps.
> (ldist_gen): Free components.
> (distribute_loop): Update call to build_rdg. Allocate and free
> datarefs and dependence_relations.
> * tree-vect-loop.c (destroy_loop_vec_info): Free
> LOOP_VINFO_MAY_ALIAS_DDRS.
> * tree-vect-slp.c (destroy_bb_vec_info): Call free_data_refs and
> free_dependence_relations.
> ---
> gcc/ChangeLog | 18 +++++++++++
> gcc/tree-data-ref.c | 70 ++++++++++++++++++------------------------
> gcc/tree-data-ref.h | 3 +-
> gcc/tree-loop-distribution.c | 15 ++++++++-
> gcc/tree-vect-loop.c | 1 +
> gcc/tree-vect-slp.c | 2 +
> 6 files changed, 66 insertions(+), 43 deletions(-)
>
> diff --git a/gcc/ChangeLog b/gcc/ChangeLog
> index 944f806..9fcdd6c 100644
> --- a/gcc/ChangeLog
> +++ b/gcc/ChangeLog
> @@ -1,3 +1,21 @@
> +2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
> +
> + PR tree-optimization/47002
> + * tree-data-ref.c (compute_data_dependences_for_loop): Free vloops.
> + (free_dependence_relations): Do not free loop_nest.
> + (build_rdg): Pass in datarefs and dependence_relations.
> + (free_rdg): Also free the data on edges.
> + * tree-data-ref.h (build_rdg): Update declaration.
> + * tree-loop-distribution.c (rdg_flag_loop_exits): Free conds.
> + (rdg_build_partitions): Free comps.
> + (ldist_gen): Free components.
> + (distribute_loop): Update call to build_rdg. Allocate and free
> + datarefs and dependence_relations.
> + * tree-vect-loop.c (destroy_loop_vec_info): Free
> + LOOP_VINFO_MAY_ALIAS_DDRS.
> + * tree-vect-slp.c (destroy_bb_vec_info): Call free_data_refs and
> + free_dependence_relations.
> +
> 2010-12-17 Paolo Bonzini <bonzini@gnu.org>
>
> PR c/20385
> diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
> index a6d0731..dc14989 100644
> --- a/gcc/tree-data-ref.c
> +++ b/gcc/tree-data-ref.c
> @@ -4274,6 +4274,9 @@ compute_data_dependences_for_loop (struct loop *loop,
> compute_all_dependences (*datarefs, dependence_relations, vloops,
> compute_self_and_read_read_dependences);
>
> + if (vloops)
> + VEC_free (loop_p, heap, vloops);
> +
> if (dump_file && (dump_flags & TDF_STATS))
> {
> fprintf (dump_file, "Dependence tester statistics:\n");
> @@ -4454,22 +4457,11 @@ free_dependence_relations (VEC (ddr_p, heap) *dependence_relations)
> {
> unsigned int i;
> struct data_dependence_relation *ddr;
> - VEC (loop_p, heap) *loop_nest = NULL;
>
> FOR_EACH_VEC_ELT (ddr_p, dependence_relations, i, ddr)
> - {
> - if (ddr == NULL)
> - continue;
> - if (loop_nest == NULL)
> - loop_nest = DDR_LOOP_NEST (ddr);
> - else
> - gcc_assert (DDR_LOOP_NEST (ddr) == NULL
> - || DDR_LOOP_NEST (ddr) == loop_nest);
> + if (ddr)
> free_dependence_relation (ddr);
> - }
>
> - if (loop_nest)
> - VEC_free (loop_p, heap, loop_nest);
> VEC_free (ddr_p, heap, dependence_relations);
> }
>
> @@ -4905,37 +4897,23 @@ build_empty_rdg (int n_stmts)
> scalar dependence. */
>
> struct graph *
> -build_rdg (struct loop *loop)
> +build_rdg (struct loop *loop,
> + VEC (ddr_p, heap) **dependence_relations,
> + VEC (data_reference_p, heap) **datarefs)
> {
> - int nb_data_refs = 10;
> struct graph *rdg = NULL;
> - VEC (ddr_p, heap) *dependence_relations;
> - VEC (data_reference_p, heap) *datarefs;
> - VEC (gimple, heap) *stmts = VEC_alloc (gimple, heap, nb_data_refs);
> -
> - dependence_relations = VEC_alloc (ddr_p, heap, nb_data_refs * nb_data_refs) ;
> - datarefs = VEC_alloc (data_reference_p, heap, nb_data_refs);
> - compute_data_dependences_for_loop (loop,
> - false,
> - &datarefs,
> - &dependence_relations);
> -
> - if (!known_dependences_p (dependence_relations))
> - {
> - free_dependence_relations (dependence_relations);
> - free_data_refs (datarefs);
> - VEC_free (gimple, heap, stmts);
> -
> - return rdg;
> - }
> + VEC (gimple, heap) *stmts = VEC_alloc (gimple, heap, 10);
>
> - stmts_from_loop (loop, &stmts);
> - rdg = build_empty_rdg (VEC_length (gimple, stmts));
> + compute_data_dependences_for_loop (loop, false, datarefs,
> + dependence_relations);
>
> - rdg->indices = htab_create (nb_data_refs, hash_stmt_vertex_info,
> - eq_stmt_vertex_info, hash_stmt_vertex_del);
> - create_rdg_vertices (rdg, stmts);
> - create_rdg_edges (rdg, dependence_relations);
> + if (known_dependences_p (*dependence_relations))
> + {
> + stmts_from_loop (loop, &stmts);
> + rdg = build_empty_rdg (VEC_length (gimple, stmts));
> + create_rdg_vertices (rdg, stmts);
> + create_rdg_edges (rdg, *dependence_relations);
> + }
>
> VEC_free (gimple, heap, stmts);
> return rdg;
> @@ -4949,7 +4927,19 @@ free_rdg (struct graph *rdg)
> int i;
>
> for (i = 0; i < rdg->n_vertices; i++)
> - free (rdg->vertices[i].data);
> + {
> + struct vertex *v = &(rdg->vertices[i]);
> + struct graph_edge *e;
> +
> + for (e = v->succ; e; e = e->succ_next)
> + {
> + free_dependence_relation (RDGE_RELATION (e));
> + if (e->data)
> + free (e->data);
> + }
> +
> + free (v->data);
> + }
>
> htab_delete (rdg->indices);
> free_graph (rdg);
> diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h
> index b4f317f..8585b2b 100644
> --- a/gcc/tree-data-ref.h
> +++ b/gcc/tree-data-ref.h
> @@ -577,7 +577,8 @@ typedef struct rdg_edge
> #define RDGE_LEVEL(E) ((struct rdg_edge *) ((E)->data))->level
> #define RDGE_RELATION(E) ((struct rdg_edge *) ((E)->data))->relation
>
> -struct graph *build_rdg (struct loop *);
> +struct graph *build_rdg (struct loop *, VEC (ddr_p, heap) **,
> + VEC (data_reference_p, heap) **);
> struct graph *build_empty_rdg (int);
> void free_rdg (struct graph *);
>
> diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
> index a9ee67f..d095e8a 100644
> --- a/gcc/tree-loop-distribution.c
> +++ b/gcc/tree-loop-distribution.c
> @@ -653,6 +653,8 @@ rdg_flag_loop_exits (struct graph *rdg, bitmap loops, bitmap partition,
>
> BITMAP_FREE (new_loops);
> }
> +
> + VEC_free (gimple, heap, conds);
> }
>
> /* Returns a bitmap in which all the statements needed for computing
> @@ -965,6 +967,7 @@ rdg_build_partitions (struct graph *rdg, VEC (rdgc, heap) *components,
>
> VEC_free (int, heap, foo);
> free_rdg_components (comps);
> + VEC_free (rdgc, heap, comps);
> }
>
> add_scalar_computations_to_partition (rdg, *partitions, partition);
> @@ -1129,6 +1132,7 @@ ldist_gen (struct loop *loop, struct graph *rdg,
> VEC_free (int, heap, other_stores);
> VEC_free (bitmap, heap, partitions);
> free_rdg_components (components);
> + VEC_free (rdgc, heap, components);
> return nbp;
> }
>
> @@ -1146,6 +1150,8 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
> gimple s;
> unsigned i;
> VEC (int, heap) *vertices;
> + VEC (ddr_p, heap) *dependence_relations;
> + VEC (data_reference_p, heap) *datarefs;
>
> if (loop->num_nodes > 2)
> {
> @@ -1157,7 +1163,9 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
> return res;
> }
>
> - rdg = build_rdg (loop);
> + datarefs = VEC_alloc (data_reference_p, heap, 10);
> + dependence_relations = VEC_alloc (ddr_p, heap, 100);
> + rdg = build_rdg (loop, &dependence_relations, &datarefs);
>
> if (!rdg)
> {
> @@ -1166,6 +1174,8 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
> "FIXME: Loop %d not distributed: failed to build the RDG.\n",
> loop->num);
>
> + free_dependence_relations (dependence_relations);
> + free_data_refs (datarefs);
> return res;
> }
>
> @@ -1191,7 +1201,8 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
> res = ldist_gen (loop, rdg, vertices);
> VEC_free (int, heap, vertices);
> free_rdg (rdg);
> -
> + free_dependence_relations (dependence_relations);
> + free_data_refs (datarefs);
> return res;
> }
>
> diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
> index 2644c9e..3aa21c7 100644
> --- a/gcc/tree-vect-loop.c
> +++ b/gcc/tree-vect-loop.c
> @@ -794,6 +794,7 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo, bool clean_stmts)
> free_data_refs (LOOP_VINFO_DATAREFS (loop_vinfo));
> free_dependence_relations (LOOP_VINFO_DDRS (loop_vinfo));
> VEC_free (gimple, heap, LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo));
> + VEC_free (ddr_p, heap, LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo));
>
> free (loop_vinfo);
> loop->aux = NULL;
> diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
> index fdaaff2..00fb345 100644
> --- a/gcc/tree-vect-slp.c
> +++ b/gcc/tree-vect-slp.c
> @@ -1457,6 +1457,8 @@ destroy_bb_vec_info (bb_vec_info bb_vinfo)
> free_stmt_vec_info (stmt);
> }
>
> + free_data_refs (BB_VINFO_DATAREFS (bb_vinfo));
> + free_dependence_relations (BB_VINFO_DDRS (bb_vinfo));
> VEC_free (gimple, heap, BB_VINFO_STRIDED_STORES (bb_vinfo));
> VEC_free (slp_instance, heap, BB_VINFO_SLP_INSTANCES (bb_vinfo));
> free (bb_vinfo);
> --
> 1.7.1
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Fix PR47002: memory leaks.
2010-12-22 6:42 [PATCH] Fix PR47002: memory leaks Sebastian Pop
2010-12-22 14:35 ` Richard Guenther
@ 2010-12-22 22:56 ` Jack Howarth
2010-12-22 23:06 ` Sebastian Pop
1 sibling, 1 reply; 7+ messages in thread
From: Jack Howarth @ 2010-12-22 22:56 UTC (permalink / raw)
To: Sebastian Pop; +Cc: gcc-patches, rguenther
On Wed, Dec 22, 2010 at 12:17:10AM -0600, Sebastian Pop wrote:
> Hi,
>
> Although I am not able to reproduce the error reported on
> http://gcc.gnu.org/PR47002 I went and fixed all the memory leaks I
> found related to the tree-loop-distribution.c and tree-data-ref.c
> reported by valgrind --leak-check=full ./cc1 -O3 pr47002.i
> I am testing this patch on amd64-linux. Ok for trunk after test?
>
> Thanks,
> Sebastian
Sebastian,
On x86_64-apple-darwin10 with a standard bootstrap and -fgraphite-identity
enabled at -O2, this seems to be causing an ICE in the libgfortran build...
/sw/src/fink.build/gcc46-4.6.0-1000/darwin_objdir/./gcc/xgcc -B/sw/src/fink.build/gcc46-4.6.0-1000/darwin_objdir/./gcc/ -B/sw/lib/gcc4.6/x86_64-apple-darwin10.5.0/bin/ -B/sw/lib/gcc4.6/x86_64-apple-darwin10.5.0/lib/ -isystem /sw/lib/gcc4.6/x86_64-apple-darwin10.5.0/include -isystem /sw/lib/gcc4.6/x86_64-apple-darwin10.5.0/sys-include -DHAVE_CONFIG_H -I. -I../../../gcc-4.6-20101222/libgfortran -iquote../../../gcc-4.6-20101222/libgfortran/io -I../../../gcc-4.6-20101222/libgfortran/../gcc -I../../../gcc-4.6-20101222/libgfortran/../gcc/config -I../../../gcc-4.6-20101222/libgfortran/../libquadmath -I../.././gcc -D_GNU_SOURCE -std=gnu99 -Wall -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition -Wextra -Wwrite-strings -fcx-fortran-rules -ffunction-sections -fdata-sections -ftree-vectorize -funroll-loops -g -O2 -MT matmul_i4.lo -MD -MP -MF .deps/matmul_i4.Tpo -c ../../../gcc-4.6-20101222/libgfortran/generated/matmul_i4.c -fno-common -DPIC -o .libs/matmul_i4.o
../../../gcc-4.6-20101222/libgfortran/generated/matmul_i4.c: In function 'matmul_i4':
../../../gcc-4.6-20101222/libgfortran/generated/matmul_i4.c:79:1: internal compiler error: Segmentation fault
which backtraces as...
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: 13 at address: 0x0000000000000000
0x00000001007f1689 in vect_analyze_data_refs_alignment (loop_vinfo=0x142b2fcd0, bb_vinfo=0x0) at tree-data-ref.h:595
595 if (loopi->num == var)
(gdb) bt
#0 0x00000001007f1689 in vect_analyze_data_refs_alignment (loop_vinfo=0x142b2fcd0, bb_vinfo=0x0) at tree-data-ref.h:595
#1 0x000000010080f3a8 in vect_analyze_loop (loop=0x100fc9b28) at ../../gcc-4.6-20101222/gcc/tree-vect-loop.c:1451
Jack
>
> 2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
>
> PR tree-optimization/47002
> * tree-data-ref.c (compute_data_dependences_for_loop): Free vloops.
> (free_dependence_relations): Do not free loop_nest.
> (build_rdg): Pass in datarefs and dependence_relations.
> (free_rdg): Also free the data on edges.
> * tree-data-ref.h (build_rdg): Update declaration.
> * tree-loop-distribution.c (rdg_flag_loop_exits): Free conds.
> (rdg_build_partitions): Free comps.
> (ldist_gen): Free components.
> (distribute_loop): Update call to build_rdg. Allocate and free
> datarefs and dependence_relations.
> * tree-vect-loop.c (destroy_loop_vec_info): Free
> LOOP_VINFO_MAY_ALIAS_DDRS.
> * tree-vect-slp.c (destroy_bb_vec_info): Call free_data_refs and
> free_dependence_relations.
> ---
> gcc/ChangeLog | 18 +++++++++++
> gcc/tree-data-ref.c | 70 ++++++++++++++++++------------------------
> gcc/tree-data-ref.h | 3 +-
> gcc/tree-loop-distribution.c | 15 ++++++++-
> gcc/tree-vect-loop.c | 1 +
> gcc/tree-vect-slp.c | 2 +
> 6 files changed, 66 insertions(+), 43 deletions(-)
>
> diff --git a/gcc/ChangeLog b/gcc/ChangeLog
> index 944f806..9fcdd6c 100644
> --- a/gcc/ChangeLog
> +++ b/gcc/ChangeLog
> @@ -1,3 +1,21 @@
> +2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
> +
> + PR tree-optimization/47002
> + * tree-data-ref.c (compute_data_dependences_for_loop): Free vloops.
> + (free_dependence_relations): Do not free loop_nest.
> + (build_rdg): Pass in datarefs and dependence_relations.
> + (free_rdg): Also free the data on edges.
> + * tree-data-ref.h (build_rdg): Update declaration.
> + * tree-loop-distribution.c (rdg_flag_loop_exits): Free conds.
> + (rdg_build_partitions): Free comps.
> + (ldist_gen): Free components.
> + (distribute_loop): Update call to build_rdg. Allocate and free
> + datarefs and dependence_relations.
> + * tree-vect-loop.c (destroy_loop_vec_info): Free
> + LOOP_VINFO_MAY_ALIAS_DDRS.
> + * tree-vect-slp.c (destroy_bb_vec_info): Call free_data_refs and
> + free_dependence_relations.
> +
> 2010-12-17 Paolo Bonzini <bonzini@gnu.org>
>
> PR c/20385
> diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
> index a6d0731..dc14989 100644
> --- a/gcc/tree-data-ref.c
> +++ b/gcc/tree-data-ref.c
> @@ -4274,6 +4274,9 @@ compute_data_dependences_for_loop (struct loop *loop,
> compute_all_dependences (*datarefs, dependence_relations, vloops,
> compute_self_and_read_read_dependences);
>
> + if (vloops)
> + VEC_free (loop_p, heap, vloops);
> +
> if (dump_file && (dump_flags & TDF_STATS))
> {
> fprintf (dump_file, "Dependence tester statistics:\n");
> @@ -4454,22 +4457,11 @@ free_dependence_relations (VEC (ddr_p, heap) *dependence_relations)
> {
> unsigned int i;
> struct data_dependence_relation *ddr;
> - VEC (loop_p, heap) *loop_nest = NULL;
>
> FOR_EACH_VEC_ELT (ddr_p, dependence_relations, i, ddr)
> - {
> - if (ddr == NULL)
> - continue;
> - if (loop_nest == NULL)
> - loop_nest = DDR_LOOP_NEST (ddr);
> - else
> - gcc_assert (DDR_LOOP_NEST (ddr) == NULL
> - || DDR_LOOP_NEST (ddr) == loop_nest);
> + if (ddr)
> free_dependence_relation (ddr);
> - }
>
> - if (loop_nest)
> - VEC_free (loop_p, heap, loop_nest);
> VEC_free (ddr_p, heap, dependence_relations);
> }
>
> @@ -4905,37 +4897,23 @@ build_empty_rdg (int n_stmts)
> scalar dependence. */
>
> struct graph *
> -build_rdg (struct loop *loop)
> +build_rdg (struct loop *loop,
> + VEC (ddr_p, heap) **dependence_relations,
> + VEC (data_reference_p, heap) **datarefs)
> {
> - int nb_data_refs = 10;
> struct graph *rdg = NULL;
> - VEC (ddr_p, heap) *dependence_relations;
> - VEC (data_reference_p, heap) *datarefs;
> - VEC (gimple, heap) *stmts = VEC_alloc (gimple, heap, nb_data_refs);
> -
> - dependence_relations = VEC_alloc (ddr_p, heap, nb_data_refs * nb_data_refs) ;
> - datarefs = VEC_alloc (data_reference_p, heap, nb_data_refs);
> - compute_data_dependences_for_loop (loop,
> - false,
> - &datarefs,
> - &dependence_relations);
> -
> - if (!known_dependences_p (dependence_relations))
> - {
> - free_dependence_relations (dependence_relations);
> - free_data_refs (datarefs);
> - VEC_free (gimple, heap, stmts);
> -
> - return rdg;
> - }
> + VEC (gimple, heap) *stmts = VEC_alloc (gimple, heap, 10);
>
> - stmts_from_loop (loop, &stmts);
> - rdg = build_empty_rdg (VEC_length (gimple, stmts));
> + compute_data_dependences_for_loop (loop, false, datarefs,
> + dependence_relations);
>
> - rdg->indices = htab_create (nb_data_refs, hash_stmt_vertex_info,
> - eq_stmt_vertex_info, hash_stmt_vertex_del);
> - create_rdg_vertices (rdg, stmts);
> - create_rdg_edges (rdg, dependence_relations);
> + if (known_dependences_p (*dependence_relations))
> + {
> + stmts_from_loop (loop, &stmts);
> + rdg = build_empty_rdg (VEC_length (gimple, stmts));
> + create_rdg_vertices (rdg, stmts);
> + create_rdg_edges (rdg, *dependence_relations);
> + }
>
> VEC_free (gimple, heap, stmts);
> return rdg;
> @@ -4949,7 +4927,19 @@ free_rdg (struct graph *rdg)
> int i;
>
> for (i = 0; i < rdg->n_vertices; i++)
> - free (rdg->vertices[i].data);
> + {
> + struct vertex *v = &(rdg->vertices[i]);
> + struct graph_edge *e;
> +
> + for (e = v->succ; e; e = e->succ_next)
> + {
> + free_dependence_relation (RDGE_RELATION (e));
> + if (e->data)
> + free (e->data);
> + }
> +
> + free (v->data);
> + }
>
> htab_delete (rdg->indices);
> free_graph (rdg);
> diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h
> index b4f317f..8585b2b 100644
> --- a/gcc/tree-data-ref.h
> +++ b/gcc/tree-data-ref.h
> @@ -577,7 +577,8 @@ typedef struct rdg_edge
> #define RDGE_LEVEL(E) ((struct rdg_edge *) ((E)->data))->level
> #define RDGE_RELATION(E) ((struct rdg_edge *) ((E)->data))->relation
>
> -struct graph *build_rdg (struct loop *);
> +struct graph *build_rdg (struct loop *, VEC (ddr_p, heap) **,
> + VEC (data_reference_p, heap) **);
> struct graph *build_empty_rdg (int);
> void free_rdg (struct graph *);
>
> diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
> index a9ee67f..d095e8a 100644
> --- a/gcc/tree-loop-distribution.c
> +++ b/gcc/tree-loop-distribution.c
> @@ -653,6 +653,8 @@ rdg_flag_loop_exits (struct graph *rdg, bitmap loops, bitmap partition,
>
> BITMAP_FREE (new_loops);
> }
> +
> + VEC_free (gimple, heap, conds);
> }
>
> /* Returns a bitmap in which all the statements needed for computing
> @@ -965,6 +967,7 @@ rdg_build_partitions (struct graph *rdg, VEC (rdgc, heap) *components,
>
> VEC_free (int, heap, foo);
> free_rdg_components (comps);
> + VEC_free (rdgc, heap, comps);
> }
>
> add_scalar_computations_to_partition (rdg, *partitions, partition);
> @@ -1129,6 +1132,7 @@ ldist_gen (struct loop *loop, struct graph *rdg,
> VEC_free (int, heap, other_stores);
> VEC_free (bitmap, heap, partitions);
> free_rdg_components (components);
> + VEC_free (rdgc, heap, components);
> return nbp;
> }
>
> @@ -1146,6 +1150,8 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
> gimple s;
> unsigned i;
> VEC (int, heap) *vertices;
> + VEC (ddr_p, heap) *dependence_relations;
> + VEC (data_reference_p, heap) *datarefs;
>
> if (loop->num_nodes > 2)
> {
> @@ -1157,7 +1163,9 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
> return res;
> }
>
> - rdg = build_rdg (loop);
> + datarefs = VEC_alloc (data_reference_p, heap, 10);
> + dependence_relations = VEC_alloc (ddr_p, heap, 100);
> + rdg = build_rdg (loop, &dependence_relations, &datarefs);
>
> if (!rdg)
> {
> @@ -1166,6 +1174,8 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
> "FIXME: Loop %d not distributed: failed to build the RDG.\n",
> loop->num);
>
> + free_dependence_relations (dependence_relations);
> + free_data_refs (datarefs);
> return res;
> }
>
> @@ -1191,7 +1201,8 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
> res = ldist_gen (loop, rdg, vertices);
> VEC_free (int, heap, vertices);
> free_rdg (rdg);
> -
> + free_dependence_relations (dependence_relations);
> + free_data_refs (datarefs);
> return res;
> }
>
> diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
> index 2644c9e..3aa21c7 100644
> --- a/gcc/tree-vect-loop.c
> +++ b/gcc/tree-vect-loop.c
> @@ -794,6 +794,7 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo, bool clean_stmts)
> free_data_refs (LOOP_VINFO_DATAREFS (loop_vinfo));
> free_dependence_relations (LOOP_VINFO_DDRS (loop_vinfo));
> VEC_free (gimple, heap, LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo));
> + VEC_free (ddr_p, heap, LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo));
>
> free (loop_vinfo);
> loop->aux = NULL;
> diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
> index fdaaff2..00fb345 100644
> --- a/gcc/tree-vect-slp.c
> +++ b/gcc/tree-vect-slp.c
> @@ -1457,6 +1457,8 @@ destroy_bb_vec_info (bb_vec_info bb_vinfo)
> free_stmt_vec_info (stmt);
> }
>
> + free_data_refs (BB_VINFO_DATAREFS (bb_vinfo));
> + free_dependence_relations (BB_VINFO_DDRS (bb_vinfo));
> VEC_free (gimple, heap, BB_VINFO_STRIDED_STORES (bb_vinfo));
> VEC_free (slp_instance, heap, BB_VINFO_SLP_INSTANCES (bb_vinfo));
> free (bb_vinfo);
> --
> 1.7.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH] Fix PR47002: memory leaks.
2010-12-22 22:56 ` Jack Howarth
@ 2010-12-22 23:06 ` Sebastian Pop
2010-12-22 23:24 ` Sebastian Pop
0 siblings, 1 reply; 7+ messages in thread
From: Sebastian Pop @ 2010-12-22 23:06 UTC (permalink / raw)
To: gcc-patches; +Cc: rguenther, Sebastian Pop
Hi,
This patch passed make -k check RUNTESTFLAGS=tree-ssa.exp. I sent
this to regstrap again, as the previous patch did not passed all the
tests as Jack remarked.
Sebastian
2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/47002
* tree-data-ref.c (compute_data_dependences_for_loop): Pass in a
pointer to the loop_nest.
(analyze_all_data_dependences): Initialize and free the loop_nest.
(free_dependence_relations): Do not free loop_nest.
(build_rdg): Pass in the loop_nest, datarefs, and dependence_relations.
(free_rdg): Also free the data on edges.
* tree-data-ref.h (build_rdg): Update declaration.
(compute_data_dependences_for_loop): Same.
* tree-if-conv.c (if_convertible_loop_p_1): Pass in the loop_nest.
(if_convertible_loop_p): Allocate and free loop_nest.
* tree-loop-distribution.c (rdg_flag_loop_exits): Free conds.
(free_rdg_components): VEC_free components.
(distribute_loop): Update call to build_rdg. Allocate and free
loop_nest, datarefs, and dependence_relations.
* tree-loop-linear.c (linear_transform_loops): Allocate and free
loop_nest.
* tree-parloops.c (loop_parallel_p): Same.
* tree-predcom.c (tree_predictive_commoning_loop): Same.
* tree-vect-data-refs.c (vect_analyze_data_refs): Pass to
compute_data_dependences_for_loop a pointer to LOOP_VINFO_LOOP_NEST.
* tree-vect-loop.c (new_loop_vec_info): Initialize LOOP_VINFO_LOOP_NEST.
(destroy_loop_vec_info): Free LOOP_VINFO_MAY_ALIAS_DDRS and
LOOP_VINFO_LOOP_NEST.
* tree-vect-slp.c (destroy_bb_vec_info): Call free_data_refs and
free_dependence_relations.
* tree-vectorizer.h (struct _loop_vec_info): Add a field loop_nest.
(LOOP_VINFO_LOOP_NEST): New.
---
gcc/ChangeLog | 31 ++++++++++++++++
gcc/tree-data-ref.c | 78 ++++++++++++++++++------------------------
gcc/tree-data-ref.h | 6 +++-
gcc/tree-if-conv.c | 8 +++-
gcc/tree-loop-distribution.c | 19 +++++++++-
gcc/tree-loop-linear.c | 7 +++-
gcc/tree-parloops.c | 6 ++-
gcc/tree-predcom.c | 6 +++-
gcc/tree-vect-data-refs.c | 4 ++-
gcc/tree-vect-loop.c | 4 ++
gcc/tree-vect-slp.c | 2 +
gcc/tree-vectorizer.h | 4 ++
12 files changed, 119 insertions(+), 56 deletions(-)
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6beaa7c..c2925ab 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,36 @@
2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
+ PR tree-optimization/47002
+ * tree-data-ref.c (compute_data_dependences_for_loop): Pass in a
+ pointer to the loop_nest.
+ (analyze_all_data_dependences): Initialize and free the loop_nest.
+ (free_dependence_relations): Do not free loop_nest.
+ (build_rdg): Pass in the loop_nest, datarefs, and dependence_relations.
+ (free_rdg): Also free the data on edges.
+ * tree-data-ref.h (build_rdg): Update declaration.
+ (compute_data_dependences_for_loop): Same.
+ * tree-if-conv.c (if_convertible_loop_p_1): Pass in the loop_nest.
+ (if_convertible_loop_p): Allocate and free loop_nest.
+ * tree-loop-distribution.c (rdg_flag_loop_exits): Free conds.
+ (free_rdg_components): VEC_free components.
+ (distribute_loop): Update call to build_rdg. Allocate and free
+ loop_nest, datarefs, and dependence_relations.
+ * tree-loop-linear.c (linear_transform_loops): Allocate and free
+ loop_nest.
+ * tree-parloops.c (loop_parallel_p): Same.
+ * tree-predcom.c (tree_predictive_commoning_loop): Same.
+ * tree-vect-data-refs.c (vect_analyze_data_refs): Pass to
+ compute_data_dependences_for_loop a pointer to LOOP_VINFO_LOOP_NEST.
+ * tree-vect-loop.c (new_loop_vec_info): Initialize LOOP_VINFO_LOOP_NEST.
+ (destroy_loop_vec_info): Free LOOP_VINFO_MAY_ALIAS_DDRS and
+ LOOP_VINFO_LOOP_NEST.
+ * tree-vect-slp.c (destroy_bb_vec_info): Call free_data_refs and
+ free_dependence_relations.
+ * tree-vectorizer.h (struct _loop_vec_info): Add a field loop_nest.
+ (LOOP_VINFO_LOOP_NEST): New.
+
+2010-12-22 Sebastian Pop <sebastian.pop@amd.com>
+
PR tree-optimization/47019
* sese.h (scev_analyzable_p): Parameters of a SCoP are SCEV analyzable.
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index a6d0731..a9782f4 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -4247,11 +4247,11 @@ find_loop_nest (struct loop *loop, VEC (loop_p, heap) **loop_nest)
bool
compute_data_dependences_for_loop (struct loop *loop,
bool compute_self_and_read_read_dependences,
+ VEC (loop_p, heap) **loop_nest,
VEC (data_reference_p, heap) **datarefs,
VEC (ddr_p, heap) **dependence_relations)
{
bool res = true;
- VEC (loop_p, heap) *vloops = VEC_alloc (loop_p, heap, 3);
memset (&dependence_stats, 0, sizeof (dependence_stats));
@@ -4259,19 +4259,19 @@ compute_data_dependences_for_loop (struct loop *loop,
is not computable, give up without spending time to compute other
dependences. */
if (!loop
- || !find_loop_nest (loop, &vloops)
+ || !find_loop_nest (loop, loop_nest)
|| find_data_references_in_loop (loop, datarefs) == chrec_dont_know)
{
struct data_dependence_relation *ddr;
/* Insert a single relation into dependence_relations:
chrec_dont_know. */
- ddr = initialize_data_dependence_relation (NULL, NULL, vloops);
+ ddr = initialize_data_dependence_relation (NULL, NULL, *loop_nest);
VEC_safe_push (ddr_p, heap, *dependence_relations, ddr);
res = false;
}
else
- compute_all_dependences (*datarefs, dependence_relations, vloops,
+ compute_all_dependences (*datarefs, dependence_relations, *loop_nest,
compute_self_and_read_read_dependences);
if (dump_file && (dump_flags & TDF_STATS))
@@ -4375,9 +4375,10 @@ analyze_all_data_dependences (struct loop *loop)
VEC_alloc (data_reference_p, heap, nb_data_refs);
VEC (ddr_p, heap) *dependence_relations =
VEC_alloc (ddr_p, heap, nb_data_refs * nb_data_refs);
+ VEC (loop_p, heap) *loop_nest = VEC_alloc (loop_p, heap, 3);
/* Compute DDs on the whole function. */
- compute_data_dependences_for_loop (loop, false, &datarefs,
+ compute_data_dependences_for_loop (loop, false, &loop_nest, &datarefs,
&dependence_relations);
if (dump_file)
@@ -4411,6 +4412,7 @@ analyze_all_data_dependences (struct loop *loop)
}
}
+ VEC_free (loop_p, heap, loop_nest);
free_dependence_relations (dependence_relations);
free_data_refs (datarefs);
}
@@ -4454,22 +4456,11 @@ free_dependence_relations (VEC (ddr_p, heap) *dependence_relations)
{
unsigned int i;
struct data_dependence_relation *ddr;
- VEC (loop_p, heap) *loop_nest = NULL;
FOR_EACH_VEC_ELT (ddr_p, dependence_relations, i, ddr)
- {
- if (ddr == NULL)
- continue;
- if (loop_nest == NULL)
- loop_nest = DDR_LOOP_NEST (ddr);
- else
- gcc_assert (DDR_LOOP_NEST (ddr) == NULL
- || DDR_LOOP_NEST (ddr) == loop_nest);
+ if (ddr)
free_dependence_relation (ddr);
- }
- if (loop_nest)
- VEC_free (loop_p, heap, loop_nest);
VEC_free (ddr_p, heap, dependence_relations);
}
@@ -4905,37 +4896,24 @@ build_empty_rdg (int n_stmts)
scalar dependence. */
struct graph *
-build_rdg (struct loop *loop)
+build_rdg (struct loop *loop,
+ VEC (loop_p, heap) **loop_nest,
+ VEC (ddr_p, heap) **dependence_relations,
+ VEC (data_reference_p, heap) **datarefs)
{
- int nb_data_refs = 10;
struct graph *rdg = NULL;
- VEC (ddr_p, heap) *dependence_relations;
- VEC (data_reference_p, heap) *datarefs;
- VEC (gimple, heap) *stmts = VEC_alloc (gimple, heap, nb_data_refs);
-
- dependence_relations = VEC_alloc (ddr_p, heap, nb_data_refs * nb_data_refs) ;
- datarefs = VEC_alloc (data_reference_p, heap, nb_data_refs);
- compute_data_dependences_for_loop (loop,
- false,
- &datarefs,
- &dependence_relations);
-
- if (!known_dependences_p (dependence_relations))
- {
- free_dependence_relations (dependence_relations);
- free_data_refs (datarefs);
- VEC_free (gimple, heap, stmts);
-
- return rdg;
- }
+ VEC (gimple, heap) *stmts = VEC_alloc (gimple, heap, 10);
- stmts_from_loop (loop, &stmts);
- rdg = build_empty_rdg (VEC_length (gimple, stmts));
+ compute_data_dependences_for_loop (loop, false, loop_nest, datarefs,
+ dependence_relations);
- rdg->indices = htab_create (nb_data_refs, hash_stmt_vertex_info,
- eq_stmt_vertex_info, hash_stmt_vertex_del);
- create_rdg_vertices (rdg, stmts);
- create_rdg_edges (rdg, dependence_relations);
+ if (known_dependences_p (*dependence_relations))
+ {
+ stmts_from_loop (loop, &stmts);
+ rdg = build_empty_rdg (VEC_length (gimple, stmts));
+ create_rdg_vertices (rdg, stmts);
+ create_rdg_edges (rdg, *dependence_relations);
+ }
VEC_free (gimple, heap, stmts);
return rdg;
@@ -4949,7 +4927,17 @@ free_rdg (struct graph *rdg)
int i;
for (i = 0; i < rdg->n_vertices; i++)
- free (rdg->vertices[i].data);
+ {
+ struct vertex *v = &(rdg->vertices[i]);
+ struct graph_edge *e;
+
+ for (e = v->succ; e; e = e->succ_next)
+ if (e->data)
+ free (e->data);
+
+ if (v->data)
+ free (v->data);
+ }
htab_delete (rdg->indices);
free_graph (rdg);
diff --git a/gcc/tree-data-ref.h b/gcc/tree-data-ref.h
index b4f317f..7865576 100644
--- a/gcc/tree-data-ref.h
+++ b/gcc/tree-data-ref.h
@@ -376,6 +376,7 @@ DEF_VEC_ALLOC_O (data_ref_loc, heap);
bool get_references_in_stmt (gimple, VEC (data_ref_loc, heap) **);
bool dr_analyze_innermost (struct data_reference *);
extern bool compute_data_dependences_for_loop (struct loop *, bool,
+ VEC (loop_p, heap) **,
VEC (data_reference_p, heap) **,
VEC (ddr_p, heap) **);
extern bool compute_data_dependences_for_bb (basic_block, bool,
@@ -577,7 +578,10 @@ typedef struct rdg_edge
#define RDGE_LEVEL(E) ((struct rdg_edge *) ((E)->data))->level
#define RDGE_RELATION(E) ((struct rdg_edge *) ((E)->data))->relation
-struct graph *build_rdg (struct loop *);
+struct graph *build_rdg (struct loop *,
+ VEC (loop_p, heap) **,
+ VEC (ddr_p, heap) **,
+ VEC (data_reference_p, heap) **);
struct graph *build_empty_rdg (int);
void free_rdg (struct graph *);
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index fc65845..46b20c2 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -977,6 +977,7 @@ predicate_bbs (loop_p loop)
static bool
if_convertible_loop_p_1 (struct loop *loop,
+ VEC (loop_p, heap) **loop_nest,
VEC (data_reference_p, heap) **refs,
VEC (ddr_p, heap) **ddrs)
{
@@ -986,7 +987,7 @@ if_convertible_loop_p_1 (struct loop *loop,
/* 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);
+ res = compute_data_dependences_for_loop (loop, true, loop_nest, refs, ddrs);
if (!res)
return false;
@@ -1066,6 +1067,7 @@ if_convertible_loop_p (struct loop *loop)
bool res = false;
VEC (data_reference_p, heap) *refs;
VEC (ddr_p, heap) *ddrs;
+ VEC (loop_p, heap) *loop_nest;
/* Handle only innermost loop. */
if (!loop || loop->inner)
@@ -1099,7 +1101,8 @@ if_convertible_loop_p (struct loop *loop)
refs = VEC_alloc (data_reference_p, heap, 5);
ddrs = VEC_alloc (ddr_p, heap, 25);
- res = if_convertible_loop_p_1 (loop, &refs, &ddrs);
+ loop_nest = VEC_alloc (loop_p, heap, 3);
+ res = if_convertible_loop_p_1 (loop, &loop_nest, &refs, &ddrs);
if (flag_tree_loop_if_convert_stores)
{
@@ -1110,6 +1113,7 @@ if_convertible_loop_p (struct loop *loop)
free (dr->aux);
}
+ VEC_free (loop_p, heap, loop_nest);
free_data_refs (refs);
free_dependence_relations (ddrs);
return res;
diff --git a/gcc/tree-loop-distribution.c b/gcc/tree-loop-distribution.c
index a9ee67f..d1a499b 100644
--- a/gcc/tree-loop-distribution.c
+++ b/gcc/tree-loop-distribution.c
@@ -653,6 +653,8 @@ rdg_flag_loop_exits (struct graph *rdg, bitmap loops, bitmap partition,
BITMAP_FREE (new_loops);
}
+
+ VEC_free (gimple, heap, conds);
}
/* Returns a bitmap in which all the statements needed for computing
@@ -693,6 +695,8 @@ free_rdg_components (VEC (rdgc, heap) *components)
VEC_free (int, heap, x->vertices);
free (x);
}
+
+ VEC_free (rdgc, heap, components);
}
/* Build the COMPONENTS vector with the strongly connected components
@@ -1146,6 +1150,9 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
gimple s;
unsigned i;
VEC (int, heap) *vertices;
+ VEC (ddr_p, heap) *dependence_relations;
+ VEC (data_reference_p, heap) *datarefs;
+ VEC (loop_p, heap) *loop_nest;
if (loop->num_nodes > 2)
{
@@ -1157,7 +1164,10 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
return res;
}
- rdg = build_rdg (loop);
+ datarefs = VEC_alloc (data_reference_p, heap, 10);
+ dependence_relations = VEC_alloc (ddr_p, heap, 100);
+ loop_nest = VEC_alloc (loop_p, heap, 3);
+ rdg = build_rdg (loop, &loop_nest, &dependence_relations, &datarefs);
if (!rdg)
{
@@ -1166,6 +1176,9 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
"FIXME: Loop %d not distributed: failed to build the RDG.\n",
loop->num);
+ free_dependence_relations (dependence_relations);
+ free_data_refs (datarefs);
+ VEC_free (loop_p, heap, loop_nest);
return res;
}
@@ -1191,7 +1204,9 @@ distribute_loop (struct loop *loop, VEC (gimple, heap) *stmts)
res = ldist_gen (loop, rdg, vertices);
VEC_free (int, heap, vertices);
free_rdg (rdg);
-
+ free_dependence_relations (dependence_relations);
+ free_data_refs (datarefs);
+ VEC_free (loop_p, heap, loop_nest);
return res;
}
diff --git a/gcc/tree-loop-linear.c b/gcc/tree-loop-linear.c
index a411c25..fa31b9d 100644
--- a/gcc/tree-loop-linear.c
+++ b/gcc/tree-loop-linear.c
@@ -329,7 +329,8 @@ linear_transform_loops (void)
lambda_trans_matrix trans;
struct obstack lambda_obstack;
struct loop *loop;
- VEC(loop_p,heap) *nest;
+ VEC (loop_p, heap) *nest;
+ VEC (loop_p, heap) *ln;
depth = perfect_loop_nest_depth (loop_nest);
if (depth == 0)
@@ -346,7 +347,8 @@ linear_transform_loops (void)
datarefs = VEC_alloc (data_reference_p, heap, 10);
dependence_relations = VEC_alloc (ddr_p, heap, 10 * 10);
- if (!compute_data_dependences_for_loop (loop_nest, true, &datarefs,
+ ln = VEC_alloc (loop_p, heap, 3);
+ if (!compute_data_dependences_for_loop (loop_nest, true, &ln, &datarefs,
&dependence_relations))
goto free_and_continue;
@@ -412,6 +414,7 @@ linear_transform_loops (void)
free_dependence_relations (dependence_relations);
free_data_refs (datarefs);
VEC_free (loop_p, heap, nest);
+ VEC_free (loop_p, heap, ln);
}
FOR_EACH_VEC_ELT (gimple, remove_ivs, i, oldiv_stmt)
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index ea1911a..25c93c2 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -252,7 +252,8 @@ name_to_copy_elt_hash (const void *aa)
static bool
loop_parallel_p (struct loop *loop, struct obstack * parloop_obstack)
{
- VEC (ddr_p, heap) * dependence_relations;
+ VEC (loop_p, heap) *loop_nest;
+ VEC (ddr_p, heap) *dependence_relations;
VEC (data_reference_p, heap) *datarefs;
lambda_trans_matrix trans;
bool ret = false;
@@ -270,7 +271,7 @@ loop_parallel_p (struct loop *loop, struct obstack * parloop_obstack)
the iterations are independent. */
datarefs = VEC_alloc (data_reference_p, heap, 10);
dependence_relations = VEC_alloc (ddr_p, heap, 10 * 10);
- compute_data_dependences_for_loop (loop, true, &datarefs,
+ compute_data_dependences_for_loop (loop, true, &loop_nest, &datarefs,
&dependence_relations);
if (dump_file && (dump_flags & TDF_DETAILS))
dump_data_dependence_relations (dump_file, dependence_relations);
@@ -288,6 +289,7 @@ loop_parallel_p (struct loop *loop, struct obstack * parloop_obstack)
fprintf (dump_file,
" FAILED: data dependencies exist across iterations\n");
+ VEC_free (loop_p, heap, loop_nest);
free_dependence_relations (dependence_relations);
free_data_refs (datarefs);
diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c
index 3ebc5a0..f744d44 100644
--- a/gcc/tree-predcom.c
+++ b/gcc/tree-predcom.c
@@ -2441,6 +2441,7 @@ prepare_initializers (struct loop *loop, VEC (chain_p, heap) *chains)
static bool
tree_predictive_commoning_loop (struct loop *loop)
{
+ VEC (loop_p, heap) *loop_nest;
VEC (data_reference_p, heap) *datarefs;
VEC (ddr_p, heap) *dependences;
struct component *components;
@@ -2458,11 +2459,14 @@ tree_predictive_commoning_loop (struct loop *loop)
dependence relations. */
datarefs = VEC_alloc (data_reference_p, heap, 10);
dependences = VEC_alloc (ddr_p, heap, 10);
- compute_data_dependences_for_loop (loop, true, &datarefs, &dependences);
+ loop_nest = VEC_alloc (loop_p, heap, 3);
+ compute_data_dependences_for_loop (loop, true, &loop_nest, &datarefs,
+ &dependences);
if (dump_file && (dump_flags & TDF_DETAILS))
dump_data_dependence_relations (dump_file, dependences);
components = split_data_refs_to_components (loop, datarefs, dependences);
+ VEC_free (loop_p, heap, loop_nest);
free_dependence_relations (dependences);
if (!components)
{
diff --git a/gcc/tree-vect-data-refs.c b/gcc/tree-vect-data-refs.c
index 9a94df4..1ec59ef 100644
--- a/gcc/tree-vect-data-refs.c
+++ b/gcc/tree-vect-data-refs.c
@@ -2487,7 +2487,9 @@ vect_analyze_data_refs (loop_vec_info loop_vinfo,
{
loop = LOOP_VINFO_LOOP (loop_vinfo);
res = compute_data_dependences_for_loop
- (loop, true, &LOOP_VINFO_DATAREFS (loop_vinfo),
+ (loop, true,
+ &LOOP_VINFO_LOOP_NEST (loop_vinfo),
+ &LOOP_VINFO_DATAREFS (loop_vinfo),
&LOOP_VINFO_DDRS (loop_vinfo));
if (!res)
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 2644c9e..1dc4ec0 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -745,6 +745,7 @@ new_loop_vec_info (struct loop *loop)
LOOP_VINFO_VECTORIZABLE_P (res) = 0;
LOOP_PEELING_FOR_ALIGNMENT (res) = 0;
LOOP_VINFO_VECT_FACTOR (res) = 0;
+ LOOP_VINFO_LOOP_NEST (res) = VEC_alloc (loop_p, heap, 3);
LOOP_VINFO_DATAREFS (res) = VEC_alloc (data_reference_p, heap, 10);
LOOP_VINFO_DDRS (res) = VEC_alloc (ddr_p, heap, 10 * 10);
LOOP_VINFO_UNALIGNED_DR (res) = NULL;
@@ -793,7 +794,9 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo, bool clean_stmts)
free (LOOP_VINFO_BBS (loop_vinfo));
free_data_refs (LOOP_VINFO_DATAREFS (loop_vinfo));
free_dependence_relations (LOOP_VINFO_DDRS (loop_vinfo));
+ VEC_free (loop_p, heap, LOOP_VINFO_LOOP_NEST (loop_vinfo));
VEC_free (gimple, heap, LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo));
+ VEC_free (ddr_p, heap, LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo));
free (loop_vinfo);
loop->aux = NULL;
@@ -839,6 +842,7 @@ destroy_loop_vec_info (loop_vec_info loop_vinfo, bool clean_stmts)
free (LOOP_VINFO_BBS (loop_vinfo));
free_data_refs (LOOP_VINFO_DATAREFS (loop_vinfo));
free_dependence_relations (LOOP_VINFO_DDRS (loop_vinfo));
+ VEC_free (loop_p, heap, LOOP_VINFO_LOOP_NEST (loop_vinfo));
VEC_free (gimple, heap, LOOP_VINFO_MAY_MISALIGN_STMTS (loop_vinfo));
VEC_free (ddr_p, heap, LOOP_VINFO_MAY_ALIAS_DDRS (loop_vinfo));
slp_instances = LOOP_VINFO_SLP_INSTANCES (loop_vinfo);
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index 4f7c72c..6eb67ae 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -1486,6 +1486,8 @@ destroy_bb_vec_info (bb_vec_info bb_vinfo)
free_stmt_vec_info (stmt);
}
+ free_data_refs (BB_VINFO_DATAREFS (bb_vinfo));
+ free_dependence_relations (BB_VINFO_DDRS (bb_vinfo));
VEC_free (gimple, heap, BB_VINFO_STRIDED_STORES (bb_vinfo));
VEC_free (slp_instance, heap, BB_VINFO_SLP_INSTANCES (bb_vinfo));
free (bb_vinfo);
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h
index b2cc2d1..ee8410c 100644
--- a/gcc/tree-vectorizer.h
+++ b/gcc/tree-vectorizer.h
@@ -216,6 +216,9 @@ typedef struct _loop_vec_info {
/* The mask used to check the alignment of pointers or arrays. */
int ptr_mask;
+ /* The loop nest in which the data dependences are computed. */
+ VEC (loop_p, heap) *loop_nest;
+
/* All data references in the loop. */
VEC (data_reference_p, heap) *datarefs;
@@ -261,6 +264,7 @@ typedef struct _loop_vec_info {
#define LOOP_VINFO_VECTORIZABLE_P(L) (L)->vectorizable
#define LOOP_VINFO_VECT_FACTOR(L) (L)->vectorization_factor
#define LOOP_VINFO_PTR_MASK(L) (L)->ptr_mask
+#define LOOP_VINFO_LOOP_NEST(L) (L)->loop_nest
#define LOOP_VINFO_DATAREFS(L) (L)->datarefs
#define LOOP_VINFO_DDRS(L) (L)->ddrs
#define LOOP_VINFO_INT_NITERS(L) (TREE_INT_CST_LOW ((L)->num_iters))
--
1.7.1
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Fix PR47002: memory leaks.
2010-12-22 23:06 ` Sebastian Pop
@ 2010-12-22 23:24 ` Sebastian Pop
2010-12-22 23:57 ` Sebastian Pop
0 siblings, 1 reply; 7+ messages in thread
From: Sebastian Pop @ 2010-12-22 23:24 UTC (permalink / raw)
To: gcc-patches; +Cc: rguenther, Jack Howarth
With this last patch I still see these fails:
FAIL: libgomp.c/autopar-1.c (internal compiler error)
FAIL: libgomp.c/autopar-1.c (test for excess errors)
FAIL: gcc.dg/autopar/outer-4.c (internal compiler error)
FAIL: gcc.dg/autopar/outer-4.c (test for excess errors)
FAIL: gcc.dg/autopar/outer-4.c scan-tree-dump-times optimized "loopfn"
5: dump file does not exist
FAIL: gcc.dg/autopar/outer-5.c (internal compiler error)
FAIL: gcc.dg/autopar/outer-5.c (test for excess errors)
FAIL: gcc.dg/autopar/outer-5.c scan-tree-dump-times optimized "loopfn" 5
FAIL: gcc.dg/autopar/outer-6.c (internal compiler error)
FAIL: gcc.dg/autopar/outer-6.c (test for excess errors)
FAIL: gcc.dg/autopar/outer-6.c scan-tree-dump-times parloops
"parallelizing outer loop" 1
FAIL: gcc.dg/autopar/outer-6.c scan-tree-dump-times optimized "loopfn" 5
FAIL: gcc.dg/autopar/pr46099.c (internal compiler error)
FAIL: gcc.dg/autopar/pr46099.c (test for excess errors)
FAIL: gcc.dg/autopar/pr46799.c (internal compiler error)
FAIL: gcc.dg/autopar/pr46799.c (test for excess errors)
FAIL: gcc.dg/autopar/pr46885.c (internal compiler error)
FAIL: gcc.dg/autopar/pr46885.c (test for excess errors)
I will fix these problems and repost the patch.
Sebastian
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Fix PR47002: memory leaks.
2010-12-22 23:24 ` Sebastian Pop
@ 2010-12-22 23:57 ` Sebastian Pop
2010-12-23 1:00 ` Sebastian Pop
0 siblings, 1 reply; 7+ messages in thread
From: Sebastian Pop @ 2010-12-22 23:57 UTC (permalink / raw)
To: gcc-patches; +Cc: rguenther, Jack Howarth
This patch on top of the previous one fixes the last fails that I saw.
I am regstraping again.
Sebastian
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index 25c93c2..aba70c8 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -271,6 +271,7 @@ loop_parallel_p (struct loop *loop, struct obstack
* parloop_obstack)
the iterations are independent. */
datarefs = VEC_alloc (data_reference_p, heap, 10);
dependence_relations = VEC_alloc (ddr_p, heap, 10 * 10);
+ loop_nest = VEC_alloc (loop_p, heap, 3);
compute_data_dependences_for_loop (loop, true, &loop_nest, &datarefs,
&dependence_relations);
if (dump_file && (dump_flags & TDF_DETAILS))
On Wed, Dec 22, 2010 at 16:44, Sebastian Pop <sebpop@gmail.com> wrote:
> With this last patch I still see these fails:
>
> FAIL: libgomp.c/autopar-1.c (internal compiler error)
> FAIL: libgomp.c/autopar-1.c (test for excess errors)
> FAIL: gcc.dg/autopar/outer-4.c (internal compiler error)
> FAIL: gcc.dg/autopar/outer-4.c (test for excess errors)
> FAIL: gcc.dg/autopar/outer-4.c scan-tree-dump-times optimized "loopfn"
> 5: dump file does not exist
> FAIL: gcc.dg/autopar/outer-5.c (internal compiler error)
> FAIL: gcc.dg/autopar/outer-5.c (test for excess errors)
> FAIL: gcc.dg/autopar/outer-5.c scan-tree-dump-times optimized "loopfn" 5
> FAIL: gcc.dg/autopar/outer-6.c (internal compiler error)
> FAIL: gcc.dg/autopar/outer-6.c (test for excess errors)
> FAIL: gcc.dg/autopar/outer-6.c scan-tree-dump-times parloops
> "parallelizing outer loop" 1
> FAIL: gcc.dg/autopar/outer-6.c scan-tree-dump-times optimized "loopfn" 5
> FAIL: gcc.dg/autopar/pr46099.c (internal compiler error)
> FAIL: gcc.dg/autopar/pr46099.c (test for excess errors)
> FAIL: gcc.dg/autopar/pr46799.c (internal compiler error)
> FAIL: gcc.dg/autopar/pr46799.c (test for excess errors)
> FAIL: gcc.dg/autopar/pr46885.c (internal compiler error)
> FAIL: gcc.dg/autopar/pr46885.c (test for excess errors)
>
> I will fix these problems and repost the patch.
>
> Sebastian
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] Fix PR47002: memory leaks.
2010-12-22 23:57 ` Sebastian Pop
@ 2010-12-23 1:00 ` Sebastian Pop
0 siblings, 0 replies; 7+ messages in thread
From: Sebastian Pop @ 2010-12-23 1:00 UTC (permalink / raw)
To: gcc-patches; +Cc: rguenther, Jack Howarth
This passed regstrap on amd64-linux.
Sebastian
On Wed, Dec 22, 2010 at 16:55, Sebastian Pop <sebpop@gmail.com> wrote:
> This patch on top of the previous one fixes the last fails that I saw.
> I am regstraping again.
>
> Sebastian
>
> diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
> index 25c93c2..aba70c8 100644
> --- a/gcc/tree-parloops.c
> +++ b/gcc/tree-parloops.c
> @@ -271,6 +271,7 @@ loop_parallel_p (struct loop *loop, struct obstack
> * parloop_obstack)
> the iterations are independent. */
> datarefs = VEC_alloc (data_reference_p, heap, 10);
> dependence_relations = VEC_alloc (ddr_p, heap, 10 * 10);
> + loop_nest = VEC_alloc (loop_p, heap, 3);
> compute_data_dependences_for_loop (loop, true, &loop_nest, &datarefs,
> &dependence_relations);
> if (dump_file && (dump_flags & TDF_DETAILS))
>
>
> On Wed, Dec 22, 2010 at 16:44, Sebastian Pop <sebpop@gmail.com> wrote:
>> With this last patch I still see these fails:
>>
>> FAIL: libgomp.c/autopar-1.c (internal compiler error)
>> FAIL: libgomp.c/autopar-1.c (test for excess errors)
>> FAIL: gcc.dg/autopar/outer-4.c (internal compiler error)
>> FAIL: gcc.dg/autopar/outer-4.c (test for excess errors)
>> FAIL: gcc.dg/autopar/outer-4.c scan-tree-dump-times optimized "loopfn"
>> 5: dump file does not exist
>> FAIL: gcc.dg/autopar/outer-5.c (internal compiler error)
>> FAIL: gcc.dg/autopar/outer-5.c (test for excess errors)
>> FAIL: gcc.dg/autopar/outer-5.c scan-tree-dump-times optimized "loopfn" 5
>> FAIL: gcc.dg/autopar/outer-6.c (internal compiler error)
>> FAIL: gcc.dg/autopar/outer-6.c (test for excess errors)
>> FAIL: gcc.dg/autopar/outer-6.c scan-tree-dump-times parloops
>> "parallelizing outer loop" 1
>> FAIL: gcc.dg/autopar/outer-6.c scan-tree-dump-times optimized "loopfn" 5
>> FAIL: gcc.dg/autopar/pr46099.c (internal compiler error)
>> FAIL: gcc.dg/autopar/pr46099.c (test for excess errors)
>> FAIL: gcc.dg/autopar/pr46799.c (internal compiler error)
>> FAIL: gcc.dg/autopar/pr46799.c (test for excess errors)
>> FAIL: gcc.dg/autopar/pr46885.c (internal compiler error)
>> FAIL: gcc.dg/autopar/pr46885.c (test for excess errors)
>>
>> I will fix these problems and repost the patch.
>>
>> Sebastian
>>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-12-23 0:17 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-22 6:42 [PATCH] Fix PR47002: memory leaks Sebastian Pop
2010-12-22 14:35 ` Richard Guenther
2010-12-22 22:56 ` Jack Howarth
2010-12-22 23:06 ` Sebastian Pop
2010-12-22 23:24 ` Sebastian Pop
2010-12-22 23:57 ` Sebastian Pop
2010-12-23 1:00 ` Sebastian Pop
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).