From e11298007310a260ce14d95c8b48d50793554ec2 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Mon, 22 Jan 2018 19:28:47 +0100
Subject: [PATCH] Add cleanup

---
 compute/zbuild.c        |  4 +++-
 compute/zgeadd.c        |  5 +++--
 compute/zgelqf.c        |  5 +++--
 compute/zgelqf_param.c  |  5 +++--
 compute/zgelqs.c        |  7 ++++---
 compute/zgelqs_param.c  |  7 ++++---
 compute/zgels.c         |  7 ++++---
 compute/zgels_param.c   |  7 ++++---
 compute/zgemm.c         |  7 ++++---
 compute/zgeqrf.c        |  5 +++--
 compute/zgeqrf_param.c  |  5 +++--
 compute/zgeqrs.c        |  7 ++++---
 compute/zgeqrs_param.c  |  7 ++++---
 compute/zgesv_incpiv.c  |  5 +++--
 compute/zgesv_nopiv.c   |  5 +++--
 compute/zgesvd.c        |  7 ++++---
 compute/zgetrf_incpiv.c |  3 ++-
 compute/zgetrf_nopiv.c  |  3 ++-
 compute/zgetrs_incpiv.c |  5 +++--
 compute/zgetrs_nopiv.c  |  5 +++--
 compute/zheevd.c        | 12 +++++++-----
 compute/zhemm.c         |  7 ++++---
 compute/zher2k.c        |  7 ++++---
 compute/zherk.c         |  5 +++--
 compute/zhetrd.c        |  7 ++++---
 compute/zlacpy.c        |  5 +++--
 compute/zlange.c        |  3 ++-
 compute/zlanhe.c        |  3 ++-
 compute/zlansy.c        |  3 ++-
 compute/zlantr.c        |  3 ++-
 compute/zlascal.c       |  2 +-
 compute/zlaset.c        |  3 ++-
 compute/zlauum.c        |  3 ++-
 compute/zplghe.c        |  3 ++-
 compute/zplgsy.c        |  3 ++-
 compute/zplrnt.c        |  3 ++-
 compute/zposv.c         |  5 +++--
 compute/zpotri.c        |  3 ++-
 compute/zpotrimm.c      |  7 ++++---
 compute/zpotrs.c        |  5 +++--
 compute/zsymm.c         |  7 ++++---
 compute/zsyr2k.c        |  7 ++++---
 compute/zsyrk.c         |  5 +++--
 compute/zsysv.c         |  5 +++--
 compute/zsytrf.c        |  3 ++-
 compute/zsytrs.c        |  5 +++--
 compute/ztpgqrt.c       | 11 ++++++-----
 compute/ztpqrt.c        |  5 +++--
 compute/ztradd.c        |  5 +++--
 compute/ztrmm.c         |  5 +++--
 compute/ztrsm.c         |  5 +++--
 compute/ztrsmpl.c       |  5 +++--
 compute/ztrtri.c        |  3 ++-
 compute/zunglq.c        |  7 ++++---
 compute/zunglq_param.c  |  7 ++++---
 compute/zungqr.c        |  7 ++++---
 compute/zungqr_param.c  |  7 ++++---
 compute/zunmlq.c        |  7 ++++---
 compute/zunmlq_param.c  |  7 ++++---
 compute/zunmqr.c        |  7 ++++---
 compute/zunmqr_param.c  |  7 ++++---
 61 files changed, 196 insertions(+), 134 deletions(-)

diff --git a/compute/zbuild.c b/compute/zbuild.c
index 24e03410e..5256ff049 100644
--- a/compute/zbuild.c
+++ b/compute/zbuild.c
@@ -130,12 +130,14 @@ int MORSE_zbuild( MORSE_enum uplo, int M, int N,
     /* Call the tile interface */
     MORSE_zbuild_Tile_Async(uplo, &descA, user_data, user_build_callback, sequence, &request );
 
+    /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
                      MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgeadd.c b/compute/zgeadd.c
index 501e5e42e..0d26a7cdf 100644
--- a/compute/zgeadd.c
+++ b/compute/zgeadd.c
@@ -169,8 +169,9 @@ int MORSE_zgeadd(MORSE_enum trans, int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgelqf.c b/compute/zgelqf.c
index 6047b801e..fc257fd5c 100644
--- a/compute/zgelqf.c
+++ b/compute/zgelqf.c
@@ -135,7 +135,8 @@ int MORSE_zgelqf(int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -292,7 +293,7 @@ int MORSE_zgelqf_Tile_Async(MORSE_desc_t *A, MORSE_desc_t *T,
         morse_pzgelqfrh(A, T, Dptr, MORSE_RHBLK, sequence, request);
     }
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgelqf_param.c b/compute/zgelqf_param.c
index 2c90ef470..0f1632a74 100644
--- a/compute/zgelqf_param.c
+++ b/compute/zgelqf_param.c
@@ -132,7 +132,8 @@ int MORSE_zgelqf_param(const libhqr_tree_t *qrtree, int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -288,7 +289,7 @@ int MORSE_zgelqf_param_Tile_Async(const libhqr_tree_t *qrtree, MORSE_desc_t *A,
 
     morse_pzgelqf_param(qrtree, A, TS, TT, Dptr, sequence, request);
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgelqs.c b/compute/zgelqs.c
index 290a3627a..b57f6557c 100644
--- a/compute/zgelqs.c
+++ b/compute/zgelqs.c
@@ -154,8 +154,9 @@ int MORSE_zgelqs(int M, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -332,7 +333,7 @@ int MORSE_zgelqs_Tile_Async(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B,
     }
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgelqs_param.c b/compute/zgelqs_param.c
index e2efe30d1..d3c83ff56 100644
--- a/compute/zgelqs_param.c
+++ b/compute/zgelqs_param.c
@@ -156,8 +156,9 @@ int MORSE_zgelqs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -335,7 +336,7 @@ int MORSE_zgelqs_param_Tile_Async(const libhqr_tree_t *qrtree, MORSE_desc_t *A,
 
     morse_pzunmlq_param(qrtree, MorseLeft, MorseConjTrans, A, B, TS, TT, Dptr, sequence, request);
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgels.c b/compute/zgels.c
index 885d1e3de..cc8497c1f 100644
--- a/compute/zgels.c
+++ b/compute/zgels.c
@@ -196,8 +196,9 @@ int MORSE_zgels(MORSE_enum trans, int M, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -428,7 +429,7 @@ int MORSE_zgels_Tile_Async(MORSE_enum trans, MORSE_desc_t *A,
     free(subB);
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgels_param.c b/compute/zgels_param.c
index ee5d6640b..4c82539f7 100644
--- a/compute/zgels_param.c
+++ b/compute/zgels_param.c
@@ -197,8 +197,9 @@ int MORSE_zgels_param(const libhqr_tree_t *qrtree, MORSE_enum trans, int M, int
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -416,7 +417,7 @@ int MORSE_zgels_param_Tile_Async(const libhqr_tree_t *qrtree, MORSE_enum trans,
     free(subB);
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgemm.c b/compute/zgemm.c
index 1ab3eda0d..24b167fa7 100644
--- a/compute/zgemm.c
+++ b/compute/zgemm.c
@@ -228,9 +228,10 @@ int MORSE_zgemm(MORSE_enum transA, MORSE_enum transB, int M, int N, int K,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgeqrf.c b/compute/zgeqrf.c
index cf9623380..bf6d36248 100644
--- a/compute/zgeqrf.c
+++ b/compute/zgeqrf.c
@@ -134,7 +134,8 @@ int MORSE_zgeqrf(int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -291,7 +292,7 @@ int MORSE_zgeqrf_Tile_Async(MORSE_desc_t *A, MORSE_desc_t *T,
         morse_pzgeqrfrh(A, T, Dptr, MORSE_RHBLK, sequence, request);
     }
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgeqrf_param.c b/compute/zgeqrf_param.c
index 238411322..a8dedd643 100644
--- a/compute/zgeqrf_param.c
+++ b/compute/zgeqrf_param.c
@@ -137,7 +137,8 @@ int MORSE_zgeqrf_param(const libhqr_tree_t *qrtree, int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -298,7 +299,7 @@ int MORSE_zgeqrf_param_Tile_Async(const libhqr_tree_t *qrtree, MORSE_desc_t *A,
     morse_pzgeqrf_param(qrtree, A, TS, TT, Dptr, sequence, request);
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgeqrs.c b/compute/zgeqrs.c
index 445daf03f..8bfd7a572 100644
--- a/compute/zgeqrs.c
+++ b/compute/zgeqrs.c
@@ -154,8 +154,9 @@ int MORSE_zgeqrs(int M, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -328,7 +329,7 @@ int MORSE_zgeqrs_Tile_Async(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B,
     free(subB);
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgeqrs_param.c b/compute/zgeqrs_param.c
index 467955410..7c83d4979 100644
--- a/compute/zgeqrs_param.c
+++ b/compute/zgeqrs_param.c
@@ -149,8 +149,9 @@ int MORSE_zgeqrs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -325,7 +326,7 @@ int MORSE_zgeqrs_param_Tile_Async(const libhqr_tree_t *qrtree,
     free(subB);
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgesv_incpiv.c b/compute/zgesv_incpiv.c
index e43014e2f..d8486636e 100644
--- a/compute/zgesv_incpiv.c
+++ b/compute/zgesv_incpiv.c
@@ -153,8 +153,9 @@ int MORSE_zgesv_incpiv(int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgesv_nopiv.c b/compute/zgesv_nopiv.c
index 1693481d3..3efc96c49 100644
--- a/compute/zgesv_nopiv.c
+++ b/compute/zgesv_nopiv.c
@@ -152,8 +152,9 @@ int MORSE_zgesv_nopiv(int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgesvd.c b/compute/zgesvd.c
index b55aa9d82..52c24290f 100644
--- a/compute/zgesvd.c
+++ b/compute/zgesvd.c
@@ -227,7 +227,8 @@ int MORSE_zgesvd(MORSE_enum jobu, MORSE_enum jobvt,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -547,7 +548,7 @@ int MORSE_zgesvd_Tile_Async(MORSE_enum jobu, MORSE_enum jobvt,
         fprintf(stderr, "MORSE_zgesvd_Tile_Async: LAPACKE_zgbbrd = %d\n", info );
     }
 #endif /* !defined(CHAMELEON_SIMULATION) */
-    morse_desc_mat_free(&descAB);
+    morse_ztile2lap_cleanup( morse, &descABl, &descABt );
 
     /* Transform U and Vt into tile format */
     if ( jobu != MorseNoVec ) {
@@ -626,7 +627,7 @@ int MORSE_zgesvd_Tile_Async(MORSE_enum jobu, MORSE_enum jobvt,
         morse_desc_mat_free( &descVT );
     free(E);
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zgetrf_incpiv.c b/compute/zgetrf_incpiv.c
index bfad3adf2..94bf78ac3 100644
--- a/compute/zgetrf_incpiv.c
+++ b/compute/zgetrf_incpiv.c
@@ -136,7 +136,8 @@ int MORSE_zgetrf_incpiv(int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgetrf_nopiv.c b/compute/zgetrf_nopiv.c
index 344f1d26a..42ac616b1 100644
--- a/compute/zgetrf_nopiv.c
+++ b/compute/zgetrf_nopiv.c
@@ -129,7 +129,8 @@ int MORSE_zgetrf_nopiv(int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgetrs_incpiv.c b/compute/zgetrs_incpiv.c
index 536a51113..eaf8cdb88 100644
--- a/compute/zgetrs_incpiv.c
+++ b/compute/zgetrs_incpiv.c
@@ -157,8 +157,9 @@ int MORSE_zgetrs_incpiv(MORSE_enum trans, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zgetrs_nopiv.c b/compute/zgetrs_nopiv.c
index f3fdfc502..4be0522d7 100644
--- a/compute/zgetrs_nopiv.c
+++ b/compute/zgetrs_nopiv.c
@@ -151,8 +151,9 @@ int MORSE_zgetrs_nopiv(MORSE_enum trans, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zheevd.c b/compute/zheevd.c
index 67d343211..a7211f559 100644
--- a/compute/zheevd.c
+++ b/compute/zheevd.c
@@ -165,7 +165,8 @@ int MORSE_zheevd(MORSE_enum jobz, MORSE_enum uplo, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -465,7 +466,7 @@ int MORSE_zheevd_Tile_Async(MORSE_enum jobz, MORSE_enum uplo,
     /* V   from LAPACKE_zstedc refers to V  (lapack layout) */
     /* The final eigenvectors are (Q1 Q2 V) or (Q1^h Q2 V)  */
     morse_zooplap2tile( descQ2, Q2, NB, NB, N, N, 0, 0, N, N, sequence, request,
-                        morse_desc_mat_free(&(descQ2)) );
+    morse_ztile2lap_cleanup( morse, &(descQ2)) l, &(descQ2)) t );
     morse_zooplap2tile( descV,  V,  NB, NB, N, N, 0, 0, N, N, sequence, request,
                         morse_desc_mat_free(&(descQ2)); morse_desc_mat_free(&(descV)) );
     if (uplo == MorseLower)
@@ -520,15 +521,16 @@ int MORSE_zheevd_Tile_Async(MORSE_enum jobz, MORSE_enum uplo,
     morse_sequence_wait(morse, sequence);
 
     free(subA); free(subQ); free(subT);
-    morse_desc_mat_free(&descQ2);
+    morse_ztile2lap_cleanup( morse, &descQ2l, &descQ2t );
     free(Q2);
 
-    morse_desc_mat_free(&descV);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descVl, &descVt );
     free(V);
 
     free(E);
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zhemm.c b/compute/zhemm.c
index ab49a42e2..cfa808021 100644
--- a/compute/zhemm.c
+++ b/compute/zhemm.c
@@ -191,9 +191,10 @@ int MORSE_zhemm(MORSE_enum side, MORSE_enum uplo, int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zher2k.c b/compute/zher2k.c
index 03c76ebf9..067764bd8 100644
--- a/compute/zher2k.c
+++ b/compute/zher2k.c
@@ -195,9 +195,10 @@ int MORSE_zher2k(MORSE_enum uplo, MORSE_enum trans, int N, int K,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zherk.c b/compute/zherk.c
index 05901be70..947f8893f 100644
--- a/compute/zherk.c
+++ b/compute/zherk.c
@@ -179,8 +179,9 @@ int MORSE_zherk(MORSE_enum uplo, MORSE_enum trans, int N, int K,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zhetrd.c b/compute/zhetrd.c
index b63b5d1a7..aa7152dc0 100644
--- a/compute/zhetrd.c
+++ b/compute/zhetrd.c
@@ -179,7 +179,8 @@ int MORSE_zhetrd(MORSE_enum jobz, MORSE_enum uplo, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -429,9 +430,9 @@ int MORSE_zhetrd_Tile_Async(MORSE_enum jobz,
     }
 #endif /* !defined(CHAMELEON_SIMULATION) */
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
-    morse_desc_mat_free(&descAB);
+    morse_ztile2lap_cleanup( morse, &descABl, &descABt );
     (void)D;
     return MORSE_SUCCESS;
 }
diff --git a/compute/zlacpy.c b/compute/zlacpy.c
index 885ae54d5..d5aab8ec1 100644
--- a/compute/zlacpy.c
+++ b/compute/zlacpy.c
@@ -145,8 +145,9 @@ int MORSE_zlacpy(MORSE_enum uplo, int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     morse_sequence_destroy(morse, sequence);
     return MORSE_SUCCESS;
diff --git a/compute/zlange.c b/compute/zlange.c
index f1ea38a96..403acb5ef 100644
--- a/compute/zlange.c
+++ b/compute/zlange.c
@@ -148,7 +148,8 @@ double MORSE_zlange(MORSE_enum norm, int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     morse_sequence_destroy(morse, sequence);
     return value;
diff --git a/compute/zlanhe.c b/compute/zlanhe.c
index ce7e4fa19..501df0f39 100644
--- a/compute/zlanhe.c
+++ b/compute/zlanhe.c
@@ -148,7 +148,8 @@ double MORSE_zlanhe(MORSE_enum norm, MORSE_enum uplo, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     morse_sequence_destroy(morse, sequence);
     return value;
diff --git a/compute/zlansy.c b/compute/zlansy.c
index 8912e0f61..0383a7be9 100644
--- a/compute/zlansy.c
+++ b/compute/zlansy.c
@@ -145,7 +145,8 @@ double MORSE_zlansy(MORSE_enum norm, MORSE_enum uplo, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     morse_sequence_destroy(morse, sequence);
     return value;
diff --git a/compute/zlantr.c b/compute/zlantr.c
index 61dcb8be9..8c06e1967 100644
--- a/compute/zlantr.c
+++ b/compute/zlantr.c
@@ -165,7 +165,8 @@ double MORSE_zlantr(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     morse_sequence_destroy(morse, sequence);
     return value;
diff --git a/compute/zlascal.c b/compute/zlascal.c
index 2b1979406..5a8f03525 100644
--- a/compute/zlascal.c
+++ b/compute/zlascal.c
@@ -125,7 +125,7 @@ int MORSE_zlascal(MORSE_enum uplo, int M, int N,
     morse_ztile2lap( morse, &descAl, &descAt,
                      MorseUpperLower, sequence, &request );
     RUNTIME_sequence_wait(morse, sequence);
-    morse_desc_mat_free(&descA);
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zlaset.c b/compute/zlaset.c
index f0b8269fb..f8e42f788 100644
--- a/compute/zlaset.c
+++ b/compute/zlaset.c
@@ -138,7 +138,8 @@ int MORSE_zlaset(MORSE_enum uplo, int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     morse_sequence_destroy(morse, sequence);
     return MORSE_SUCCESS;
diff --git a/compute/zlauum.c b/compute/zlauum.c
index a07910ca1..59578adee 100644
--- a/compute/zlauum.c
+++ b/compute/zlauum.c
@@ -134,7 +134,8 @@ int MORSE_zlauum(MORSE_enum uplo, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zplghe.c b/compute/zplghe.c
index 7ba0cef44..5e63663d2 100644
--- a/compute/zplghe.c
+++ b/compute/zplghe.c
@@ -125,7 +125,8 @@ int MORSE_zplghe( double bump, MORSE_enum uplo, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zplgsy.c b/compute/zplgsy.c
index 7b4f36a67..265ad6d9a 100644
--- a/compute/zplgsy.c
+++ b/compute/zplgsy.c
@@ -125,7 +125,8 @@ int MORSE_zplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zplrnt.c b/compute/zplrnt.c
index 0040cd9e5..fb0f450cd 100644
--- a/compute/zplrnt.c
+++ b/compute/zplrnt.c
@@ -122,7 +122,8 @@ int MORSE_zplrnt( int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zposv.c b/compute/zposv.c
index 418f623d0..7081a5771 100644
--- a/compute/zposv.c
+++ b/compute/zposv.c
@@ -166,8 +166,9 @@ int MORSE_zposv(MORSE_enum uplo, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zpotri.c b/compute/zpotri.c
index f88cb5148..49cd7aa35 100644
--- a/compute/zpotri.c
+++ b/compute/zpotri.c
@@ -131,7 +131,8 @@ int MORSE_zpotri(MORSE_enum uplo, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zpotrimm.c b/compute/zpotrimm.c
index f45957e61..d41805488 100644
--- a/compute/zpotrimm.c
+++ b/compute/zpotrimm.c
@@ -149,9 +149,10 @@ int MORSE_zpotrimm(MORSE_enum uplo, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zpotrs.c b/compute/zpotrs.c
index 242a53cbe..611b30ee9 100644
--- a/compute/zpotrs.c
+++ b/compute/zpotrs.c
@@ -148,8 +148,9 @@ int MORSE_zpotrs(MORSE_enum uplo, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zsymm.c b/compute/zsymm.c
index a18c58872..94d7584a4 100644
--- a/compute/zsymm.c
+++ b/compute/zsymm.c
@@ -191,9 +191,10 @@ int MORSE_zsymm(MORSE_enum side, MORSE_enum uplo, int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zsyr2k.c b/compute/zsyr2k.c
index 388d8d8fa..bf4149197 100644
--- a/compute/zsyr2k.c
+++ b/compute/zsyr2k.c
@@ -195,9 +195,10 @@ int MORSE_zsyr2k(MORSE_enum uplo, MORSE_enum trans, int N, int K,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zsyrk.c b/compute/zsyrk.c
index 215010573..806bf0c47 100644
--- a/compute/zsyrk.c
+++ b/compute/zsyrk.c
@@ -179,8 +179,9 @@ int MORSE_zsyrk(MORSE_enum uplo, MORSE_enum trans, int N, int K,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zsysv.c b/compute/zsysv.c
index 83dcd0c39..426a0248b 100644
--- a/compute/zsysv.c
+++ b/compute/zsysv.c
@@ -163,8 +163,9 @@ int MORSE_zsysv(MORSE_enum uplo, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zsytrf.c b/compute/zsytrf.c
index 75742227a..c478d3ace 100644
--- a/compute/zsytrf.c
+++ b/compute/zsytrf.c
@@ -135,7 +135,8 @@ int MORSE_zsytrf(MORSE_enum uplo, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zsytrs.c b/compute/zsytrs.c
index cb5587397..ffc58be2c 100644
--- a/compute/zsytrs.c
+++ b/compute/zsytrs.c
@@ -147,8 +147,9 @@ int MORSE_zsytrs(MORSE_enum uplo, int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/ztpgqrt.c b/compute/ztpgqrt.c
index 9c3acdf8a..432ee7072 100644
--- a/compute/ztpgqrt.c
+++ b/compute/ztpgqrt.c
@@ -228,10 +228,11 @@ int MORSE_ztpgqrt( int M, int N, int K, int L,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descV1);
-    morse_desc_mat_free(&descV2);
-    morse_desc_mat_free(&descQ1);
-    morse_desc_mat_free(&descQ2);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descV1l, &descV1t );
+    morse_ztile2lap_cleanup( morse, &descV2l, &descV2t );
+    morse_ztile2lap_cleanup( morse, &descQ1l, &descQ1t );
+    morse_ztile2lap_cleanup( morse, &descQ2l, &descQ2t );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -406,7 +407,7 @@ int MORSE_ztpgqrt_Tile_Async( int L,
     /*    morse_pztpgqrtrh(Q1, T, MORSE_RHBLK, sequence, request); */
     /* } */
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/ztpqrt.c b/compute/ztpqrt.c
index b87bf269e..07db10241 100644
--- a/compute/ztpqrt.c
+++ b/compute/ztpqrt.c
@@ -202,8 +202,9 @@ int MORSE_ztpqrt( int M, int N, int L,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/ztradd.c b/compute/ztradd.c
index 938ee9f06..60d76860e 100644
--- a/compute/ztradd.c
+++ b/compute/ztradd.c
@@ -179,8 +179,9 @@ int MORSE_ztradd(MORSE_enum uplo, MORSE_enum trans, int M, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/ztrmm.c b/compute/ztrmm.c
index 70718e1ae..5adaee188 100644
--- a/compute/ztrmm.c
+++ b/compute/ztrmm.c
@@ -193,8 +193,9 @@ int MORSE_ztrmm(MORSE_enum side, MORSE_enum uplo,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/ztrsm.c b/compute/ztrsm.c
index 652d6eb45..f65bb94de 100644
--- a/compute/ztrsm.c
+++ b/compute/ztrsm.c
@@ -191,8 +191,9 @@ int MORSE_ztrsm(MORSE_enum side, MORSE_enum uplo,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/ztrsmpl.c b/compute/ztrsmpl.c
index 0f8bbf2b6..fcc86aaff 100644
--- a/compute/ztrsmpl.c
+++ b/compute/ztrsmpl.c
@@ -145,8 +145,9 @@ int MORSE_ztrsmpl(int N, int NRHS,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descB);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descBl, &descBt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/ztrtri.c b/compute/ztrtri.c
index dd5cf3306..7eb605b37 100644
--- a/compute/ztrtri.c
+++ b/compute/ztrtri.c
@@ -143,7 +143,8 @@ int MORSE_ztrtri(MORSE_enum uplo, MORSE_enum diag, int N,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
diff --git a/compute/zunglq.c b/compute/zunglq.c
index 854d88894..c41d7f710 100644
--- a/compute/zunglq.c
+++ b/compute/zunglq.c
@@ -151,8 +151,9 @@ int MORSE_zunglq(int M, int N, int K,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descQ);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descQl, &descQt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -313,7 +314,7 @@ int MORSE_zunglq_Tile_Async(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *Q,
     }
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zunglq_param.c b/compute/zunglq_param.c
index 5fd114954..5ff156c71 100644
--- a/compute/zunglq_param.c
+++ b/compute/zunglq_param.c
@@ -148,8 +148,9 @@ int MORSE_zunglq_param(const libhqr_tree_t *qrtree, int M, int N, int K,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descQ);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descQl, &descQt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -308,7 +309,7 @@ int MORSE_zunglq_param_Tile_Async(const libhqr_tree_t *qrtree, MORSE_desc_t *A,
     morse_pzunglq_param(qrtree, A, Q, TS, TT, Dptr, sequence, request);
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zungqr.c b/compute/zungqr.c
index e482c3ac9..e830d4c91 100644
--- a/compute/zungqr.c
+++ b/compute/zungqr.c
@@ -150,8 +150,9 @@ int MORSE_zungqr(int M, int N, int K,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descQ);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descQl, &descQt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -310,7 +311,7 @@ int MORSE_zungqr_Tile_Async(MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *Q,
     }
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zungqr_param.c b/compute/zungqr_param.c
index c209d8b4f..cdd5370f8 100644
--- a/compute/zungqr_param.c
+++ b/compute/zungqr_param.c
@@ -149,8 +149,9 @@ int MORSE_zungqr_param(const libhqr_tree_t *qrtree,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descQ);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descQl, &descQt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -306,7 +307,7 @@ int MORSE_zungqr_param_Tile_Async(const libhqr_tree_t *qrtree, MORSE_desc_t *A,
     morse_pzungqr_param(qrtree, A, Q, TS, TT, Dptr, sequence, request);
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zunmlq.c b/compute/zunmlq.c
index 385e898f7..8a4b9ac2d 100644
--- a/compute/zunmlq.c
+++ b/compute/zunmlq.c
@@ -189,8 +189,9 @@ int MORSE_zunmlq(MORSE_enum side, MORSE_enum trans, int M, int N, int K,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -375,7 +376,7 @@ int MORSE_zunmlq_Tile_Async(MORSE_enum side, MORSE_enum trans,
         morse_pzunmlqrh(side, trans, A, C, T, Dptr, MORSE_RHBLK, sequence, request);
     }
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zunmlq_param.c b/compute/zunmlq_param.c
index fd065cdc1..21b7f90ac 100644
--- a/compute/zunmlq_param.c
+++ b/compute/zunmlq_param.c
@@ -188,8 +188,9 @@ int MORSE_zunmlq_param(const libhqr_tree_t *qrtree, MORSE_enum side, MORSE_enum
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -370,7 +371,7 @@ int MORSE_zunmlq_param_Tile_Async(const libhqr_tree_t *qrtree, MORSE_enum side,
     morse_pzunmlq_param(qrtree, side, trans, A, C, TS, TT, Dptr, sequence, request);
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zunmqr.c b/compute/zunmqr.c
index 711543b02..9494b69bc 100644
--- a/compute/zunmqr.c
+++ b/compute/zunmqr.c
@@ -192,8 +192,9 @@ int MORSE_zunmqr(MORSE_enum side, MORSE_enum trans, int M, int N, int K,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -382,7 +383,7 @@ int MORSE_zunmqr_Tile_Async(MORSE_enum side, MORSE_enum trans,
     }
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
diff --git a/compute/zunmqr_param.c b/compute/zunmqr_param.c
index 3ab4e9606..a18d36265 100644
--- a/compute/zunmqr_param.c
+++ b/compute/zunmqr_param.c
@@ -193,8 +193,9 @@ int MORSE_zunmqr_param(const libhqr_tree_t *qrtree,
 
     morse_sequence_wait(morse, sequence);
 
-    morse_desc_mat_free(&descA);
-    morse_desc_mat_free(&descC);
+    /* Cleanup the temporary data */
+    morse_ztile2lap_cleanup( morse, &descAl, &descAt );
+    morse_ztile2lap_cleanup( morse, &descCl, &descCt );
 
     status = sequence->status;
     morse_sequence_destroy(morse, sequence);
@@ -377,7 +378,7 @@ int MORSE_zunmqr_param_Tile_Async(const libhqr_tree_t *qrtree,
     morse_pzunmqr_param(qrtree, side, trans, A, C, TS, TT, Dptr, sequence, request);
 
     if (Dptr != NULL) {
-        morse_desc_mat_free(Dptr);
+    morse_ztile2lap_cleanup( morse, &Dptrl, &Dptrt );
     }
     (void)D;
     return MORSE_SUCCESS;
-- 
GitLab