Fix too strict leading dimensions check in LAPACKE_?gesdd_work (Reference-LAPACK PR #1126) (#5307)

* relax leading dimensions check (Reference-LAPACK PR #1126)
This commit is contained in:
Martin Kroeker
2025-06-15 13:47:14 -07:00
committed by GitHub
parent 7f3093a0ad
commit bad47bd024
4 changed files with 16 additions and 4 deletions

View File

@@ -58,6 +58,9 @@ lapack_int LAPACKE_cgesdd_work( int matrix_layout, char jobz, lapack_int m,
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
LAPACKE_lsame( jobz, 's' ) ||
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
lapack_int lda_t = MAX(1,m);
lapack_int ldu_t = MAX(1,nrows_u);
lapack_int ldvt_t = MAX(1,nrows_vt);
@@ -75,7 +78,7 @@ lapack_int LAPACKE_cgesdd_work( int matrix_layout, char jobz, lapack_int m,
LAPACKE_xerbla( "LAPACKE_cgesdd_work", info );
return info;
}
if( ldvt < n ) {
if( ldvt < ncols_vt ) {
info = -11;
LAPACKE_xerbla( "LAPACKE_cgesdd_work", info );
return info;

View File

@@ -56,6 +56,9 @@ lapack_int LAPACKE_dgesdd_work( int matrix_layout, char jobz, lapack_int m,
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
LAPACKE_lsame( jobz, 's' ) ||
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
lapack_int lda_t = MAX(1,m);
lapack_int ldu_t = MAX(1,nrows_u);
lapack_int ldvt_t = MAX(1,nrows_vt);
@@ -73,7 +76,7 @@ lapack_int LAPACKE_dgesdd_work( int matrix_layout, char jobz, lapack_int m,
LAPACKE_xerbla( "LAPACKE_dgesdd_work", info );
return info;
}
if( ldvt < n ) {
if( ldvt < ncols_vt ) {
info = -11;
LAPACKE_xerbla( "LAPACKE_dgesdd_work", info );
return info;

View File

@@ -56,6 +56,9 @@ lapack_int LAPACKE_sgesdd_work( int matrix_layout, char jobz, lapack_int m,
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
LAPACKE_lsame( jobz, 's' ) ||
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
lapack_int lda_t = MAX(1,m);
lapack_int ldu_t = MAX(1,nrows_u);
lapack_int ldvt_t = MAX(1,nrows_vt);
@@ -73,7 +76,7 @@ lapack_int LAPACKE_sgesdd_work( int matrix_layout, char jobz, lapack_int m,
LAPACKE_xerbla( "LAPACKE_sgesdd_work", info );
return info;
}
if( ldvt < n ) {
if( ldvt < ncols_vt ) {
info = -11;
LAPACKE_xerbla( "LAPACKE_sgesdd_work", info );
return info;

View File

@@ -58,6 +58,9 @@ lapack_int LAPACKE_zgesdd_work( int matrix_layout, char jobz, lapack_int m,
lapack_int nrows_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
( LAPACKE_lsame( jobz, 'o' ) && m>=n) ) ? n :
( LAPACKE_lsame( jobz, 's' ) ? MIN(m,n) : 1);
lapack_int ncols_vt = ( LAPACKE_lsame( jobz, 'a' ) ||
LAPACKE_lsame( jobz, 's' ) ||
( LAPACKE_lsame( jobz, 'o' && m >=n) ) ? n : 1);
lapack_int lda_t = MAX(1,m);
lapack_int ldu_t = MAX(1,nrows_u);
lapack_int ldvt_t = MAX(1,nrows_vt);
@@ -75,7 +78,7 @@ lapack_int LAPACKE_zgesdd_work( int matrix_layout, char jobz, lapack_int m,
LAPACKE_xerbla( "LAPACKE_zgesdd_work", info );
return info;
}
if( ldvt < n ) {
if( ldvt < ncols_vt ) {
info = -11;
LAPACKE_xerbla( "LAPACKE_zgesdd_work", info );
return info;