#include #include #include "gpu_array_tile.h" struct gpu_array_tile *gpu_array_tile_free(struct gpu_array_tile *tile) { int j; if (!tile) return NULL; for (j = 0; j < tile->n; ++j) { isl_val_free(tile->bound[j].size); isl_val_free(tile->bound[j].stride); isl_aff_free(tile->bound[j].lb); isl_aff_free(tile->bound[j].shift); } free(tile->bound); isl_multi_aff_free(tile->tiling); free(tile); return NULL; } /* Create a gpu_array_tile for an array of dimension "n_index". */ struct gpu_array_tile *gpu_array_tile_create(isl_ctx *ctx, int n_index) { int i; struct gpu_array_tile *tile; tile = isl_calloc_type(ctx, struct gpu_array_tile); if (!tile) return NULL; tile->ctx = ctx; tile->bound = isl_alloc_array(ctx, struct gpu_array_bound, n_index); if (!tile->bound) return gpu_array_tile_free(tile); tile->n = n_index; for (i = 0; i < n_index; ++i) { tile->bound[i].size = NULL; tile->bound[i].lb = NULL; tile->bound[i].stride = NULL; tile->bound[i].shift = NULL; } return tile; } /* Compute the size of the tile specified by "tile" * in number of elements and return the result. */ __isl_give isl_val *gpu_array_tile_size(struct gpu_array_tile *tile) { int i; isl_val *size; if (!tile) return NULL; size = isl_val_one(tile->ctx); for (i = 0; i < tile->n; ++i) size = isl_val_mul(size, isl_val_copy(tile->bound[i].size)); return size; }