OSDN Git Service
(root)
/
pf3gnuchains
/
gcc-fork.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
./:
[pf3gnuchains/gcc-fork.git]
/
gcc
/
tree-loop-linear.c
diff --git
a/gcc/tree-loop-linear.c
b/gcc/tree-loop-linear.c
index
66d25ec
..
cc2440d
100644
(file)
--- a/
gcc/tree-loop-linear.c
+++ b/
gcc/tree-loop-linear.c
@@
-1,5
+1,6
@@
/* Linear Loop transforms
/* Linear Loop transforms
- Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004, 2005, 2007, 2008, 2009
+ Free Software Foundation, Inc.
Contributed by Daniel Berlin <dberlin@dberlin.org>.
This file is part of GCC.
Contributed by Daniel Berlin <dberlin@dberlin.org>.
This file is part of GCC.
@@
-272,7
+273,7
@@
try_interchange_loops (lambda_trans_matrix trans,
/* Return the number of nested loops in LOOP_NEST, or 0 if the loops
are not perfectly nested. */
/* Return the number of nested loops in LOOP_NEST, or 0 if the loops
are not perfectly nested. */
-
static
unsigned int
+unsigned int
perfect_loop_nest_depth (struct loop *loop_nest)
{
struct loop *temp;
perfect_loop_nest_depth (struct loop *loop_nest)
{
struct loop *temp;
@@
-333,12
+334,18
@@
linear_transform_loops (void)
lambda_loopnest before, after;
lambda_trans_matrix trans;
struct obstack lambda_obstack;
lambda_loopnest before, after;
lambda_trans_matrix trans;
struct obstack lambda_obstack;
- gcc_obstack_init (&lambda_obstack);
+ struct loop *loop;
+ VEC(loop_p,heap) *nest;
depth = perfect_loop_nest_depth (loop_nest);
if (depth == 0)
continue;
depth = perfect_loop_nest_depth (loop_nest);
if (depth == 0)
continue;
+ nest = VEC_alloc (loop_p, heap, 3);
+ for (loop = loop_nest; loop; loop = loop->inner)
+ VEC_safe_push (loop_p, heap, nest, loop);
+
+ gcc_obstack_init (&lambda_obstack);
VEC_truncate (tree, oldivs, 0);
VEC_truncate (tree, invariants, 0);
VEC_truncate (tree, lambda_parameters, 0);
VEC_truncate (tree, oldivs, 0);
VEC_truncate (tree, invariants, 0);
VEC_truncate (tree, lambda_parameters, 0);
@@
-347,12
+354,11
@@
linear_transform_loops (void)
dependence_relations = VEC_alloc (ddr_p, heap, 10 * 10);
if (!compute_data_dependences_for_loop (loop_nest, true, &datarefs,
&dependence_relations))
dependence_relations = VEC_alloc (ddr_p, heap, 10 * 10);
if (!compute_data_dependences_for_loop (loop_nest, true, &datarefs,
&dependence_relations))
- continue;
+
goto free_and_
continue;
lambda_collect_parameters (datarefs, &lambda_parameters);
lambda_collect_parameters (datarefs, &lambda_parameters);
- if (!lambda_compute_access_matrices (datarefs, lambda_parameters,
- loop_nest->num))
- continue;
+ if (!lambda_compute_access_matrices (datarefs, lambda_parameters, nest))
+ goto free_and_continue;
if (dump_file && (dump_flags & TDF_DETAILS))
dump_ddrs (dump_file, dependence_relations);
if (dump_file && (dump_flags & TDF_DETAILS))
dump_ddrs (dump_file, dependence_relations);
@@
-410,6
+416,7
@@
linear_transform_loops (void)
obstack_free (&lambda_obstack, NULL);
free_dependence_relations (dependence_relations);
free_data_refs (datarefs);
obstack_free (&lambda_obstack, NULL);
free_dependence_relations (dependence_relations);
free_data_refs (datarefs);
+ VEC_free (loop_p, heap, nest);
}
for (i = 0; VEC_iterate (gimple, remove_ivs, i, oldiv_stmt); i++)
}
for (i = 0; VEC_iterate (gimple, remove_ivs, i, oldiv_stmt); i++)