00001
00037 #ifndef CANDL_DEPENDENCE_H
00038 # define CANDL_DEPENDENCE_H
00039
00040 # include <stdio.h>
00041 # include <candl/statement.h>
00042 # include <candl/matrix.h>
00043 # include <candl/program.h>
00044 # include <candl/options.h>
00045
00046 # define CANDL_ARRAY_BUFF_SIZE 2048
00047 # define CANDL_VAR_UNDEF 1
00048 # define CANDL_VAR_IS_DEF 2
00049 # define CANDL_VAR_IS_USED 3
00050 # define CANDL_VAR_IS_DEF_USED 4
00051
00052
00053 # if defined(__cplusplus)
00054 extern "C"
00055 {
00056 # endif
00057
00058
00064 struct candldependence
00065 { CandlStatement * source;
00066 CandlStatement * target;
00067 int depth;
00068 int type;
00081 int ref_source;
00082 int ref_target;
00083 CandlMatrix * domain;
00085 void* usr;
00087 struct candldependence * next;
00088 };
00089 typedef struct candldependence CandlDependence;
00090 typedef struct candldependence candl_dependence_t;
00091 typedef struct candldependence * candl_dependence_p;
00092
00093
00094
00095
00096
00097 void candl_dependence_print_structure(FILE *, candl_dependence_p, int);
00098 void candl_dependence_print(FILE *, candl_dependence_p);
00099 void candl_dependence_pprint(FILE *, candl_dependence_p);
00100 void candl_dependence_view(candl_dependence_p);
00101 # ifdef CANDL_SUPPORTS_SCOPLIB
00102 CandlDependence* candl_dependence_read_from_scop(scoplib_scop_p, CandlProgram*);
00103 void candl_dependence_update_scop_with_deps(scoplib_scop_p, CandlDependence*);
00104 void candl_dependence_print_scop(FILE*, FILE*, CandlDependence*);
00105 # endif
00106
00107
00108
00109
00110
00111 candl_dependence_p candl_dependence_malloc();
00112 void candl_dependence_free(candl_dependence_p);
00113
00114
00115
00116
00117
00118 int candl_dependence_gcd_test(CandlStatement*,
00119 CandlStatement*,
00120 CandlMatrix*, int);
00121 int candl_dependence_check(CandlProgram *,
00122 candl_dependence_p,
00123 CandlOptions *);
00124 candl_dependence_p candl_dependence(CandlProgram *, CandlOptions *);
00125
00126
00127
00128
00129
00130 int
00131 candl_dependence_var_is_scalar (candl_program_p, int);
00132
00133 CandlStatement**
00134 candl_dependence_refvar_chain(candl_program_p, CandlStatement*, int, int);
00135
00136 int
00137 candl_dependence_var_is_ref(CandlStatement*, int);
00138
00139 int
00140 candl_dependence_check_domain_is_included(CandlStatement*, CandlStatement*,
00141 CandlMatrix*, int);
00142
00143 int
00144 candl_dependence_scalar_is_privatizable_at(candl_program_p, int, int);
00145
00146 int
00147 candl_dependence_is_loop_carried (candl_program_p, CandlDependence*, int);
00148
00149 void
00150 candl_dependence_prune_scalar_waw (candl_program_p, CandlOptions*,
00151 CandlDependence**);
00152
00153 void
00154 candl_dependence_prune_with_privatization (candl_program_p, CandlOptions*,
00155 CandlDependence**);
00156
00157 int
00158 candl_dependence_scalar_renaming(candl_program_p, CandlOptions*,
00159 CandlDependence**);
00160
00161 int
00162 candl_dependence_analyze_scalars(candl_program_p, CandlOptions*);
00163
00164 int
00165 candl_num_dependences(CandlDependence *candl_deps);
00166
00167 void
00168 candl_compute_last_writer (CandlDependence *dep, CandlProgram *prog);
00169
00170 # if defined(__cplusplus)
00171 }
00172 # endif
00173 #endif
00174