Commit 37b8a73b by Sebastian Pop Committed by Sebastian Pop

lambda-code.c (lambda_vector_lexico_pos): Moved...

	* lambda-code.c (lambda_vector_lexico_pos): Moved...
	* lambda.h (lambda_vector_lexico_pos): ... here.
	* tree-data-ref.c (build_classic_dist_vector): Return false when
	the distance vector is lexicographically negative.

From-SVN: r103392
parent ce8f9416
2005-08-23 Sebastian Pop <pop@cri.ensmp.fr> 2005-08-23 Sebastian Pop <pop@cri.ensmp.fr>
* lambda-code.c (lambda_vector_lexico_pos): Moved...
* lambda.h (lambda_vector_lexico_pos): ... here.
* tree-data-ref.c (build_classic_dist_vector): Return false when
the distance vector is lexicographically negative.
2005-08-23 Sebastian Pop <pop@cri.ensmp.fr>
PR tree-optimization/23511 PR tree-optimization/23511
* tree-ssa-loop-niter.c (infer_loop_bounds_from_undefined): Don't * tree-ssa-loop-niter.c (infer_loop_bounds_from_undefined): Don't
handle cases where TYPE_MIN_VALUE or TYPE_MAX_VALUE are NULL_TREE. handle cases where TYPE_MIN_VALUE or TYPE_MAX_VALUE are NULL_TREE.
......
...@@ -2010,27 +2010,6 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest, ...@@ -2010,27 +2010,6 @@ lambda_loopnest_to_gcc_loopnest (struct loop *old_loopnest,
VEC_free (tree, heap, new_ivs); VEC_free (tree, heap, new_ivs);
} }
/* Returns true when the vector V is lexicographically positive, in
other words, when the first nonzero element is positive. */
static bool
lambda_vector_lexico_pos (lambda_vector v,
unsigned n)
{
unsigned i;
for (i = 0; i < n; i++)
{
if (v[i] == 0)
continue;
if (v[i] < 0)
return false;
if (v[i] > 0)
return true;
}
return true;
}
/* Return TRUE if this is not interesting statement from the perspective of /* Return TRUE if this is not interesting statement from the perspective of
determining if we have a perfect loop nest. */ determining if we have a perfect loop nest. */
......
...@@ -376,5 +376,26 @@ print_lambda_vector (FILE * outfile, lambda_vector vector, int n) ...@@ -376,5 +376,26 @@ print_lambda_vector (FILE * outfile, lambda_vector vector, int n)
fprintf (outfile, "%3d ", vector[i]); fprintf (outfile, "%3d ", vector[i]);
fprintf (outfile, "\n"); fprintf (outfile, "\n");
} }
/* Returns true when the vector V is lexicographically positive, in
other words, when the first nonzero element is positive. */
static inline bool
lambda_vector_lexico_pos (lambda_vector v,
unsigned n)
{
unsigned i;
for (i = 0; i < n; i++)
{
if (v[i] == 0)
continue;
if (v[i] < 0)
return false;
if (v[i] > 0)
return true;
}
return true;
}
#endif /* LAMBDA_H */ #endif /* LAMBDA_H */
...@@ -3030,8 +3030,8 @@ subscript_dependence_tester (struct data_dependence_relation *ddr) ...@@ -3030,8 +3030,8 @@ subscript_dependence_tester (struct data_dependence_relation *ddr)
NB_LOOPS is the total number of loops we are considering. NB_LOOPS is the total number of loops we are considering.
FIRST_LOOP_DEPTH is the loop->depth of the first loop in the analyzed FIRST_LOOP_DEPTH is the loop->depth of the first loop in the analyzed
loop nest. loop nest.
Return FALSE if the dependence relation is outside of the loop nest Return FALSE when fail to represent the data dependence as a distance
starting at FIRST_LOOP_DEPTH. vector.
Return TRUE otherwise. */ Return TRUE otherwise. */
static bool static bool
...@@ -3196,6 +3196,23 @@ build_classic_dist_vector (struct data_dependence_relation *ddr, ...@@ -3196,6 +3196,23 @@ build_classic_dist_vector (struct data_dependence_relation *ddr,
DDR_DIST_VECT (ddr) = dist_v; DDR_DIST_VECT (ddr) = dist_v;
DDR_SIZE_VECT (ddr) = nb_loops; DDR_SIZE_VECT (ddr) = nb_loops;
/* Verify a basic constraint: classic distance vectors should always
be lexicographically positive. */
if (!lambda_vector_lexico_pos (DDR_DIST_VECT (ddr),
DDR_SIZE_VECT (ddr)))
{
if (DDR_SIZE_VECT (ddr) == 1)
/* This one is simple to fix, and can be fixed.
Multidimensional arrays cannot be fixed that simply. */
lambda_vector_negate (DDR_DIST_VECT (ddr), DDR_DIST_VECT (ddr),
DDR_SIZE_VECT (ddr));
else
/* This is not valid: we need the delta test for properly
fixing all this. */
return false;
}
return true; return true;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment