From 4c2b713ce5e0a1ccd421c053224459f10b8c8c98 Mon Sep 17 00:00:00 2001 From: Vladimir Chalupecky Date: Tue, 7 Feb 2017 09:21:46 +0100 Subject: [PATCH] LAPACKE: fix incorrect value of lda_t in lapacke_?laswp_work Fixed in Reference LAPACK in commit: https://github.com/Reference-LAPACK/lapack/pull/118/commits/07e1fbd89752bed74d35c48e92287d467646a158 --- lapack-netlib/LAPACKE/src/lapacke_claswp_work.c | 10 +++++++--- lapack-netlib/LAPACKE/src/lapacke_dlaswp_work.c | 10 +++++++--- lapack-netlib/LAPACKE/src/lapacke_slaswp_work.c | 10 +++++++--- lapack-netlib/LAPACKE/src/lapacke_zlaswp_work.c | 10 +++++++--- 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/lapack-netlib/LAPACKE/src/lapacke_claswp_work.c b/lapack-netlib/LAPACKE/src/lapacke_claswp_work.c index 582c6dbcd..599e72fcf 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_claswp_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_claswp_work.c @@ -46,7 +46,11 @@ lapack_int LAPACKE_claswp_work( int matrix_layout, lapack_int n, info = info - 1; } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { - lapack_int lda_t = MAX(1,lda); + lapack_int lda_t = MAX(1,k2); + lapack_int i; + for( i = k1; i <= k2; i++ ) { + lda_t = MAX( lda_t, ipiv[k1 + ( i - k1 ) * ABS( incx ) - 1] ); + } lapack_complex_float* a_t = NULL; /* Check leading dimension(s) */ if( lda < n ) { @@ -62,12 +66,12 @@ lapack_int LAPACKE_claswp_work( int matrix_layout, lapack_int n, goto exit_level_0; } /* Transpose input matrices */ - LAPACKE_cge_trans( matrix_layout, lda, n, a, lda, a_t, lda_t ); + LAPACKE_cge_trans( matrix_layout, lda_t, n, a, lda, a_t, lda_t ); /* Call LAPACK function and adjust info */ LAPACK_claswp( &n, a_t, &lda_t, &k1, &k2, ipiv, &incx ); info = 0; /* LAPACK call is ok! */ /* Transpose output matrices */ - LAPACKE_cge_trans( LAPACK_COL_MAJOR, lda, n, a_t, lda_t, a, lda ); + LAPACKE_cge_trans( LAPACK_COL_MAJOR, lda_t, n, a_t, lda_t, a, lda ); /* Release memory and exit */ LAPACKE_free( a_t ); exit_level_0: diff --git a/lapack-netlib/LAPACKE/src/lapacke_dlaswp_work.c b/lapack-netlib/LAPACKE/src/lapacke_dlaswp_work.c index 5aa2219cd..027c25fc0 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_dlaswp_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_dlaswp_work.c @@ -45,7 +45,11 @@ lapack_int LAPACKE_dlaswp_work( int matrix_layout, lapack_int n, double* a, info = info - 1; } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { - lapack_int lda_t = MAX(1,lda); + lapack_int lda_t = MAX(1,k2); + lapack_int i; + for( i = k1; i <= k2; i++ ) { + lda_t = MAX( lda_t, ipiv[k1 + ( i - k1 ) * ABS( incx ) - 1] ); + } double* a_t = NULL; /* Check leading dimension(s) */ if( lda < n ) { @@ -60,12 +64,12 @@ lapack_int LAPACKE_dlaswp_work( int matrix_layout, lapack_int n, double* a, goto exit_level_0; } /* Transpose input matrices */ - LAPACKE_dge_trans( matrix_layout, lda, n, a, lda, a_t, lda_t ); + LAPACKE_dge_trans( matrix_layout, lda_t, n, a, lda, a_t, lda_t ); /* Call LAPACK function and adjust info */ LAPACK_dlaswp( &n, a_t, &lda_t, &k1, &k2, ipiv, &incx ); info = 0; /* LAPACK call is ok! */ /* Transpose output matrices */ - LAPACKE_dge_trans( LAPACK_COL_MAJOR, lda, n, a_t, lda_t, a, lda ); + LAPACKE_dge_trans( LAPACK_COL_MAJOR, lda_t, n, a_t, lda_t, a, lda ); /* Release memory and exit */ LAPACKE_free( a_t ); exit_level_0: diff --git a/lapack-netlib/LAPACKE/src/lapacke_slaswp_work.c b/lapack-netlib/LAPACKE/src/lapacke_slaswp_work.c index 01abf5964..1faadbb96 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_slaswp_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_slaswp_work.c @@ -45,7 +45,11 @@ lapack_int LAPACKE_slaswp_work( int matrix_layout, lapack_int n, float* a, info = info - 1; } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { - lapack_int lda_t = MAX(1,lda); + lapack_int lda_t = MAX(1,k2); + lapack_int i; + for( i = k1; i <= k2; i++ ) { + lda_t = MAX( lda_t, ipiv[k1 + ( i - k1 ) * ABS( incx ) - 1] ); + } float* a_t = NULL; /* Check leading dimension(s) */ if( lda < n ) { @@ -60,12 +64,12 @@ lapack_int LAPACKE_slaswp_work( int matrix_layout, lapack_int n, float* a, goto exit_level_0; } /* Transpose input matrices */ - LAPACKE_sge_trans( matrix_layout, lda, n, a, lda, a_t, lda_t ); + LAPACKE_sge_trans( matrix_layout, lda_t, n, a, lda, a_t, lda_t ); /* Call LAPACK function and adjust info */ LAPACK_slaswp( &n, a_t, &lda_t, &k1, &k2, ipiv, &incx ); info = 0; /* LAPACK call is ok! */ /* Transpose output matrices */ - LAPACKE_sge_trans( LAPACK_COL_MAJOR, lda, n, a_t, lda_t, a, lda ); + LAPACKE_sge_trans( LAPACK_COL_MAJOR, lda_t, n, a_t, lda_t, a, lda ); /* Release memory and exit */ LAPACKE_free( a_t ); exit_level_0: diff --git a/lapack-netlib/LAPACKE/src/lapacke_zlaswp_work.c b/lapack-netlib/LAPACKE/src/lapacke_zlaswp_work.c index e9a282cbd..0ab0aae4e 100644 --- a/lapack-netlib/LAPACKE/src/lapacke_zlaswp_work.c +++ b/lapack-netlib/LAPACKE/src/lapacke_zlaswp_work.c @@ -46,7 +46,11 @@ lapack_int LAPACKE_zlaswp_work( int matrix_layout, lapack_int n, info = info - 1; } } else if( matrix_layout == LAPACK_ROW_MAJOR ) { - lapack_int lda_t = MAX(1,lda); + lapack_int lda_t = MAX(1,k2); + lapack_int i; + for( i = k1; i <= k2; i++ ) { + lda_t = MAX( lda_t, ipiv[k1 + ( i - k1 ) * ABS( incx ) - 1] ); + } lapack_complex_double* a_t = NULL; /* Check leading dimension(s) */ if( lda < n ) { @@ -62,12 +66,12 @@ lapack_int LAPACKE_zlaswp_work( int matrix_layout, lapack_int n, goto exit_level_0; } /* Transpose input matrices */ - LAPACKE_zge_trans( matrix_layout, lda, n, a, lda, a_t, lda_t ); + LAPACKE_zge_trans( matrix_layout, lda_t, n, a, lda, a_t, lda_t ); /* Call LAPACK function and adjust info */ LAPACK_zlaswp( &n, a_t, &lda_t, &k1, &k2, ipiv, &incx ); info = 0; /* LAPACK call is ok! */ /* Transpose output matrices */ - LAPACKE_zge_trans( LAPACK_COL_MAJOR, lda, n, a_t, lda_t, a, lda ); + LAPACKE_zge_trans( LAPACK_COL_MAJOR, lda_t, n, a_t, lda_t, a, lda ); /* Release memory and exit */ LAPACKE_free( a_t ); exit_level_0: