From f4f29148eb515499afb0b11c712e100f297f1ca1 Mon Sep 17 00:00:00 2001 From: Tobias Grosser Date: Mon, 26 Aug 2013 13:00:04 -0700 Subject: [PATCH] gpu_print: Factor out printing of array arguments Signed-off-by: Tobias Grosser Signed-off-by: Sven Verdoolaege --- cuda.c | 20 ++++++-------------- gpu_print.c | 34 ++++++++++++++++++++++++++++++++++ gpu_print.h | 4 ++++ 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/cuda.c b/cuda.c index 4842074..6c9dfe8 100644 --- a/cuda.c +++ b/cuda.c @@ -212,20 +212,12 @@ static __isl_give isl_printer *print_kernel_arguments(__isl_take isl_printer *p, if (!first) p = isl_printer_print_str(p, ", "); - if (types) { - p = isl_printer_print_str(p, prog->array[i].type); - p = isl_printer_print_str(p, " "); - } - - if (gpu_array_is_read_only_scalar(&prog->array[i])) { - p = isl_printer_print_str(p, prog->array[i].name); - } else { - if (types) - p = isl_printer_print_str(p, "*"); - else - p = isl_printer_print_str(p, "dev_"); - p = isl_printer_print_str(p, prog->array[i].name); - } + if (types) + p = gpu_array_info_print_declaration_argument(p, + &prog->array[i]); + else + p = gpu_array_info_print_call_argument(p, + &prog->array[i]); first = 0; } diff --git a/gpu_print.c b/gpu_print.c index 1af3bcd..4a7790c 100644 --- a/gpu_print.c +++ b/gpu_print.c @@ -55,6 +55,40 @@ __isl_give isl_printer *gpu_array_info_print_size(__isl_take isl_printer *prn, return prn; } +/* Print the declaration of an array argument. + */ +__isl_give isl_printer *gpu_array_info_print_declaration_argument( + __isl_take isl_printer *p, struct gpu_array_info *array) +{ + if (gpu_array_is_read_only_scalar(array)) { + p = isl_printer_print_str(p, array->type); + p = isl_printer_print_str(p, " "); + p = isl_printer_print_str(p, array->name); + return p; + } + + p = isl_printer_print_str(p, array->type); + p = isl_printer_print_str(p, " "); + p = isl_printer_print_str(p, "*"); + p = isl_printer_print_str(p, array->name); + + return p; +} + +/* Print the call of an array argument. + */ +__isl_give isl_printer *gpu_array_info_print_call_argument( + __isl_take isl_printer *p, struct gpu_array_info *array) +{ + if (gpu_array_is_read_only_scalar(array)) + return isl_printer_print_str(p, array->name); + + p = isl_printer_print_str(p, "dev_"); + p = isl_printer_print_str(p, array->name); + + return p; +} + /* Print an access to the element in the private/shared memory copy * described by "stmt". The index of the copy is recorded in * stmt->local_index as an access to the array. diff --git a/gpu_print.h b/gpu_print.h index 9b4a76c..be18a62 100644 --- a/gpu_print.h +++ b/gpu_print.h @@ -8,6 +8,10 @@ __isl_give isl_printer *gpu_print_macros(__isl_take isl_printer *p, __isl_give isl_printer *gpu_array_info_print_size(__isl_take isl_printer *prn, struct gpu_array_info *array); +__isl_give isl_printer *gpu_array_info_print_declaration_argument( + __isl_take isl_printer *p, struct gpu_array_info *array); +__isl_give isl_printer *gpu_array_info_print_call_argument( + __isl_take isl_printer *p, struct gpu_array_info *array); __isl_give isl_printer *ppcg_kernel_print_copy(__isl_take isl_printer *p, struct ppcg_kernel_stmt *stmt); -- 2.11.4.GIT