Candl 0.6.0
dependence.h
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  *                          Structure display function                        *
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  *                         Memory alloc/dealloc function                      *
00117  ******************************************************************************/
00118 candl_dependence_p      candl_dependence_malloc();
00119 void                    candl_dependence_free(candl_dependence_p);
00120 
00121 
00122 /******************************************************************************
00123  *                             Processing functions                           *
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  *                          Scalar analysis functions                         *
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 CandlDependence*
00178 candl_dependence_prune_transitively_covered (CandlDependence* deps);
00179 
00180 # if defined(__cplusplus)
00181   }
00182 # endif
00183 #endif /* define CANDL_DEPENDENCE_H */
00184