From 5b58a8841c291a7d3e284fb38a1c03973269409b Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Wed, 27 Nov 2024 14:21:35 +0100
Subject: [PATCH] Fix default functions when providing an allocated matrix when
 creating the descriptor

---
 control/descriptor.c | 34 ++++++++++++++++++++++++++++++----
 1 file changed, 30 insertions(+), 4 deletions(-)

diff --git a/control/descriptor.c b/control/descriptor.c
index 22ddfd71e..ff2732b2c 100644
--- a/control/descriptor.c
+++ b/control/descriptor.c
@@ -222,10 +222,36 @@ int chameleon_desc_init_internal( CHAM_desc_t *desc, const char *name, void *mat
 
     /* If one of the function get_* is NULL, we switch back to the default */
     desc->get_blktile = chameleon_desc_gettile;
-    desc->get_blkaddr = get_blkaddr ? get_blkaddr : chameleon_getaddr_ccrb;
-    desc->get_blkldd  = get_blkldd  ? get_blkldd  : chameleon_getblkldd_ccrb;
-    desc->get_rankof  = chameleon_getrankof_tile;
-    desc->get_rankof_init = get_rankof ? get_rankof : chameleon_getrankof_2d;
+
+    /* Data addresses */
+    if ( get_blkaddr ) {
+        desc->get_blkaddr = get_blkaddr;
+    }
+    else {
+        if ( (intptr_t)mat > 0 ) {
+            desc->get_blkaddr = chameleon_getaddr_cm;
+        }
+        else {
+            desc->get_blkaddr = chameleon_getaddr_ccrb;
+        }
+    }
+
+    /* Data leading dimensions */
+    if ( get_blkldd ) {
+        desc->get_blkldd = get_blkldd;
+    }
+    else {
+        if ( (intptr_t)mat > 0 ) {
+            desc->get_blkldd = chameleon_getblkldd_cm;
+        }
+        else {
+            desc->get_blkldd = chameleon_getblkldd_ccrb;
+        }
+    }
+
+    /* Data distribution */
+    desc->get_rankof          = chameleon_getrankof_tile;
+    desc->get_rankof_init     = get_rankof ? get_rankof : chameleon_getrankof_2d;
     desc->get_rankof_init_arg = get_rankof_arg;
 
     /* Matrix properties */
-- 
GitLab