mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-15 04:29:42 +00:00
a041239bb7
ppcg will be used to provide mapping decisions for GPU code generation. As we do not use C as input language, we do not include pet. However, we include pet.h from pet 82cacb71 plus a set of dummy functions to ensure ppcg links without problems. The version of ppcg committed is unmodified ppcg-0.04 which has been well tested in the context of LLVM. It does not provide an official library interface yet, which means that in upcoming commits we will add minor modifications to make necessary functionality accessible. We will aim to upstream these modifications after we gained enough experience with GPU generation support in Polly to propose a stable interface. Reviewers: Meinersbur Subscribers: pollydev, llvm-commits Differential Revision: http://reviews.llvm.org/D22033 llvm-svn: 275274
72 lines
1.4 KiB
C
72 lines
1.4 KiB
C
#include <isl/aff.h>
|
|
#include <isl/map.h>
|
|
|
|
#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;
|
|
}
|