From 9f07583ef955b74a272c703eb8375f71771969cc Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Tue, 23 Jan 2018 00:11:07 +0100
Subject: [PATCH] Add in,out,inout mode to descriptor to avoid useless layout
 conversions

---
 compute/zbuild.c                    |  4 ++--
 compute/zgeadd.c                    |  8 ++++---
 compute/zgelqf.c                    |  4 ++--
 compute/zgelqf_param.c              |  4 ++--
 compute/zgelqs.c                    |  8 +++----
 compute/zgelqs_param.c              |  8 +++----
 compute/zgels.c                     | 12 +++++-----
 compute/zgels_param.c               | 12 +++++-----
 compute/zgemm.c                     | 12 ++++++----
 compute/zgeqrf.c                    |  4 ++--
 compute/zgeqrf_param.c              |  4 ++--
 compute/zgeqrs.c                    |  8 +++----
 compute/zgeqrs_param.c              |  8 +++----
 compute/zgesv_incpiv.c              |  8 +++----
 compute/zgesv_nopiv.c               |  8 +++----
 compute/zgesvd.c                    |  4 ++--
 compute/zgetrf_incpiv.c             |  4 ++--
 compute/zgetrf_nopiv.c              |  4 ++--
 compute/zgetrs_incpiv.c             |  8 ++++---
 compute/zgetrs_nopiv.c              |  8 ++++---
 compute/zheevd.c                    |  4 ++--
 compute/zhemm.c                     | 12 ++++++----
 compute/zher2k.c                    | 12 ++++++----
 compute/zherk.c                     |  8 ++++---
 compute/zhetrd.c                    |  4 ++--
 compute/zlacpy.c                    |  8 ++++---
 compute/zlange.c                    |  4 ++--
 compute/zlanhe.c                    |  4 ++--
 compute/zlansy.c                    |  6 +++--
 compute/zlantr.c                    |  6 +++--
 compute/zlascal.c                   |  9 +++++---
 compute/zlaset.c                    |  6 +++--
 compute/zlauum.c                    |  4 ++--
 compute/zplghe.c                    |  4 ++--
 compute/zplgsy.c                    |  4 ++--
 compute/zplrnt.c                    |  4 ++--
 compute/zposv.c                     |  8 +++----
 compute/zpotrf.c                    |  4 ++--
 compute/zpotri.c                    |  4 ++--
 compute/zpotrimm.c                  | 12 +++++-----
 compute/zpotrs.c                    |  8 ++++---
 compute/zsymm.c                     | 12 ++++++----
 compute/zsyr2k.c                    | 12 ++++++----
 compute/zsyrk.c                     |  8 ++++---
 compute/zsysv.c                     |  8 +++----
 compute/zsytrf.c                    |  4 ++--
 compute/zsytrs.c                    |  8 ++++---
 compute/ztile.c                     |  4 ++--
 compute/ztpgqrt.c                   | 16 +++++++++-----
 compute/ztpqrt.c                    |  8 +++----
 compute/ztradd.c                    |  8 ++++---
 compute/ztrmm.c                     | 10 +++++----
 compute/ztrsm.c                     |  8 ++++---
 compute/ztrsmpl.c                   |  8 ++++---
 compute/ztrtri.c                    |  6 ++---
 compute/zunglq.c                    |  8 ++++---
 compute/zunglq_param.c              |  8 ++++---
 compute/zungqr.c                    |  8 ++++---
 compute/zungqr_param.c              |  8 ++++---
 compute/zunmlq.c                    |  8 ++++---
 compute/zunmlq_param.c              |  8 ++++---
 compute/zunmqr.c                    |  8 ++++---
 compute/zunmqr_param.c              |  8 ++++---
 control/common.h                    |  1 -
 control/compute_z.h                 | 34 +++++++++++++++++++++--------
 include/chameleon/morse_constants.h |  5 -----
 66 files changed, 291 insertions(+), 208 deletions(-)

diff --git a/compute/zbuild.c b/compute/zbuild.c
index 140ad65fe..7f86afbf8 100644
--- a/compute/zbuild.c
+++ b/compute/zbuild.c
@@ -127,7 +127,7 @@ int MORSE_zbuild( MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescOutput, uplo,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -135,7 +135,7 @@ int MORSE_zbuild( MORSE_enum uplo, int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescOutput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgeadd.c b/compute/zgeadd.c
index 14306b560..aebbe1983 100644
--- a/compute/zgeadd.c
+++ b/compute/zgeadd.c
@@ -155,17 +155,19 @@ int MORSE_zgeadd(MORSE_enum trans, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zgeadd_Tile_Async( trans, alpha, &descAt, beta, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgelqf.c b/compute/zgelqf.c
index a59c2c185..a5471e2e7 100644
--- a/compute/zgelqf.c
+++ b/compute/zgelqf.c
@@ -123,7 +123,7 @@ int MORSE_zgelqf(int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -131,7 +131,7 @@ int MORSE_zgelqf(int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgelqf_param.c b/compute/zgelqf_param.c
index af72e1618..1a938c6d2 100644
--- a/compute/zgelqf_param.c
+++ b/compute/zgelqf_param.c
@@ -120,7 +120,7 @@ int MORSE_zgelqf_param(const libhqr_tree_t *qrtree, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -128,7 +128,7 @@ int MORSE_zgelqf_param(const libhqr_tree_t *qrtree, int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgelqs.c b/compute/zgelqs.c
index 2e67806bc..7c2b19f23 100644
--- a/compute/zgelqs.c
+++ b/compute/zgelqs.c
@@ -139,9 +139,9 @@ int MORSE_zgelqs(int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -149,9 +149,9 @@ int MORSE_zgelqs(int M, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgelqs_param.c b/compute/zgelqs_param.c
index 155e2ef2f..c0c7ccc55 100644
--- a/compute/zgelqs_param.c
+++ b/compute/zgelqs_param.c
@@ -141,9 +141,9 @@ int MORSE_zgelqs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -151,9 +151,9 @@ int MORSE_zgelqs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgels.c b/compute/zgels.c
index 3cd046157..2f26b7901 100644
--- a/compute/zgels.c
+++ b/compute/zgels.c
@@ -174,15 +174,15 @@ int MORSE_zgels(MORSE_enum trans, int M, int N, int NRHS,
 
     /* Submit the matrix conversion */
     if ( M >= N ) {
-        morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+        morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                          A, NB, NB, LDA, N, M, N, sequence, &request );
-        morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+        morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                          B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
     } else {
         /* Submit the matrix conversion */
-        morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+        morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                          A, NB, NB, LDA, N, M, N, sequence, &request );
-        morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+        morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                          B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
     }
 
@@ -191,9 +191,9 @@ int MORSE_zgels(MORSE_enum trans, int M, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgels_param.c b/compute/zgels_param.c
index 2b61beb07..67239b6bb 100644
--- a/compute/zgels_param.c
+++ b/compute/zgels_param.c
@@ -176,14 +176,14 @@ int MORSE_zgels_param(const libhqr_tree_t *qrtree, MORSE_enum trans, int M, int
 
     /* Submit the matrix conversion */
     if ( M >= N ) {
-        morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+        morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                          A, NB, NB, LDA, N, M, N, sequence, &request );
-        morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+        morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                          B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
     } else {
-        morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+        morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                          A, NB, NB, LDA, N, M, N, sequence, &request );
-        morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+        morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                          B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
     }
 
@@ -192,9 +192,9 @@ int MORSE_zgels_param(const libhqr_tree_t *qrtree, MORSE_enum trans, int M, int
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgemm.c b/compute/zgemm.c
index 3251abede..fc7a79152 100644
--- a/compute/zgemm.c
+++ b/compute/zgemm.c
@@ -213,19 +213,23 @@ int MORSE_zgemm(MORSE_enum transA, MORSE_enum transB, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, Bn, Bm, Bn, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zgemm_Tile_Async( transA, transB, alpha, &descAt, &descBt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
+    morse_ztile2lap( morse, &descBl, &descBt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgeqrf.c b/compute/zgeqrf.c
index 32bc10482..8c9a96a38 100644
--- a/compute/zgeqrf.c
+++ b/compute/zgeqrf.c
@@ -122,7 +122,7 @@ int MORSE_zgeqrf(int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -130,7 +130,7 @@ int MORSE_zgeqrf(int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgeqrf_param.c b/compute/zgeqrf_param.c
index 6d3dd8bb4..839cedd4b 100644
--- a/compute/zgeqrf_param.c
+++ b/compute/zgeqrf_param.c
@@ -125,7 +125,7 @@ int MORSE_zgeqrf_param(const libhqr_tree_t *qrtree, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -133,7 +133,7 @@ int MORSE_zgeqrf_param(const libhqr_tree_t *qrtree, int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgeqrs.c b/compute/zgeqrs.c
index e5fa1d14d..713e8abb2 100644
--- a/compute/zgeqrs.c
+++ b/compute/zgeqrs.c
@@ -139,9 +139,9 @@ int MORSE_zgeqrs(int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -149,9 +149,9 @@ int MORSE_zgeqrs(int M, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgeqrs_param.c b/compute/zgeqrs_param.c
index 9d702f0b0..3f4e89f0e 100644
--- a/compute/zgeqrs_param.c
+++ b/compute/zgeqrs_param.c
@@ -134,9 +134,9 @@ int MORSE_zgeqrs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, M, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -144,9 +144,9 @@ int MORSE_zgeqrs_param(const libhqr_tree_t *qrtree, int M, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgesv_incpiv.c b/compute/zgesv_incpiv.c
index d20e9c526..53278b297 100644
--- a/compute/zgesv_incpiv.c
+++ b/compute/zgesv_incpiv.c
@@ -138,9 +138,9 @@ int MORSE_zgesv_incpiv(int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -148,9 +148,9 @@ int MORSE_zgesv_incpiv(int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgesv_nopiv.c b/compute/zgesv_nopiv.c
index 6e9f42169..442df3b6e 100644
--- a/compute/zgesv_nopiv.c
+++ b/compute/zgesv_nopiv.c
@@ -137,9 +137,9 @@ int MORSE_zgesv_nopiv(int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -147,9 +147,9 @@ int MORSE_zgesv_nopiv(int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgesvd.c b/compute/zgesvd.c
index b05aa6f4c..d84f67c96 100644
--- a/compute/zgesvd.c
+++ b/compute/zgesvd.c
@@ -215,7 +215,7 @@ int MORSE_zgesvd(MORSE_enum jobu, MORSE_enum jobvt,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB,  LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -223,7 +223,7 @@ int MORSE_zgesvd(MORSE_enum jobu, MORSE_enum jobvt,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgetrf_incpiv.c b/compute/zgetrf_incpiv.c
index 65ef98d87..9628e1e13 100644
--- a/compute/zgetrf_incpiv.c
+++ b/compute/zgetrf_incpiv.c
@@ -124,7 +124,7 @@ int MORSE_zgetrf_incpiv(int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -132,7 +132,7 @@ int MORSE_zgetrf_incpiv(int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgetrf_nopiv.c b/compute/zgetrf_nopiv.c
index c4ea0f88f..919699244 100644
--- a/compute/zgetrf_nopiv.c
+++ b/compute/zgetrf_nopiv.c
@@ -117,7 +117,7 @@ int MORSE_zgetrf_nopiv(int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpperLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -125,7 +125,7 @@ int MORSE_zgetrf_nopiv(int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgetrs_incpiv.c b/compute/zgetrs_incpiv.c
index 418b598a1..b011994af 100644
--- a/compute/zgetrs_incpiv.c
+++ b/compute/zgetrs_incpiv.c
@@ -144,17 +144,19 @@ int MORSE_zgetrs_incpiv(MORSE_enum trans, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zgetrs_incpiv_Tile_Async( &descAt, descL, IPIV, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zgetrs_nopiv.c b/compute/zgetrs_nopiv.c
index fc2a4f12b..8eff02ea1 100644
--- a/compute/zgetrs_nopiv.c
+++ b/compute/zgetrs_nopiv.c
@@ -138,17 +138,19 @@ int MORSE_zgetrs_nopiv(MORSE_enum trans, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zgetrs_nopiv_Tile_Async( &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zheevd.c b/compute/zheevd.c
index 3bc25f3f3..1c763d06c 100644
--- a/compute/zheevd.c
+++ b/compute/zheevd.c
@@ -153,7 +153,7 @@ int MORSE_zheevd(MORSE_enum jobz, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -161,7 +161,7 @@ int MORSE_zheevd(MORSE_enum jobz, MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zhemm.c b/compute/zhemm.c
index 57098b820..d004a263f 100644
--- a/compute/zhemm.c
+++ b/compute/zhemm.c
@@ -176,19 +176,23 @@ int MORSE_zhemm(MORSE_enum side, MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, Am, Am, Am, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, N, M,  N, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zhemm_Tile_Async(  side, uplo, alpha, &descAt, &descBt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
+    morse_ztile2lap( morse, &descBl, &descBt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zher2k.c b/compute/zher2k.c
index 9f88e2053..6e573292f 100644
--- a/compute/zher2k.c
+++ b/compute/zher2k.c
@@ -181,19 +181,23 @@ int MORSE_zher2k(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, uplo,
                      C, NB, NB, LDC, N, N,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zher2k_Tile_Async( uplo, trans, alpha, &descAt, &descBt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
+    morse_ztile2lap( morse, &descBl, &descBt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zherk.c b/compute/zherk.c
index cda0eda2b..035adf207 100644
--- a/compute/zherk.c
+++ b/compute/zherk.c
@@ -166,17 +166,19 @@ int MORSE_zherk(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, uplo,
                      C, NB, NB, LDC, N, N,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zherk_Tile_Async( uplo, trans, alpha, &descAt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zhetrd.c b/compute/zhetrd.c
index d29be08b2..c2f530514 100644
--- a/compute/zhetrd.c
+++ b/compute/zhetrd.c
@@ -167,7 +167,7 @@ int MORSE_zhetrd(MORSE_enum jobz, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -175,7 +175,7 @@ int MORSE_zhetrd(MORSE_enum jobz, MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlacpy.c b/compute/zlacpy.c
index 75885a393..e06df2437 100644
--- a/compute/zlacpy.c
+++ b/compute/zlacpy.c
@@ -132,17 +132,19 @@ int MORSE_zlacpy(MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, uplo,
                      B, NB, NB, LDB, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zlacpy_Tile_Async( uplo, &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlange.c b/compute/zlange.c
index 362faddd8..b0e9aacbc 100644
--- a/compute/zlange.c
+++ b/compute/zlange.c
@@ -135,7 +135,7 @@ double MORSE_zlange(MORSE_enum norm, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -143,7 +143,7 @@ double MORSE_zlange(MORSE_enum norm, int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlanhe.c b/compute/zlanhe.c
index cad3fcdac..c2a5a38f6 100644
--- a/compute/zlanhe.c
+++ b/compute/zlanhe.c
@@ -135,7 +135,7 @@ double MORSE_zlanhe(MORSE_enum norm, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -143,7 +143,7 @@ double MORSE_zlanhe(MORSE_enum norm, MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlansy.c b/compute/zlansy.c
index 16c8fd40d..f1100d215 100644
--- a/compute/zlansy.c
+++ b/compute/zlansy.c
@@ -135,13 +135,15 @@ double MORSE_zlansy(MORSE_enum norm, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zlansy_Tile_Async( norm, uplo, &descAt, &value, sequence, &request );
 
-    /* Submit the matrix conversion */
+    /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlantr.c b/compute/zlantr.c
index 51b0539a3..aebf0fdb9 100644
--- a/compute/zlantr.c
+++ b/compute/zlantr.c
@@ -155,13 +155,15 @@ double MORSE_zlantr(MORSE_enum norm, MORSE_enum uplo, MORSE_enum diag,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zlantr_Tile_Async( norm, uplo, diag, &descAt, &value, sequence, &request );
 
-    /* Submit the matrix conversion */
+    /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlascal.c b/compute/zlascal.c
index 4fe78a6db..840530e4c 100644
--- a/compute/zlascal.c
+++ b/compute/zlascal.c
@@ -114,7 +114,7 @@ int MORSE_zlascal(MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -122,8 +122,11 @@ int MORSE_zlascal(MORSE_enum uplo, int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
-    RUNTIME_sequence_wait(morse, sequence);
+                     MorseDescInout, uplo, sequence, &request );
+
+    morse_sequence_wait(morse, sequence);
+
+    /* Cleanup the temporary data */
     morse_ztile2lap_cleanup( morse, &descAl, &descAt );
 
     status = sequence->status;
diff --git a/compute/zlaset.c b/compute/zlaset.c
index 3799aaf4e..c167bebab 100644
--- a/compute/zlaset.c
+++ b/compute/zlaset.c
@@ -128,13 +128,15 @@ int MORSE_zlaset(MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zlaset_Tile_Async( uplo, alpha, beta, &descAt, sequence, &request );
 
-    /* Submit the matrix conversion */
+    /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zlauum.c b/compute/zlauum.c
index 12661efe0..3fb93a3fd 100644
--- a/compute/zlauum.c
+++ b/compute/zlauum.c
@@ -122,7 +122,7 @@ int MORSE_zlauum(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -130,7 +130,7 @@ int MORSE_zlauum(MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zplghe.c b/compute/zplghe.c
index c2ffc15aa..6889182ed 100644
--- a/compute/zplghe.c
+++ b/compute/zplghe.c
@@ -116,7 +116,7 @@ int MORSE_zplghe( double bump, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescOutput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -124,7 +124,7 @@ int MORSE_zplghe( double bump, MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescOutput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zplgsy.c b/compute/zplgsy.c
index 4da8ef7e8..3c857fbd8 100644
--- a/compute/zplgsy.c
+++ b/compute/zplgsy.c
@@ -116,7 +116,7 @@ int MORSE_zplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescOutput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -124,7 +124,7 @@ int MORSE_zplgsy( MORSE_Complex64_t bump, MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescOutput, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zplrnt.c b/compute/zplrnt.c
index abca218fe..431f9ea54 100644
--- a/compute/zplrnt.c
+++ b/compute/zplrnt.c
@@ -114,7 +114,7 @@ int MORSE_zplrnt( int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescOutput, MorseUpperLower,
                      A, NB, NB, LDA, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -122,7 +122,7 @@ int MORSE_zplrnt( int M, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescOutput, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zposv.c b/compute/zposv.c
index 76032a3da..97099a30c 100644
--- a/compute/zposv.c
+++ b/compute/zposv.c
@@ -151,9 +151,9 @@ int MORSE_zposv(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, uplo,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -161,9 +161,9 @@ int MORSE_zposv(MORSE_enum uplo, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zpotrf.c b/compute/zpotrf.c
index 2ec32c2d7..950cb9220 100644
--- a/compute/zpotrf.c
+++ b/compute/zpotrf.c
@@ -128,7 +128,7 @@ int MORSE_zpotrf(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -136,7 +136,7 @@ int MORSE_zpotrf(MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zpotri.c b/compute/zpotri.c
index 542ad704c..8778a473c 100644
--- a/compute/zpotri.c
+++ b/compute/zpotri.c
@@ -119,7 +119,7 @@ int MORSE_zpotri(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -127,7 +127,7 @@ int MORSE_zpotri(MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zpotrimm.c b/compute/zpotrimm.c
index 2aab20b73..1850d998c 100644
--- a/compute/zpotrimm.c
+++ b/compute/zpotrimm.c
@@ -131,11 +131,11 @@ int MORSE_zpotrimm(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -143,11 +143,11 @@ int MORSE_zpotrimm(MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zpotrs.c b/compute/zpotrs.c
index 8d841fec4..162c6cb29 100644
--- a/compute/zpotrs.c
+++ b/compute/zpotrs.c
@@ -135,17 +135,19 @@ int MORSE_zpotrs(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zpotrs_Tile_Async( uplo, &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsymm.c b/compute/zsymm.c
index d7826a9a6..d2405343a 100644
--- a/compute/zsymm.c
+++ b/compute/zsymm.c
@@ -176,19 +176,23 @@ int MORSE_zsymm(MORSE_enum side, MORSE_enum uplo, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, Am, Am, Am, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, N, M,  N, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zsymm_Tile_Async(  side, uplo, alpha, &descAt, &descBt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
+    morse_ztile2lap( morse, &descBl, &descBt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsyr2k.c b/compute/zsyr2k.c
index 88020a26b..59e6790c5 100644
--- a/compute/zsyr2k.c
+++ b/compute/zsyr2k.c
@@ -181,19 +181,23 @@ int MORSE_zsyr2k(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInput, MorseUpperLower,
                      B, NB, NB, LDB, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, uplo,
                      C, NB, NB, LDC, N, N,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zsyr2k_Tile_Async( uplo, trans, alpha, &descAt, &descBt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
+    morse_ztile2lap( morse, &descBl, &descBt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsyrk.c b/compute/zsyrk.c
index 237164df2..5cbe29975 100644
--- a/compute/zsyrk.c
+++ b/compute/zsyrk.c
@@ -166,17 +166,19 @@ int MORSE_zsyrk(MORSE_enum uplo, MORSE_enum trans, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpperLower,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, uplo,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, uplo,
                      C, NB, NB, LDC, N, N,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zsyrk_Tile_Async( uplo, trans, alpha, &descAt, beta, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsysv.c b/compute/zsysv.c
index fa5c01538..460624047 100644
--- a/compute/zsysv.c
+++ b/compute/zsysv.c
@@ -148,9 +148,9 @@ int MORSE_zsysv(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
@@ -158,9 +158,9 @@ int MORSE_zsysv(MORSE_enum uplo, int N, int NRHS,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsytrf.c b/compute/zsytrf.c
index 34df2fcee..1d0875bb0 100644
--- a/compute/zsytrf.c
+++ b/compute/zsytrf.c
@@ -123,7 +123,7 @@ int MORSE_zsytrf(MORSE_enum uplo, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -131,7 +131,7 @@ int MORSE_zsytrf(MORSE_enum uplo, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zsytrs.c b/compute/zsytrs.c
index 201561ad8..16812476d 100644
--- a/compute/zsytrs.c
+++ b/compute/zsytrs.c
@@ -134,17 +134,19 @@ int MORSE_zsytrs(MORSE_enum uplo, int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zsytrs_Tile_Async( uplo, &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztile.c b/compute/ztile.c
index 84a18d4b0..a52368eb5 100644
--- a/compute/ztile.c
+++ b/compute/ztile.c
@@ -97,7 +97,7 @@ int MORSE_zLapack_to_Tile(MORSE_Complex64_t *Af77, int LDA, MORSE_desc_t *A)
 
     RUNTIME_desc_flush( &B, sequence );
     RUNTIME_desc_flush(  A, sequence );
-    RUNTIME_sequence_wait( morse, sequence );
+    morse_sequence_wait( morse, sequence );
 
     RUNTIME_desc_destroy( &B );
 
@@ -177,7 +177,7 @@ int MORSE_zTile_to_Lapack(MORSE_desc_t *A, MORSE_Complex64_t *Af77, int LDA)
 
     RUNTIME_desc_flush(  A, sequence );
     RUNTIME_desc_flush( &B, sequence );
-    RUNTIME_sequence_wait( morse, sequence );
+    morse_sequence_wait( morse, sequence );
 
     RUNTIME_desc_destroy( &B );
 
diff --git a/compute/ztpgqrt.c b/compute/ztpgqrt.c
index faff5bee6..adf47e86c 100644
--- a/compute/ztpgqrt.c
+++ b/compute/ztpgqrt.c
@@ -211,23 +211,27 @@ int MORSE_ztpgqrt( int M, int N, int K, int L,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descV1l, &descV1t, MorseUpperLower,
+    morse_zlap2tile( morse, &descV1l, &descV1t, MorseDescInput, MorseUpperLower,
                      V1, NB, NB, LDV1, K, M, K, sequence, &request );
-    morse_zlap2tile( morse, &descV2l, &descV2t, MorseUpperLower,
+    morse_zlap2tile( morse, &descV2l, &descV2t, MorseDescInput, MorseUpperLower,
                      V2, NB, NB, LDV2, K, M, K, sequence, &request );
-    morse_zlap2tile( morse, &descQ1l, &descQ1t, MorseUpperLower,
+    morse_zlap2tile( morse, &descQ1l, &descQ1t, MorseDescInout, MorseUpperLower,
                      Q1, NB, NB, LDQ1, N, K, N, sequence, &request );
-    morse_zlap2tile( morse, &descQ2l, &descQ2t, MorseUpperLower,
+    morse_zlap2tile( morse, &descQ2l, &descQ2t, MorseDescInout, MorseUpperLower,
                      Q2, NB, NB, LDQ2, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_ztpgqrt_Tile_Async( L, &descV1t, descT1, &descV2t, descT2, &descQ1t, &descQ2t, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descV1l, &descV1t,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
+    morse_ztile2lap( morse, &descV2l, &descV2t,
+                     MorseDescInput, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descQ1l, &descQ1t,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
     morse_ztile2lap( morse, &descQ2l, &descQ2t,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztpqrt.c b/compute/ztpqrt.c
index ba56c04a3..bdbe28718 100644
--- a/compute/ztpqrt.c
+++ b/compute/ztpqrt.c
@@ -187,9 +187,9 @@ int MORSE_ztpqrt( int M, int N, int L,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, MorseUpper,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, N, M, N, sequence, &request );
 
     /* Call the tile interface */
@@ -197,9 +197,9 @@ int MORSE_ztpqrt( int M, int N, int L,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztradd.c b/compute/ztradd.c
index 6883d04bd..2fa56e67a 100644
--- a/compute/ztradd.c
+++ b/compute/ztradd.c
@@ -165,17 +165,19 @@ int MORSE_ztradd(MORSE_enum uplo, MORSE_enum trans, int M, int N,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, An, Am, An, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, uplo,
                      B, NB, NB, LDB, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_ztradd_Tile_Async( uplo, trans, alpha, &descAt, beta, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztrmm.c b/compute/ztrmm.c
index 20f8c2330..268ea9a5f 100644
--- a/compute/ztrmm.c
+++ b/compute/ztrmm.c
@@ -179,17 +179,19 @@ int MORSE_ztrmm(MORSE_enum side, MORSE_enum uplo,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, NA, NA, NA, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
-                     B, NB, NB, LDB, NRHS, N,  NRHS, sequence, &request );
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
+                     B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_ztrmm_Tile_Async(  side, uplo, transA, diag, alpha, &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztrsm.c b/compute/ztrsm.c
index f58707ef3..8313dcc5f 100644
--- a/compute/ztrsm.c
+++ b/compute/ztrsm.c
@@ -177,17 +177,19 @@ int MORSE_ztrsm(MORSE_enum side, MORSE_enum uplo,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, uplo,
                      A, NB, NB, LDA, NA, NA, NA, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, uplo,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N,  NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_ztrsm_Tile_Async(  side, uplo, transA, diag, alpha, &descAt, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, uplo, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     uplo, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztrsmpl.c b/compute/ztrsmpl.c
index ec0c750e7..83195d5c6 100644
--- a/compute/ztrsmpl.c
+++ b/compute/ztrsmpl.c
@@ -132,17 +132,19 @@ int MORSE_ztrsmpl(int N, int NRHS,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseLower,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
-    morse_zlap2tile( morse, &descBl, &descBt, MorseUpperLower,
+    morse_zlap2tile( morse, &descBl, &descBt, MorseDescInout, MorseUpperLower,
                      B, NB, NB, LDB, NRHS, N, NRHS, sequence, &request );
 
     /* Call the tile interface */
     MORSE_ztrsmpl_Tile_Async( &descAt, descL, IPIV, &descBt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descBl, &descBt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/ztrtri.c b/compute/ztrtri.c
index f1f9ed70e..c1864a56f 100644
--- a/compute/ztrtri.c
+++ b/compute/ztrtri.c
@@ -126,12 +126,12 @@ int MORSE_ztrtri(MORSE_enum uplo, MORSE_enum diag, int N,
     }
 
     /* Set NT */
-    NB   = MORSE_NB;
+    NB = MORSE_NB;
 
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, uplo,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInout, uplo,
                      A, NB, NB, LDA, N, N, N, sequence, &request );
 
     /* Call the tile interface */
@@ -139,7 +139,7 @@ int MORSE_ztrtri(MORSE_enum uplo, MORSE_enum diag, int N,
 
     /* Submit the matrix conversion back */
     morse_ztile2lap( morse, &descAl, &descAt,
-                     uplo, sequence, &request );
+                     MorseDescInout, uplo, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunglq.c b/compute/zunglq.c
index c6cf9ed57..4dbd23de5 100644
--- a/compute/zunglq.c
+++ b/compute/zunglq.c
@@ -138,17 +138,19 @@ int MORSE_zunglq(int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpper,
                      A, NB, NB, LDA, N, K, N, sequence, &request );
-    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+    morse_zlap2tile( morse, &descQl, &descQt, MorseDescInout, MorseUpperLower,
                      Q, NB, NB, LDQ, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunglq_Tile_Async( &descAt, descT, &descQt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunglq_param.c b/compute/zunglq_param.c
index e1c6607a4..deec8916a 100644
--- a/compute/zunglq_param.c
+++ b/compute/zunglq_param.c
@@ -135,17 +135,19 @@ int MORSE_zunglq_param(const libhqr_tree_t *qrtree, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpper,
                      A, NB, NB, LDA, N, K, N, sequence, &request );
-    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+    morse_zlap2tile( morse, &descQl, &descQt, MorseDescInout, MorseUpperLower,
                      Q, NB, NB, LDQ, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunglq_param_Tile_Async( qrtree, &descAt, descTS, descTT, &descQt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zungqr.c b/compute/zungqr.c
index 9e5ce555a..db36ac172 100644
--- a/compute/zungqr.c
+++ b/compute/zungqr.c
@@ -137,17 +137,19 @@ int MORSE_zungqr(int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseLower,
                      A, NB, NB, LDA, N, M, K, sequence, &request );
-    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+    morse_zlap2tile( morse, &descQl, &descQt, MorseDescInout, MorseUpperLower,
                      Q, NB, NB, LDQ, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zungqr_Tile_Async( &descAt, descT, &descQt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zungqr_param.c b/compute/zungqr_param.c
index 342c12f3a..32bb62d7a 100644
--- a/compute/zungqr_param.c
+++ b/compute/zungqr_param.c
@@ -136,17 +136,19 @@ int MORSE_zungqr_param(const libhqr_tree_t *qrtree,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseLower,
                      A, NB, NB, LDA, N, M, K, sequence, &request );
-    morse_zlap2tile( morse, &descQl, &descQt, MorseUpperLower,
+    morse_zlap2tile( morse, &descQl, &descQt, MorseDescInout, MorseUpperLower,
                      Q, NB, NB, LDQ, N, M, N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zungqr_param_Tile_Async( qrtree, &descAt, descTS, descTT, &descQt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descQl, &descQt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunmlq.c b/compute/zunmlq.c
index f944588a9..7ba6f30b7 100644
--- a/compute/zunmlq.c
+++ b/compute/zunmlq.c
@@ -175,17 +175,19 @@ int MORSE_zunmlq(MORSE_enum side, MORSE_enum trans, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpper,
                      A, NB, NB, LDA, An, K, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunmlq_Tile_Async(  side, trans, &descAt, descT, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunmlq_param.c b/compute/zunmlq_param.c
index b4ab58d0c..fce325bd7 100644
--- a/compute/zunmlq_param.c
+++ b/compute/zunmlq_param.c
@@ -174,17 +174,19 @@ int MORSE_zunmlq_param(const libhqr_tree_t *qrtree, MORSE_enum side, MORSE_enum
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseUpper,
                      A, NB, NB, LDA, An, K, An, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunmlq_param_Tile_Async( qrtree, side, trans, &descAt, descTS, descTT, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseUpper, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunmqr.c b/compute/zunmqr.c
index c2b513ef7..501300566 100644
--- a/compute/zunmqr.c
+++ b/compute/zunmqr.c
@@ -178,17 +178,19 @@ int MORSE_zunmqr(MORSE_enum side, MORSE_enum trans, int M, int N, int K,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseLower,
                      A, NB, NB, LDA, K, Am, K, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunmqr_Tile_Async(  side, trans, &descAt, descT, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/compute/zunmqr_param.c b/compute/zunmqr_param.c
index 53656b7c3..d1f406be2 100644
--- a/compute/zunmqr_param.c
+++ b/compute/zunmqr_param.c
@@ -179,17 +179,19 @@ int MORSE_zunmqr_param(const libhqr_tree_t *qrtree,
     morse_sequence_create(morse, &sequence);
 
     /* Submit the matrix conversion */
-    morse_zlap2tile( morse, &descAl, &descAt, MorseUpperLower,
+    morse_zlap2tile( morse, &descAl, &descAt, MorseDescInput, MorseLower,
                      A, NB, NB, LDA, K, Am, K, sequence, &request );
-    morse_zlap2tile( morse, &descCl, &descCt, MorseUpperLower,
+    morse_zlap2tile( morse, &descCl, &descCt, MorseDescInout, MorseUpperLower,
                      C, NB, NB, LDC, N, M,  N, sequence, &request );
 
     /* Call the tile interface */
     MORSE_zunmqr_param_Tile_Async( qrtree, side, trans, &descAt, descTS, descTT, &descCt, sequence, &request );
 
     /* Submit the matrix conversion back */
+    morse_ztile2lap( morse, &descAl, &descAt,
+                     MorseDescInput, MorseLower, sequence, &request );
     morse_ztile2lap( morse, &descCl, &descCt,
-                     MorseUpperLower, sequence, &request );
+                     MorseDescInout, MorseUpperLower, sequence, &request );
 
     morse_sequence_wait(morse, sequence);
 
diff --git a/control/common.h b/control/common.h
index 07c3adccc..1df9385ba 100644
--- a/control/common.h
+++ b/control/common.h
@@ -107,7 +107,6 @@
 #define MorseIPT_Panel   1
 #define MorseIPT_All     2
 
-
 /*******************************************************************************
  *  Global array of LAPACK constants
  **/
diff --git a/control/compute_z.h b/control/compute_z.h
index 55a9de175..7a1086edc 100644
--- a/control/compute_z.h
+++ b/control/compute_z.h
@@ -28,6 +28,13 @@
  *
  **/
 
+/*******************************************************************************
+ *  LAPACK/Tile Descriptor accesses
+ **/
+#define MorseDescInput  1
+#define MorseDescOutput 2
+#define MorseDescInout  3
+
 /***************************************************************************//**
  *  Macro for matrix conversion / Lapack interface
  **/
@@ -180,7 +187,8 @@ void morse_pzungqr_param(const libhqr_tree_t *qrtree, MORSE_desc_t *A, MORSE_des
 static inline int
 morse_zlap2tile( MORSE_context_t *morse,
                  MORSE_desc_t *descAl, MORSE_desc_t *descAt,
-                 MORSE_enum uplo, MORSE_Complex64_t *A, int mb, int nb, int lm, int ln, int m, int n,
+                 MORSE_enum mode, MORSE_enum uplo,
+                 MORSE_Complex64_t *A, int mb, int nb, int lm, int ln, int m, int n,
                  MORSE_sequence_t *seq, MORSE_request_t *req )
 {
     /* Initialize the Lapack descriptor */
@@ -205,13 +213,17 @@ morse_zlap2tile( MORSE_context_t *morse,
             RUNTIME_desc_destroy( descAt );
             return MORSE_ERR_OUT_OF_RESOURCES;
         }
-        morse_pzlacpy( uplo, descAl, descAt, seq, req );
+        if ( mode & MorseDescInput ) {
+            morse_pzlacpy( uplo, descAl, descAt, seq, req );
+        }
     }
     else {
         morse_fatal_error( "morse_zlap2tile", "INPLACE translation not supported yet");
         descAt->mat = A;
-        /* MORSE_zgecfi_Async( lm, ln, A, MorseCM, mb, nb, */
-        /*                     MorseCCRB, mb, nb, seq, req ); */
+        if ( mode & MorseDescInput ) {
+            /* MORSE_zgecfi_Async( lm, ln, A, MorseCM, mb, nb, */
+            /*                     MorseCCRB, mb, nb, seq, req ); */
+        }
         return MORSE_ERR_NOT_SUPPORTED;
     }
 
@@ -224,16 +236,20 @@ morse_zlap2tile( MORSE_context_t *morse,
  */
 static inline int
 morse_ztile2lap( MORSE_context_t *morse, MORSE_desc_t *descAl, MORSE_desc_t *descAt,
-                 MORSE_enum uplo, MORSE_sequence_t *seq, MORSE_request_t *req )
+                 MORSE_enum mode, MORSE_enum uplo, MORSE_sequence_t *seq, MORSE_request_t *req )
 {
     if ( MORSE_TRANSLATION == MORSE_OUTOFPLACE ) {
-        morse_pzlacpy( uplo, descAt, descAl, seq, req );
+        if ( mode & MorseDescOutput ) {
+            morse_pzlacpy( uplo, descAt, descAl, seq, req );
+        }
     }
     else {
         morse_fatal_error( "morse_ztile2lap", "INPLACE translation not supported yet");
-        /* MORSE_zgecfi_Async( descAl->lm, descAl->ln, descAl->mat, */
-        /*                     MorseCCRB, descAl->mb, descAl->nb,   */
-        /*                     MorseCM, descAl->mb, descAl->nb, seq, req ); */
+        if ( mode & MorseDescOutput ) {
+            /* MORSE_zgecfi_Async( descAl->lm, descAl->ln, descAl->mat, */
+            /*                     MorseCCRB, descAl->mb, descAl->nb,   */
+            /*                     MorseCM, descAl->mb, descAl->nb, seq, req ); */
+        }
         return MORSE_ERR_NOT_SUPPORTED;
     }
     RUNTIME_desc_flush( descAl, seq );
diff --git a/include/chameleon/morse_constants.h b/include/chameleon/morse_constants.h
index 8ffe90dc0..5638145bd 100644
--- a/include/chameleon/morse_constants.h
+++ b/include/chameleon/morse_constants.h
@@ -109,7 +109,6 @@
 
 #define morse_const_neg(const) (((const-1)^0x01)+1)
 
-
 /** ****************************************************************************
  *  MORSE constants - boolean
  **/
@@ -119,7 +118,6 @@
 #define MORSE_CPU    ((1ULL)<<1)
 #define MORSE_CUDA   ((1ULL)<<3)
 
-
 /** ****************************************************************************
  *  State machine switches
  **/
@@ -149,7 +147,6 @@
 #define MORSE_INPLACE           1
 #define MORSE_OUTOFPLACE        2
 
-
 /** ****************************************************************************
  *  MORSE constants - success & error codes
  **/
@@ -166,7 +163,6 @@
 #define MORSE_ERR_UNEXPECTED       -110
 #define MORSE_ERR_SEQUENCE_FLUSHED -111
 
-
 /** ****************************************************************************
  * Kernels options
  **/
@@ -181,7 +177,6 @@
 #define CALLBACK        17
 #define REDUX           18
 
-
 /** ****************************************************************************
  *  MORSE ???
  **/
-- 
GitLab