Commit 36d59cf7 by Daniel Berlin Committed by Daniel Berlin

[multiple changes]

2004-08-26  Daniel Berlin  <dberlin@dberlin.org>

	* Makefile.in (lambda-code.o): New.
	(lambda-trans.o): Ditto.
	(TREE_DATA_REF_H): Ditto.
	(LAMBDA_H): Ditto.
	(lambda-mat.o): Use LAMBDA_H.
	(tree-data-ref.o): Ditto.
	* lambda-code.c: New file.  Lambda code generation algorithm.
	* lambda-trans.c: Ditto. Lambda transformation matrix support.
	* lambda.h: Add lambda loop structures.
	Add lambda loopnest structures.
	Add lambda body vector structure.
	Add lambda linear expression structures.
	Add prototypes for functions in new files.
	* lambda-mat.c: Include tree.h

2004-08-26  Daniel Berlin <dberlin@dberlin.org>
	    Sebastian Pop  <pop@cri.ensmp.fr>

	* tree-data-ref.h: Include lambda.h
	(free_dependence_relation): Declared here.
	(free_dependence_relations): Ditto.
	(free_data_refs): Ditto.
	* tree-data-ref.c (free_dependence_relation): New function.
	(free_dependence_relations): Ditto.
	(free_data_refs): Ditot.
	(analyze_all_data_dependences): Free datarefs and dependence_relations.
	(build_classic_dist_vector): Store in the dependence_relations the
	information. Each arc in the dependence_relations graph is labelled
	with the distance and direction vectors.
	(build_classic_dir_vector): Ditto.
	(compute_rw_wr_ww_dependences): Renamed again compute_all_dependences.
	Now computes again the whole dependence graph including read-read
	relations.
	(compute_data_dependences_for_loop): Now dependence_relations contains
	all the data, and thus it doesn't need to initialize the classic_dir
	and classic_dist vectors.
	(analyze_all_data_dependences): Adjusted for using the new interface of
	compute_data_dependences_for_loop.  Remove the statistics dump.

Co-Authored-By: Sebastian Pop <pop@cri.ensmp.fr>

From-SVN: r86627
parent a46bbb5a
2004-08-26 Daniel Berlin <dberlin@dberlin.org>
* Makefile.in (lambda-code.o): New.
(lambda-trans.o): Ditto.
(TREE_DATA_REF_H): Ditto.
(LAMBDA_H): Ditto.
(lambda-mat.o): Use LAMBDA_H.
(tree-data-ref.o): Ditto.
* lambda-code.c: New file. Lambda code generation algorithm.
* lambda-trans.c: Ditto. Lambda transformation matrix support.
* lambda.h: Add lambda loop structures.
Add lambda loopnest structures.
Add lambda body vector structure.
Add lambda linear expression structures.
Add prototypes for functions in new files.
* lambda-mat.c: Include tree.h
2004-08-26 Daniel Berlin <dberlin@dberlin.org>
Sebastian Pop <pop@cri.ensmp.fr>
* tree-data-ref.h: Include lambda.h
(free_dependence_relation): Declared here.
(free_dependence_relations): Ditto.
(free_data_refs): Ditto.
* tree-data-ref.c (free_dependence_relation): New function.
(free_dependence_relations): Ditto.
(free_data_refs): Ditot.
(analyze_all_data_dependences): Free datarefs and dependence_relations.
(build_classic_dist_vector): Store in the dependence_relations the
information. Each arc in the dependence_relations graph is labelled
with the distance and direction vectors.
(build_classic_dir_vector): Ditto.
(compute_rw_wr_ww_dependences): Renamed again compute_all_dependences.
Now computes again the whole dependence graph including read-read
relations.
(compute_data_dependences_for_loop): Now dependence_relations contains
all the data, and thus it doesn't need to initialize the classic_dir
and classic_dist vectors.
(analyze_all_data_dependences): Adjusted for using the new interface of
compute_data_dependences_for_loop. Remove the statistics dump.
2004-08-26 Bob Wilson <bob.wilson@acm.org> 2004-08-26 Bob Wilson <bob.wilson@acm.org>
* config/xtensa/xtensa.c (xtensa_ld_opcodes, xtensa_st_opcodes): Delete. * config/xtensa/xtensa.c (xtensa_ld_opcodes, xtensa_st_opcodes): Delete.
......
...@@ -723,6 +723,8 @@ PRETTY_PRINT_H = pretty-print.h input.h $(OBSTACK_H) ...@@ -723,6 +723,8 @@ PRETTY_PRINT_H = pretty-print.h input.h $(OBSTACK_H)
DIAGNOSTIC_H = diagnostic.h diagnostic.def $(PRETTY_PRINT_H) DIAGNOSTIC_H = diagnostic.h diagnostic.def $(PRETTY_PRINT_H)
C_PRETTY_PRINT_H = c-pretty-print.h $(PRETTY_PRINT_H) $(C_COMMON_H) $(TREE_H) C_PRETTY_PRINT_H = c-pretty-print.h $(PRETTY_PRINT_H) $(C_COMMON_H) $(TREE_H)
SCEV_H = tree-scalar-evolution.h $(GGC_H) tree-chrec.h SCEV_H = tree-scalar-evolution.h $(GGC_H) tree-chrec.h
LAMBDA_H = lambda.h tree.h vec.h $(GGC_H)
TREE_DATA_REF_H = tree-data-ref.h $(LAMBDA_H)
# #
# Now figure out from those variables how to compile and link. # Now figure out from those variables how to compile and link.
...@@ -915,7 +917,8 @@ OBJS-common = \ ...@@ -915,7 +917,8 @@ OBJS-common = \
targhooks.o timevar.o toplev.o tracer.o tree.o tree-dump.o unroll.o \ targhooks.o timevar.o toplev.o tracer.o tree.o tree-dump.o unroll.o \
varasm.o varray.o vec.o version.o vmsdbgout.o xcoffout.o alloc-pool.o \ varasm.o varray.o vec.o version.o vmsdbgout.o xcoffout.o alloc-pool.o \
et-forest.o cfghooks.o bt-load.o pretty-print.o $(GGC) web.o passes.o \ et-forest.o cfghooks.o bt-load.o pretty-print.o $(GGC) web.o passes.o \
rtl-profile.o tree-profile.o rtlhooks.o cfgexpand.o lambda-mat.o rtl-profile.o tree-profile.o rtlhooks.o cfgexpand.o lambda-mat.o \
lambda-trans.o lambda-code.o
OBJS-md = $(out_object_file) OBJS-md = $(out_object_file)
OBJS-archive = $(EXTRA_OBJS) $(host_hook_obj) tree-inline.o \ OBJS-archive = $(EXTRA_OBJS) $(host_hook_obj) tree-inline.o \
...@@ -1737,7 +1740,7 @@ tree-scalar-evolution.o: tree-scalar-evolution.c $(CONFIG_H) $(SYSTEM_H) \ ...@@ -1737,7 +1740,7 @@ tree-scalar-evolution.o: tree-scalar-evolution.c $(CONFIG_H) $(SYSTEM_H) \
tree-data-ref.o: tree-data-ref.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ tree-data-ref.o: tree-data-ref.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
errors.h $(GGC_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \ errors.h $(GGC_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \
$(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h \ $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h \
tree-data-ref.h $(SCEV_H) tree-pass.h lambda.h tree-data-ref.h $(SCEV_H) tree-pass.h $(LAMBDA_H)
tree-vectorizer.o: tree-vectorizer.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \ tree-vectorizer.o: tree-vectorizer.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
errors.h $(GGC_H) $(OPTABS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \ errors.h $(GGC_H) $(OPTABS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \
$(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h tree-pass.h \ $(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h tree-pass.h \
...@@ -2137,7 +2140,12 @@ ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \ ...@@ -2137,7 +2140,12 @@ ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
$(REGS_H) toplev.h $(FLAGS_H) insn-config.h function.h $(RECOG_H) $(TARGET_H) \ $(REGS_H) toplev.h $(FLAGS_H) insn-config.h function.h $(RECOG_H) $(TARGET_H) \
$(BASIC_BLOCK_H) $(EXPR_H) output.h except.h $(TM_P_H) real.h $(OPTABS_H) \ $(BASIC_BLOCK_H) $(EXPR_H) output.h except.h $(TM_P_H) real.h $(OPTABS_H) \
$(CFGLOOP_H) $(CFGLOOP_H)
lambda-mat.o : lambda-mat.c lambda.h $(GGC_H) $(SYSTEM_H) $(CONFIG_H) $(TM_H) lambda-mat.o : lambda-mat.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) $(TM_H)
lambda-trans.o: lambda-trans.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) $(TM_H)
lambda-code.o: lambda-code.c $(LAMBDA_H) $(GGC_H) $(SYSTEM_H) $(CONFIG_H) \
errors.h $(TM_H) $(OPTABS_H) $(TREE_H) $(RTL_H) $(BASIC_BLOCK_H) diagnostic.h \
$(TREE_FLOW_H) $(TREE_DUMP_H) $(TIMEVAR_H) cfgloop.h \
$(TREE_DATA_REF_H) $(SCEV_H)
params.o : params.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(PARAMS_H) toplev.h params.o : params.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(PARAMS_H) toplev.h
hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H) hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H)
pretty-print.o: $(CONFIG_H) $(SYSTEM_H) pretty-print.c $(PRETTY_PRINT_H) pretty-print.o: $(CONFIG_H) $(SYSTEM_H) pretty-print.c $(PRETTY_PRINT_H)
......
...@@ -24,6 +24,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -24,6 +24,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "tm.h" #include "tm.h"
#include "ggc.h" #include "ggc.h"
#include "varray.h" #include "varray.h"
#include "tree.h"
#include "lambda.h" #include "lambda.h"
static void lambda_matrix_get_column (lambda_matrix, int, int, static void lambda_matrix_get_column (lambda_matrix, int, int,
......
/* Lambda matrix transformations.
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
Contributed by Daniel Berlin <dberlin@dberlin.org>.
This file is part of GCC.
GCC is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
#include "config.h"
#include "system.h"
#include "coretypes.h"
#include "tm.h"
#include "errors.h"
#include "ggc.h"
#include "tree.h"
#include "target.h"
#include "varray.h"
#include "lambda.h"
/* Allocate a new transformation matrix. */
lambda_trans_matrix
lambda_trans_matrix_new (int colsize, int rowsize)
{
lambda_trans_matrix ret;
ret = ggc_alloc (sizeof (*ret));
LTM_MATRIX (ret) = lambda_matrix_new (rowsize, colsize);
LTM_ROWSIZE (ret) = rowsize;
LTM_COLSIZE (ret) = colsize;
LTM_DENOMINATOR (ret) = 1;
return ret;
}
/* Compute the inverse of the transformation. */
lambda_trans_matrix
lambda_trans_matrix_inverse (lambda_trans_matrix mat)
{
lambda_trans_matrix inverse;
int determinant;
inverse = lambda_trans_matrix_new (LTM_ROWSIZE (mat), LTM_COLSIZE (mat));
determinant = lambda_matrix_inverse (LTM_MATRIX (mat), LTM_MATRIX (inverse),
LTM_ROWSIZE (mat));
LTM_DENOMINATOR (inverse) = determinant;
return inverse;
}
/* Print out a transformation matrix. */
void
print_lambda_trans_matrix (FILE *outfile, lambda_trans_matrix mat)
{
print_lambda_matrix (outfile, LTM_MATRIX (mat), LTM_ROWSIZE (mat),
LTM_COLSIZE (mat));
}
...@@ -22,6 +22,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -22,6 +22,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#ifndef LAMBDA_H #ifndef LAMBDA_H
#define LAMBDA_H #define LAMBDA_H
#include "vec.h"
/* An integer vector. A vector formally consists of an element of a vector /* An integer vector. A vector formally consists of an element of a vector
space. A vector space is a set that is closed under vector addition space. A vector space is a set that is closed under vector addition
and scalar multiplication. In this vector space, an element is a list of and scalar multiplication. In this vector space, an element is a list of
...@@ -31,6 +33,86 @@ typedef int *lambda_vector; ...@@ -31,6 +33,86 @@ typedef int *lambda_vector;
all vectors are the same length). */ all vectors are the same length). */
typedef lambda_vector *lambda_matrix; typedef lambda_vector *lambda_matrix;
/* A transformation matrix. */
typedef struct
{
lambda_matrix matrix;
int rowsize;
int colsize;
int denominator;
} *lambda_trans_matrix;
#define LTM_MATRIX(T) ((T)->matrix)
#define LTM_ROWSIZE(T) ((T)->rowsize)
#define LTM_COLSIZE(T) ((T)->colsize)
#define LTM_DENOMINATOR(T) ((T)->denominator)
/* A vector representing a statement in the body of a loop. */
typedef struct
{
lambda_vector coefficients;
int size;
int denominator;
} *lambda_body_vector;
#define LBV_COEFFICIENTS(T) ((T)->coefficients)
#define LBV_SIZE(T) ((T)->size)
#define LBV_DENOMINATOR(T) ((T)->denominator)
/* Piecewise linear expression. */
typedef struct lambda_linear_expression_s
{
lambda_vector coefficients;
int constant;
lambda_vector invariant_coefficients;
int denominator;
struct lambda_linear_expression_s *next;
} *lambda_linear_expression;
#define LLE_COEFFICIENTS(T) ((T)->coefficients)
#define LLE_CONSTANT(T) ((T)->constant)
#define LLE_INVARIANT_COEFFICIENTS(T) ((T)->invariant_coefficients)
#define LLE_DENOMINATOR(T) ((T)->denominator)
#define LLE_NEXT(T) ((T)->next)
lambda_linear_expression lambda_linear_expression_new (int, int);
void print_lambda_linear_expression (FILE *, lambda_linear_expression, int,
int, char);
/* Loop structure. */
typedef struct lambda_loop_s
{
lambda_linear_expression lower_bound;
lambda_linear_expression upper_bound;
lambda_linear_expression linear_offset;
int step;
} *lambda_loop;
#define LL_LOWER_BOUND(T) ((T)->lower_bound)
#define LL_UPPER_BOUND(T) ((T)->upper_bound)
#define LL_LINEAR_OFFSET(T) ((T)->linear_offset)
#define LL_STEP(T) ((T)->step)
/* Loop nest structure. */
typedef struct
{
lambda_loop *loops;
int depth;
int invariants;
} *lambda_loopnest;
#define LN_LOOPS(T) ((T)->loops)
#define LN_DEPTH(T) ((T)->depth)
#define LN_INVARIANTS(T) ((T)->invariants)
lambda_loopnest lambda_loopnest_new (int, int);
lambda_loopnest lambda_loopnest_transform (lambda_loopnest, lambda_trans_matrix);
bool lambda_transform_legal_p (lambda_trans_matrix, int, varray_type);
void print_lambda_loopnest (FILE *, lambda_loopnest, char);
#define lambda_loop_new() (lambda_loop) ggc_alloc_cleared (sizeof (struct lambda_loop_s))
void print_lambda_loop (FILE *, lambda_loop, int, int, char);
lambda_matrix lambda_matrix_new (int, int); lambda_matrix lambda_matrix_new (int, int);
void lambda_matrix_id (lambda_matrix, int); void lambda_matrix_id (lambda_matrix, int);
...@@ -61,9 +143,32 @@ void lambda_matrix_project_to_null (lambda_matrix, int, int, int, ...@@ -61,9 +143,32 @@ void lambda_matrix_project_to_null (lambda_matrix, int, int, int,
lambda_vector); lambda_vector);
void print_lambda_matrix (FILE *, lambda_matrix, int, int); void print_lambda_matrix (FILE *, lambda_matrix, int, int);
lambda_trans_matrix lambda_trans_matrix_new (int, int);
bool lambda_trans_matrix_nonsingular_p (lambda_trans_matrix);
bool lambda_trans_matrix_fullrank_p (lambda_trans_matrix);
int lambda_trans_matrix_rank (lambda_trans_matrix);
lambda_trans_matrix lambda_trans_matrix_basis (lambda_trans_matrix);
lambda_trans_matrix lambda_trans_matrix_padding (lambda_trans_matrix);
lambda_trans_matrix lambda_trans_matrix_inverse (lambda_trans_matrix);
void print_lambda_trans_matrix (FILE *, lambda_trans_matrix);
void lambda_matrix_vector_mult (lambda_matrix, int, int, lambda_vector, void lambda_matrix_vector_mult (lambda_matrix, int, int, lambda_vector,
lambda_vector); lambda_vector);
lambda_body_vector lambda_body_vector_new (int);
lambda_body_vector lambda_body_vector_compute_new (lambda_trans_matrix,
lambda_body_vector);
void print_lambda_body_vector (FILE *, lambda_body_vector);
struct loop;
lambda_loopnest gcc_loopnest_to_lambda_loopnest (struct loop *,
VEC(tree) **,
VEC(tree) **);
void lambda_loopnest_to_gcc_loopnest (struct loop *, VEC(tree) *,
VEC(tree) *,
lambda_loopnest,
lambda_trans_matrix);
static inline void lambda_vector_negate (lambda_vector, lambda_vector, int); static inline void lambda_vector_negate (lambda_vector, lambda_vector, int);
static inline void lambda_vector_mult_const (lambda_vector, lambda_vector, int, int); static inline void lambda_vector_mult_const (lambda_vector, lambda_vector, int, int);
static inline void lambda_vector_add (lambda_vector, lambda_vector, static inline void lambda_vector_add (lambda_vector, lambda_vector,
......
...@@ -22,11 +22,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -22,11 +22,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#ifndef GCC_TREE_DATA_REF_H #ifndef GCC_TREE_DATA_REF_H
#define GCC_TREE_DATA_REF_H #define GCC_TREE_DATA_REF_H
struct data_reference GTY(()) #include "lambda.h"
struct data_reference
{ {
/* An identifier. */
unsigned int id;
/* A pointer to the statement that contains this DR. */ /* A pointer to the statement that contains this DR. */
tree stmt; tree stmt;
...@@ -47,7 +46,6 @@ struct data_reference GTY(()) ...@@ -47,7 +46,6 @@ struct data_reference GTY(())
}; };
#define DR_ID(DR) DR->id
#define DR_STMT(DR) DR->stmt #define DR_STMT(DR) DR->stmt
#define DR_REF(DR) DR->ref #define DR_REF(DR) DR->ref
#define DR_BASE_NAME(DR) DR->base_name #define DR_BASE_NAME(DR) DR->base_name
...@@ -74,7 +72,7 @@ enum data_dependence_direction { ...@@ -74,7 +72,7 @@ enum data_dependence_direction {
are stored in the data_dependence_relation structure under the form are stored in the data_dependence_relation structure under the form
of an array of subscripts. */ of an array of subscripts. */
struct subscript GTY(()) struct subscript
{ {
/* A description of the iterations for which the elements are /* A description of the iterations for which the elements are
accessed twice. */ accessed twice. */
...@@ -91,11 +89,6 @@ struct subscript GTY(()) ...@@ -91,11 +89,6 @@ struct subscript GTY(())
B. The distance is a tree scalar expression, ie. a constant or a B. The distance is a tree scalar expression, ie. a constant or a
symbolic expression, but certainly not a chrec function. */ symbolic expression, but certainly not a chrec function. */
tree distance; tree distance;
/* Direction (or sign) of the distance. This more abstract (less
precise) information is extracted from the distance field, for
the convenience of some analyzers. */
enum data_dependence_direction direction;
}; };
#define SUB_CONFLICTS_IN_A(SUB) SUB->conflicting_iterations_in_a #define SUB_CONFLICTS_IN_A(SUB) SUB->conflicting_iterations_in_a
...@@ -103,12 +96,11 @@ struct subscript GTY(()) ...@@ -103,12 +96,11 @@ struct subscript GTY(())
#define SUB_LAST_CONFLICT_IN_A(SUB) SUB->last_conflict_in_a #define SUB_LAST_CONFLICT_IN_A(SUB) SUB->last_conflict_in_a
#define SUB_LAST_CONFLICT_IN_B(SUB) SUB->last_conflict_in_b #define SUB_LAST_CONFLICT_IN_B(SUB) SUB->last_conflict_in_b
#define SUB_DISTANCE(SUB) SUB->distance #define SUB_DISTANCE(SUB) SUB->distance
#define SUB_DIRECTION(SUB) SUB->direction
/* A data_dependence_relation represents a relation between two /* A data_dependence_relation represents a relation between two
data_references A and B. */ data_references A and B. */
struct data_dependence_relation GTY(()) struct data_dependence_relation
{ {
struct data_reference *a; struct data_reference *a;
...@@ -131,6 +123,12 @@ struct data_dependence_relation GTY(()) ...@@ -131,6 +123,12 @@ struct data_dependence_relation GTY(())
this array. This is the attribute that labels the edge A->B of this array. This is the attribute that labels the edge A->B of
the data_dependence_relation. */ the data_dependence_relation. */
varray_type subscripts; varray_type subscripts;
/* The classic direction vector. */
lambda_vector dir_vect;
/* The classic distance vector. */
lambda_vector dist_vect;
}; };
#define DDR_A(DDR) DDR->a #define DDR_A(DDR) DDR->a
...@@ -141,6 +139,8 @@ struct data_dependence_relation GTY(()) ...@@ -141,6 +139,8 @@ struct data_dependence_relation GTY(())
VARRAY_GENERIC_PTR_INIT (DDR_SUBSCRIPTS (DDR), N, "subscripts_vector"); VARRAY_GENERIC_PTR_INIT (DDR_SUBSCRIPTS (DDR), N, "subscripts_vector");
#define DDR_SUBSCRIPT(DDR, I) VARRAY_GENERIC_PTR (DDR_SUBSCRIPTS (DDR), I) #define DDR_SUBSCRIPT(DDR, I) VARRAY_GENERIC_PTR (DDR_SUBSCRIPTS (DDR), I)
#define DDR_NUM_SUBSCRIPTS(DDR) VARRAY_ACTIVE_SIZE (DDR_SUBSCRIPTS (DDR)) #define DDR_NUM_SUBSCRIPTS(DDR) VARRAY_ACTIVE_SIZE (DDR_SUBSCRIPTS (DDR))
#define DDR_DIR_VECT(DDR) DDR->dir_vect
#define DDR_DIST_VECT(DDR) DDR->dist_vect
...@@ -149,7 +149,6 @@ struct data_dependence_relation *initialize_data_dependence_relation ...@@ -149,7 +149,6 @@ struct data_dependence_relation *initialize_data_dependence_relation
void compute_affine_dependence (struct data_dependence_relation *); void compute_affine_dependence (struct data_dependence_relation *);
extern void analyze_all_data_dependences (struct loops *); extern void analyze_all_data_dependences (struct loops *);
extern void compute_data_dependences_for_loop (unsigned, struct loop *, extern void compute_data_dependences_for_loop (unsigned, struct loop *,
varray_type *, varray_type *,
varray_type *, varray_type *); varray_type *, varray_type *);
extern struct data_reference * init_data_ref (tree, tree, tree, tree, bool); extern struct data_reference * init_data_ref (tree, tree, tree, tree, bool);
extern struct data_reference *analyze_array (tree, tree, bool); extern struct data_reference *analyze_array (tree, tree, bool);
...@@ -163,6 +162,9 @@ extern void dump_data_dependence_direction (FILE *, ...@@ -163,6 +162,9 @@ extern void dump_data_dependence_direction (FILE *,
enum data_dependence_direction); enum data_dependence_direction);
extern bool array_base_name_differ_p (struct data_reference *, extern bool array_base_name_differ_p (struct data_reference *,
struct data_reference *, bool *p); struct data_reference *, bool *p);
extern void free_dependence_relation (struct data_dependence_relation *);
extern void free_dependence_relations (varray_type);
extern void free_data_refs (varray_type);
......
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