From 731fbc91d130911bef3c876ef9f9fb0909d10ed1 Mon Sep 17 00:00:00 2001
From: Rafael Ravedutti <rafaelravedutti@gmail.com>
Date: Fri, 18 Feb 2022 16:47:04 +0100
Subject: [PATCH] Add static arrays declaration on GPU constant memory

Signed-off-by: Rafael Ravedutti <rafaelravedutti@gmail.com>
---
 src/pairs/code_gen/cgen.py | 10 ++++++++++
 src/pairs/ir/arrays.py     |  3 +++
 2 files changed, 13 insertions(+)

diff --git a/src/pairs/code_gen/cgen.py b/src/pairs/code_gen/cgen.py
index 7b05e17..7f0a05e 100644
--- a/src/pairs/code_gen/cgen.py
+++ b/src/pairs/code_gen/cgen.py
@@ -50,6 +50,16 @@ class CGen:
         self.print("")
         self.print("using namespace pairs;")
         self.print("")
+
+        if self.target.is_gpu():
+            for array in self.sim.arrays.statics():
+                if array.device_flag:
+                    t = array.type()
+                    tkw = Types.ctype2keyword(t)
+                    size = self.generate_expression(BinOp.inline(array.alloc_size()))
+                    self.print(f"__constant__ {tkw} d_{array.name()}[{size}];")
+
+        self.print("")
         for module in self.sim.modules():
             self.generate_module(module)
         self.print.end()
diff --git a/src/pairs/ir/arrays.py b/src/pairs/ir/arrays.py
index 8316fc0..1ca7ca8 100644
--- a/src/pairs/ir/arrays.py
+++ b/src/pairs/ir/arrays.py
@@ -27,6 +27,9 @@ class Arrays:
     def all(self):
         return self.arrays
 
+    def statics(self):
+        return [a for a in self.arrays if a.is_static()]
+
     def find(self, a_name):
         array = [a for a in self.arrays if a.name() == a_name]
         if array:
-- 
GitLab