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 dependence);
00101 # ifdef CANDL_SUPPORTS_SCOPLIB
00102 void candl_dependence_print_scop(FILE*, FILE*, CandlDependence*);
00103 # endif
00104
00105
00106
00107
00108
00109 candl_dependence_p candl_dependence_malloc();
00110 void candl_dependence_free(candl_dependence_p);
00111
00112
00113
00114
00115
00116 int candl_dependence_gcd_test(CandlStatement*,
00117 CandlStatement*,
00118 CandlMatrix*, int);
00119 int candl_dependence_check(CandlProgram *,
00120 candl_dependence_p,
00121 CandlOptions *);
00122 candl_dependence_p candl_dependence(CandlProgram *, CandlOptions *);
00123
00124
00125
00126
00127
00128 CandlStatement**
00129 candl_dependence_refvar_chain(candl_program_p, CandlStatement*, int, int);
00130
00131 int
00132 candl_dependence_var_is_ref(CandlStatement*, int);
00133
00134 int
00135 candl_dependence_check_domain_is_included(CandlStatement*, CandlStatement*,
00136 CandlMatrix*, int);
00137
00138 int
00139 candl_dependence_scalar_is_privatizable_at(candl_program_p, int, int);
00140
00141 int
00142 candl_dependence_is_loop_carried (candl_program_p, CandlDependence*, int);
00143
00144 void
00145 candl_dependence_prune_scalar_waw (candl_program_p, CandlOptions*,
00146 CandlDependence**);
00147
00148 void
00149 candl_dependence_prune_with_privatization (candl_program_p, CandlOptions*,
00150 CandlDependence**);
00151
00152 int
00153 candl_dependence_scalar_renaming(candl_program_p, CandlOptions*,
00154 CandlDependence**);
00155
00156 int
00157 candl_dependence_analyze_scalars(candl_program_p, CandlOptions*);
00158
00159 int
00160 candl_num_dependences(CandlDependence *candl_deps);
00161
00162 void
00163 candl_compute_last_writer (CandlDependence *dep, CandlProgram *prog);
00164
00165 # if defined(__cplusplus)
00166 }
00167 # endif
00168 #endif
00169