LAPACKE: fix wrong matrix size in lapacke_?ormbr_work
authorVladimir Chalupecky <vladimir.chalupecky@gmail.com>
Tue, 21 Feb 2017 05:24:17 +0000 (06:24 +0100)
committerVladimir Chalupecky <vladimir.chalupecky@gmail.com>
Tue, 21 Feb 2017 05:31:40 +0000 (06:31 +0100)
... and move declarations under if.

LAPACKE/src/lapacke_dormbr_work.c
LAPACKE/src/lapacke_sormbr_work.c

index d6d1756..d6adc83 100644 (file)
@@ -40,9 +40,6 @@ lapack_int LAPACKE_dormbr_work( int matrix_layout, char vect, char side,
                                 double* work, lapack_int lwork )
 {
     lapack_int info = 0;
-    lapack_int nq, r;
-    lapack_int lda_t, ldc_t;
-    double *a_t = NULL, *c_t = NULL;
     if( matrix_layout == LAPACK_COL_MAJOR ) {
         /* Call LAPACK function and adjust info */
         LAPACK_dormbr( &vect, &side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc,
@@ -51,12 +48,15 @@ lapack_int LAPACKE_dormbr_work( int matrix_layout, char vect, char side,
             info = info - 1;
         }
     } else if( matrix_layout == LAPACK_ROW_MAJOR ) {
-        nq = LAPACKE_lsame( side, 'l' ) ? m : n;
-        r = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k);
-        lda_t = MAX(1,r);
-        ldc_t = MAX(1,m);
+        lapack_int nq = LAPACKE_lsame( side, 'l' ) ? m : n;
+        lapack_int ar = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k);
+        lapack_int ac = LAPACKE_lsame( vect, 'q' ) ? MIN(nq,k) : nq;
+        lapack_int lda_t = MAX(1,ar);
+        lapack_int ldc_t = MAX(1,m);
+        double *a_t = NULL;
+        double *c_t = NULL;
         /* Check leading dimension(s) */
-        if( lda < MIN(nq,k) ) {
+        if( lda < ac ) {
             info = -9;
             LAPACKE_xerbla( "LAPACKE_dormbr_work", info );
             return info;
@@ -73,11 +73,7 @@ lapack_int LAPACKE_dormbr_work( int matrix_layout, char vect, char side,
             return (info < 0) ? (info - 1) : info;
         }
         /* Allocate memory for temporary array(s) */
-        if( LAPACKE_lsame( vect, 'q' ) ) {
-          a_t = (double*)LAPACKE_malloc( sizeof(double) * lda_t * MAX(1,k) );
-        } else {
-          a_t = (double*)LAPACKE_malloc( sizeof(double) * lda_t * MAX(1,nq) );
-        }
+        a_t = (double*)LAPACKE_malloc( sizeof(double) * lda_t * MAX(1,ac) );
         if( a_t == NULL ) {
             info = LAPACK_TRANSPOSE_MEMORY_ERROR;
             goto exit_level_0;
@@ -88,7 +84,7 @@ lapack_int LAPACKE_dormbr_work( int matrix_layout, char vect, char side,
             goto exit_level_1;
         }
         /* Transpose input matrices */
-        LAPACKE_dge_trans( matrix_layout, r, MIN(nq,k), a, lda, a_t, lda_t );
+        LAPACKE_dge_trans( matrix_layout, ar, ac, a, lda, a_t, lda_t );
         LAPACKE_dge_trans( matrix_layout, m, n, c, ldc, c_t, ldc_t );
         /* Call LAPACK function and adjust info */
         LAPACK_dormbr( &vect, &side, &trans, &m, &n, &k, a_t, &lda_t, tau, c_t,
index e714fa2..5d0f871 100644 (file)
@@ -40,9 +40,6 @@ lapack_int LAPACKE_sormbr_work( int matrix_layout, char vect, char side,
                                 float* work, lapack_int lwork )
 {
     lapack_int info = 0;
-    lapack_int nq, r;
-    lapack_int lda_t, ldc_t;
-    float *a_t = NULL, *c_t = NULL;
     if( matrix_layout == LAPACK_COL_MAJOR ) {
         /* Call LAPACK function and adjust info */
         LAPACK_sormbr( &vect, &side, &trans, &m, &n, &k, a, &lda, tau, c, &ldc,
@@ -51,12 +48,15 @@ lapack_int LAPACKE_sormbr_work( int matrix_layout, char vect, char side,
             info = info - 1;
         }
     } else if( matrix_layout == LAPACK_ROW_MAJOR ) {
-        nq = LAPACKE_lsame( side, 'l' ) ? m : n;
-        r = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k);
-        lda_t = MAX(1,r);
-        ldc_t = MAX(1,m);
+        lapack_int nq = LAPACKE_lsame( side, 'l' ) ? m : n;
+        lapack_int ar = LAPACKE_lsame( vect, 'q' ) ? nq : MIN(nq,k);
+        lapack_int ac = LAPACKE_lsame( vect, 'q' ) ? MIN(nq,k) : nq;
+        lapack_int lda_t = MAX(1,ar);
+        lapack_int ldc_t = MAX(1,m);
+        float *a_t = NULL;
+        float *c_t = NULL;
         /* Check leading dimension(s) */
-        if( lda < MIN(nq,k) ) {
+        if( lda < ac ) {
             info = -9;
             LAPACKE_xerbla( "LAPACKE_sormbr_work", info );
             return info;
@@ -73,11 +73,7 @@ lapack_int LAPACKE_sormbr_work( int matrix_layout, char vect, char side,
             return (info < 0) ? (info - 1) : info;
         }
         /* Allocate memory for temporary array(s) */
-        if( LAPACKE_lsame( vect, 'q' ) ) {
-          a_t = (float*)LAPACKE_malloc( sizeof(float) * lda_t * MAX(1,k) );
-        } else {
-          a_t = (float*)LAPACKE_malloc( sizeof(float) * lda_t * MAX(1,nq) );
-        }
+        a_t = (float*)LAPACKE_malloc( sizeof(float) * lda_t * MAX(1,ac) );
         if( a_t == NULL ) {
             info = LAPACK_TRANSPOSE_MEMORY_ERROR;
             goto exit_level_0;
@@ -88,7 +84,7 @@ lapack_int LAPACKE_sormbr_work( int matrix_layout, char vect, char side,
             goto exit_level_1;
         }
         /* Transpose input matrices */
-        LAPACKE_sge_trans( matrix_layout, r, MIN(nq,k), a, lda, a_t, lda_t );
+        LAPACKE_sge_trans( matrix_layout, ar, ac, a, lda, a_t, lda_t );
         LAPACKE_sge_trans( matrix_layout, m, n, c, ldc, c_t, ldc_t );
         /* Call LAPACK function and adjust info */
         LAPACK_sormbr( &vect, &side, &trans, &m, &n, &k, a_t, &lda_t, tau, c_t,