/* Print code for initializing the device for execution of the transformed * code. This includes declaring locally defined variables as well as * declaring and allocating the required copies of arrays on the device. */ static __isl_give isl_printer *init_device(__isl_take isl_printer *p, struct gpu_prog *prog) { p = print_cuda_macros(p); p = gpu_print_local_declarations(p, prog); p = declare_device_arrays(p, prog); p = allocate_device_arrays(p, prog); p = bind_device_textures_surfaces(p, prog); return p; }
/* Given a gpu_prog "prog" and the corresponding transformed AST * "tree", print the entire OpenCL code to "p". */ static __isl_give isl_printer *print_opencl(__isl_take isl_printer *p, struct gpu_prog *prog, __isl_keep isl_ast_node *tree, struct gpu_types *types, void *user) { struct opencl_info *opencl = user; opencl->kprinter = isl_printer_set_output_format(opencl->kprinter, ISL_FORMAT_C); if (any_double_elements(prog)) opencl->kprinter = opencl_enable_double_support( opencl->kprinter); if (opencl->options->opencl_print_kernel_types) opencl->kprinter = gpu_print_types(opencl->kprinter, types, prog); if (!opencl->kprinter) return isl_printer_free(p); p = ppcg_start_block(p); p = opencl_print_host_macros(p); p = gpu_print_local_declarations(p, prog); p = opencl_declare_device_arrays(p, prog); p = opencl_setup(p, opencl->input, opencl); p = opencl_allocate_device_arrays(p, prog); p = opencl_print_host_code(p, prog, tree, opencl); p = opencl_release_device_arrays(p, prog); p = opencl_release_cl_objects(p, opencl); p = ppcg_end_block(p); return p; }