From 8fda2448fc58cdf567a3b6b44ce55443e0c0bbc2 Mon Sep 17 00:00:00 2001
From: Mathieu Faverge <mathieu.faverge@inria.fr>
Date: Wed, 24 Jan 2018 18:00:44 +0100
Subject: [PATCH] Temporary fix for missing flush/wait in QR functions

---
 compute/zgelqf.c       | 4 ++++
 compute/zgelqf_param.c | 5 +++++
 compute/zgelqs.c       | 5 +++++
 compute/zgelqs_param.c | 6 ++++++
 compute/zgels.c        | 5 +++++
 compute/zgels_param.c  | 6 ++++++
 compute/zgeqrf.c       | 4 ++++
 compute/zgeqrf_param.c | 5 +++++
 compute/zgeqrs_param.c | 6 ++++++
 compute/ztpgqrt.c      | 8 ++++++++
 compute/zunglq.c       | 5 +++++
 compute/zunglq_param.c | 6 ++++++
 compute/zungqr.c       | 5 +++++
 compute/zungqr_param.c | 6 ++++++
 compute/zunmlq.c       | 5 +++++
 compute/zunmlq_param.c | 6 ++++++
 compute/zunmqr.c       | 5 +++++
 compute/zunmqr_param.c | 6 ++++++
 18 files changed, 98 insertions(+)

diff --git a/compute/zgelqf.c b/compute/zgelqf.c
index f21a09861..bcab0855f 100644
--- a/compute/zgelqf.c
+++ b/compute/zgelqf.c
@@ -297,6 +297,10 @@ 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_Flush( A, sequence );
+        MORSE_Desc_Flush( T, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgelqf_param.c b/compute/zgelqf_param.c
index 65d497f29..fe0623cb7 100644
--- a/compute/zgelqf_param.c
+++ b/compute/zgelqf_param.c
@@ -294,6 +294,11 @@ 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_Flush( A, sequence );
+        MORSE_Desc_Flush( TS, sequence );
+        MORSE_Desc_Flush( TT, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgelqs.c b/compute/zgelqs.c
index 30d29ccb3..ccf896144 100644
--- a/compute/zgelqs.c
+++ b/compute/zgelqs.c
@@ -338,6 +338,11 @@ int MORSE_zgelqs_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *B,
     }
 
     if (Dptr != NULL) {
+        MORSE_Desc_Flush( A, sequence );
+        MORSE_Desc_Flush( B, sequence );
+        MORSE_Desc_Flush( T, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgelqs_param.c b/compute/zgelqs_param.c
index 42ee682dd..ffac93d2e 100644
--- a/compute/zgelqs_param.c
+++ b/compute/zgelqs_param.c
@@ -343,6 +343,12 @@ 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_Flush( A, sequence );
+        MORSE_Desc_Flush( B, sequence );
+        MORSE_Desc_Flush( TS, sequence );
+        MORSE_Desc_Flush( TT, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgels.c b/compute/zgels.c
index 9882bcdb4..74d65ca46 100644
--- a/compute/zgels.c
+++ b/compute/zgels.c
@@ -434,6 +434,11 @@ int MORSE_zgels_Tile_Async( MORSE_enum trans, MORSE_desc_t *A,
     free(subB);
 
     if (Dptr != NULL) {
+        MORSE_Desc_Flush( A, sequence );
+        MORSE_Desc_Flush( T, sequence );
+        MORSE_Desc_Flush( B, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgels_param.c b/compute/zgels_param.c
index dcfcd3812..a05519404 100644
--- a/compute/zgels_param.c
+++ b/compute/zgels_param.c
@@ -423,6 +423,12 @@ int MORSE_zgels_param_Tile_Async( const libhqr_tree_t *qrtree, MORSE_enum trans,
     free(subB);
 
     if (Dptr != NULL) {
+        MORSE_Desc_Flush( A, sequence );
+        MORSE_Desc_Flush( TS, sequence );
+        MORSE_Desc_Flush( TT, sequence );
+        MORSE_Desc_Flush( B, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgeqrf.c b/compute/zgeqrf.c
index abca5cd8c..6695351de 100644
--- a/compute/zgeqrf.c
+++ b/compute/zgeqrf.c
@@ -296,6 +296,10 @@ 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_Flush( A, sequence );
+        MORSE_Desc_Flush( T, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgeqrf_param.c b/compute/zgeqrf_param.c
index 421415824..5e5b220f0 100644
--- a/compute/zgeqrf_param.c
+++ b/compute/zgeqrf_param.c
@@ -304,6 +304,11 @@ 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_Flush( A, sequence );
+        MORSE_Desc_Flush( TS, sequence );
+        MORSE_Desc_Flush( TT, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zgeqrs_param.c b/compute/zgeqrs_param.c
index e25b2fd26..d76227489 100644
--- a/compute/zgeqrs_param.c
+++ b/compute/zgeqrs_param.c
@@ -331,6 +331,12 @@ int MORSE_zgeqrs_param_Tile_Async( const libhqr_tree_t *qrtree,
     free(subB);
 
     if (Dptr != NULL) {
+        MORSE_Desc_Flush( A, sequence );
+        MORSE_Desc_Flush( TS, sequence );
+        MORSE_Desc_Flush( TT, sequence );
+        MORSE_Desc_Flush( B, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/ztpgqrt.c b/compute/ztpgqrt.c
index e209f1438..d28a53099 100644
--- a/compute/ztpgqrt.c
+++ b/compute/ztpgqrt.c
@@ -421,6 +421,14 @@ int MORSE_ztpgqrt_Tile_Async( int L,
     /*    morse_pztpgqrtrh( Q1, T, MORSE_RHBLK, sequence, request ); */
     /* } */
     if (Dptr != NULL) {
+        MORSE_Desc_Flush( V1, sequence );
+        MORSE_Desc_Flush( T1, sequence );
+        MORSE_Desc_Flush( V2, sequence );
+        MORSE_Desc_Flush( T2, sequence );
+        MORSE_Desc_Flush( Q1, sequence );
+        MORSE_Desc_Flush( Q2, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunglq.c b/compute/zunglq.c
index a2307eb05..f8738d768 100644
--- a/compute/zunglq.c
+++ b/compute/zunglq.c
@@ -321,6 +321,11 @@ int MORSE_zunglq_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *Q,
     }
 
     if (Dptr != NULL) {
+        MORSE_Desc_Flush( A, sequence );
+        MORSE_Desc_Flush( Q, sequence );
+        MORSE_Desc_Flush( T, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunglq_param.c b/compute/zunglq_param.c
index af1096930..45110d3f7 100644
--- a/compute/zunglq_param.c
+++ b/compute/zunglq_param.c
@@ -317,6 +317,12 @@ 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_Flush( A, sequence );
+        MORSE_Desc_Flush( Q, sequence );
+        MORSE_Desc_Flush( TS, sequence );
+        MORSE_Desc_Flush( TT, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zungqr.c b/compute/zungqr.c
index eb4ecf58e..954f2da51 100644
--- a/compute/zungqr.c
+++ b/compute/zungqr.c
@@ -318,6 +318,11 @@ int MORSE_zungqr_Tile_Async( MORSE_desc_t *A, MORSE_desc_t *T, MORSE_desc_t *Q,
     }
 
     if (Dptr != NULL) {
+        MORSE_Desc_Flush( A, sequence );
+        MORSE_Desc_Flush( Q, sequence );
+        MORSE_Desc_Flush( T, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zungqr_param.c b/compute/zungqr_param.c
index 3607664f9..8621b7816 100644
--- a/compute/zungqr_param.c
+++ b/compute/zungqr_param.c
@@ -315,6 +315,12 @@ 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_Flush( A, sequence );
+        MORSE_Desc_Flush( Q, sequence );
+        MORSE_Desc_Flush( TS, sequence );
+        MORSE_Desc_Flush( TT, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunmlq.c b/compute/zunmlq.c
index 318906b5e..5901868c4 100644
--- a/compute/zunmlq.c
+++ b/compute/zunmlq.c
@@ -382,6 +382,11 @@ 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_Flush( A, sequence );
+        MORSE_Desc_Flush( C, sequence );
+        MORSE_Desc_Flush( T, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunmlq_param.c b/compute/zunmlq_param.c
index a272452ef..4a6375136 100644
--- a/compute/zunmlq_param.c
+++ b/compute/zunmlq_param.c
@@ -378,6 +378,12 @@ 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_Flush( A, sequence );
+        MORSE_Desc_Flush( C, sequence );
+        MORSE_Desc_Flush( TS, sequence );
+        MORSE_Desc_Flush( TT, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunmqr.c b/compute/zunmqr.c
index c859ad44e..7e836f91f 100644
--- a/compute/zunmqr.c
+++ b/compute/zunmqr.c
@@ -389,6 +389,11 @@ int MORSE_zunmqr_Tile_Async( MORSE_enum side, MORSE_enum trans,
     }
 
     if (Dptr != NULL) {
+        MORSE_Desc_Flush( A, sequence );
+        MORSE_Desc_Flush( C, sequence );
+        MORSE_Desc_Flush( T, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
diff --git a/compute/zunmqr_param.c b/compute/zunmqr_param.c
index 7c1f2fb15..45c88e575 100644
--- a/compute/zunmqr_param.c
+++ b/compute/zunmqr_param.c
@@ -385,6 +385,12 @@ 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_Flush( A, sequence );
+        MORSE_Desc_Flush( C, sequence );
+        MORSE_Desc_Flush( TS, sequence );
+        MORSE_Desc_Flush( TT, sequence );
+        MORSE_Desc_Flush( Dptr, sequence );
+        morse_sequence_wait( morse, sequence );
         morse_desc_mat_free( Dptr );
     }
     (void)D;
-- 
GitLab