From 3b0b9c96f407ba90f0ad0eed87f36dac9d5d4330 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Mon, 11 Oct 2021 18:33:00 +0200
Subject: [PATCH] descriptor: add an exec field in the accessor macros

---
 control/descriptor.h | 58 +++++++++++++++++++++++++-------------------
 1 file changed, 33 insertions(+), 25 deletions(-)

diff --git a/control/descriptor.h b/control/descriptor.h
index 6bf6d9a81..dda8fa719 100644
--- a/control/descriptor.h
+++ b/control/descriptor.h
@@ -233,33 +233,41 @@ inline static int chameleon_desc_islocal( const CHAM_desc_t *A, int m, int n )
  * CHAMELEON_ACCESS_RW(C, Cm, Cn)
  * CHAMELEON_END_ACCESS_DECLARATION
  */
-#define CHAMELEON_BEGIN_ACCESS_DECLARATION { \
-    unsigned __chameleon_need_submit = 0; \
+#define CHAMELEON_BEGIN_ACCESS_DECLARATION {    \
+    unsigned __chameleon_need_exec = 0;         \
+    unsigned __chameleon_need_submit = 0;       \
     RUNTIME_BEGIN_ACCESS_DECLARATION
 
-#define CHAMELEON_ACCESS_R(A, Am, An) do { \
-    if (chameleon_desc_islocal(A, Am, An)) __chameleon_need_submit = 1; \
-    RUNTIME_ACCESS_R(A, Am, An); \
-} while(0)
-
-#define CHAMELEON_ACCESS_W(A, Am, An) do { \
-    if (chameleon_desc_islocal(A, Am, An)) __chameleon_need_submit = 1; \
-    RUNTIME_ACCESS_W(A, Am, An); \
-} while(0)
-
-#define CHAMELEON_ACCESS_RW(A, Am, An) do { \
-    if (chameleon_desc_islocal(A, Am, An)) __chameleon_need_submit = 1; \
-    RUNTIME_ACCESS_RW(A, Am, An); \
-} while(0)
-
-#define CHAMELEON_RANK_CHANGED(rank) do {\
-    __chameleon_need_submit = 1; \
-    RUNTIME_RANK_CHANGED(rank); \
-} while (0)
-
-#define CHAMELEON_END_ACCESS_DECLARATION \
-    RUNTIME_END_ACCESS_DECLARATION; \
-    if (!__chameleon_need_submit) return; \
+#define CHAMELEON_ACCESS_R(A, Am, An) do {                              \
+        if (chameleon_desc_islocal(A, Am, An)) __chameleon_need_submit = 1; \
+        RUNTIME_ACCESS_R(A, Am, An);                                    \
+    } while(0)
+
+#define CHAMELEON_ACCESS_W(A, Am, An) do {              \
+        if (chameleon_desc_islocal(A, Am, An)) {        \
+            __chameleon_need_exec = 1;                  \
+            __chameleon_need_submit = 1;                \
+        }                                               \
+        RUNTIME_ACCESS_W(A, Am, An);                    \
+    } while(0)
+
+#define CHAMELEON_ACCESS_RW(A, Am, An) do {             \
+        if (chameleon_desc_islocal(A, Am, An)) {        \
+            __chameleon_need_exec = 1;                  \
+            __chameleon_need_submit = 1;                \
+        }                                               \
+        RUNTIME_ACCESS_RW(A, Am, An);                   \
+    } while(0)
+
+#define CHAMELEON_RANK_CHANGED(rank) do {       \
+        __chameleon_need_submit = 1;            \
+        RUNTIME_RANK_CHANGED(rank);             \
+    } while (0)
+
+#define CHAMELEON_END_ACCESS_DECLARATION        \
+    RUNTIME_END_ACCESS_DECLARATION;             \
+    if (!__chameleon_need_submit) return;       \
+    (void)__chameleon_need_exec;                \
 }
 
 #ifdef __cplusplus
-- 
GitLab