1/* example-isl.c */ 2#include <cloog/cloog.h> 3#include <cloog/isl/cloog.h> 4 5/* Input problem */ 6int nb_parameters = 1; 7char *parameter_name[] = {"N"}; 8char *iterator_name[] = {"i", "j"}; 9char *scattering_name[] = {"t0", "t1", "t2"}; 10char *str_context = "[N] -> { : N > 0}"; 11char *str_domain1 = "[N] -> {[i, j] : 0 <= i < N and 0 <= j < N}"; 12char *str_domain2 = "[N] -> {[i, j] : 0 <= i < N and 0 <= j < N}"; 13char *str_scattering1 = "[N] -> {[i, j] -> [0, i + j, j]}"; 14char *str_scattering2 = "[N] -> {[i, j] -> [1, i, -j]}"; 15 16int main() { 17 isl_ctx *ctx; 18 isl_set *set_context, *set1, *set2; 19 isl_map *map1, *map2; 20 CloogDomain *context, *domain1, *domain2; 21 CloogScattering *scattering1, *scattering2; 22 CloogUnionDomain *domains; 23 CloogInput *input; 24 CloogState *state; 25 CloogOptions *options; 26 struct clast_stmt *root; 27 28 /* Build isl structures for context, sets and mapping */ 29 ctx = isl_ctx_alloc(); 30 set_context = isl_set_read_from_str(ctx, str_context); 31 set1 = isl_set_read_from_str(ctx, str_domain1); 32 set2 = isl_set_read_from_str(ctx, str_domain2); 33 map1 = isl_map_read_from_str(ctx, str_scattering1); 34 map2 = isl_map_read_from_str(ctx, str_scattering2); 35 36 /* Translate them to CLooG context, domains and scattering */ 37 context = cloog_domain_from_isl_set(set_context); 38 domain1 = cloog_domain_from_isl_set(set1); 39 domain2 = cloog_domain_from_isl_set(set2); 40 scattering1 = cloog_scattering_from_isl_map(map1); 41 scattering2 = cloog_scattering_from_isl_map(map2); 42 43 /* Prepare the list of domains to scan */ 44 domains = cloog_union_domain_alloc(nb_parameters); 45 cloog_union_domain_add_domain(domains, "S1", domain1, scattering1, NULL); 46 cloog_union_domain_add_domain(domains, "S2", domain2, scattering2, NULL); 47 cloog_union_domain_set_name(domains, CLOOG_PARAM, 0, parameter_name[0]); 48 cloog_union_domain_set_name(domains, CLOOG_ITER, 0, iterator_name[0]); 49 cloog_union_domain_set_name(domains, CLOOG_ITER, 1, iterator_name[1]); 50 cloog_union_domain_set_name(domains, CLOOG_SCAT, 0, scattering_name[0]); 51 cloog_union_domain_set_name(domains, CLOOG_SCAT, 1, scattering_name[1]); 52 cloog_union_domain_set_name(domains, CLOOG_SCAT, 2, scattering_name[2]); 53 54 /* Build the input, generate the AST of the scanning code and print it */ 55 input = cloog_input_alloc(context, domains); 56 state = cloog_isl_state_malloc(ctx); 57 options = cloog_options_malloc(state); 58 root = cloog_clast_create_from_input(input, options); 59 clast_pprint(stdout, root, 0, options); 60 61 /* Recycle allocated memory */ 62 cloog_clast_free(root); 63 cloog_options_free(options); 64 cloog_state_free(state); 65 isl_ctx_free(ctx); 66} 67