From 9294e7d9075239b803e93e9ec5821e7dfeac14cc Mon Sep 17 00:00:00 2001 From: Nora Abi Akar <nora.abiakar@gmail.com> Date: Mon, 13 Dec 2021 12:47:54 +0100 Subject: [PATCH] Modcc: Forward declare procedure kernels in generated GPU code (#1787) --- modcc/printer/gpuprinter.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/modcc/printer/gpuprinter.cpp b/modcc/printer/gpuprinter.cpp index 3b431592..97154abe 100644 --- a/modcc/printer/gpuprinter.cpp +++ b/modcc/printer/gpuprinter.cpp @@ -186,17 +186,27 @@ std::string emit_gpu_cu_source(const Module& module_, const printer_options& opt << "using ::arb::gpu::max;\n\n"; // Procedures as __device__ functions. - auto emit_procedure_kernel = [&] (ProcedureExpression* e) { + auto emit_procedure_proto = [&] (ProcedureExpression* e) { out << fmt::format("__device__\n" "void {}(arb_mechanism_ppack params_, int tid_", e->name()); for(auto& arg: e->args()) out << ", arb_value_type " << arg->is_argument()->name(); - out << ") {\n" << indent + out << ")"; + }; + + auto emit_procedure_kernel = [&] (ProcedureExpression* e) { + emit_procedure_proto(e); + out << " {\n" << indent << "PPACK_IFACE_BLOCK;\n" << cuprint(e->body()) << popindent << "}\n\n"; }; + for (auto& p: module_normal_procedures(module_)) { + emit_procedure_proto(p); + out << ";\n\n"; + } + for (auto& p: module_normal_procedures(module_)) { emit_procedure_kernel(p); } -- GitLab