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