@@ -30,6 +30,8 @@ void RELAPACK_cgetrf( | |||||
return; | return; | ||||
} | } | ||||
if (*m == 0 || *n == 0) return; | |||||
const blasint sn = MIN(*m, *n); | const blasint sn = MIN(*m, *n); | ||||
RELAPACK_cgetrf_rec(m, &sn, A, ldA, ipiv, info); | RELAPACK_cgetrf_rec(m, &sn, A, ldA, ipiv, info); | ||||
@@ -62,9 +64,11 @@ static void RELAPACK_cgetrf_rec( | |||||
blasint *info | blasint *info | ||||
) { | ) { | ||||
if (*n <= MAX(CROSSOVER_CGETRF, 1)) { | |||||
if (*m == 0 || *n == 0) return; | |||||
if ( *n <= MAX(CROSSOVER_CGETRF, 1)) { | |||||
// Unblocked | // Unblocked | ||||
LAPACK(cgetf2)(m, n, A, ldA, ipiv, info); | |||||
LAPACK(cgetrf2)(m, n, A, ldA, ipiv, info); | |||||
return; | return; | ||||
} | } | ||||
@@ -96,6 +100,7 @@ static void RELAPACK_cgetrf_rec( | |||||
// recursion(A_L, ipiv_T) | // recursion(A_L, ipiv_T) | ||||
RELAPACK_cgetrf_rec(m, &n1, A_L, ldA, ipiv_T, info); | RELAPACK_cgetrf_rec(m, &n1, A_L, ldA, ipiv_T, info); | ||||
if (*info) return; | |||||
// apply pivots to A_R | // apply pivots to A_R | ||||
LAPACK(claswp)(&n2, A_R, ldA, iONE, &n1, ipiv_T, iONE); | LAPACK(claswp)(&n2, A_R, ldA, iONE, &n1, ipiv_T, iONE); | ||||
@@ -40,6 +40,8 @@ void RELAPACK_chegst( | |||||
return; | return; | ||||
} | } | ||||
if (*n == 0) return; | |||||
// Clean char * arguments | // Clean char * arguments | ||||
const char cleanuplo = lower ? 'L' : 'U'; | const char cleanuplo = lower ? 'L' : 'U'; | ||||
@@ -36,7 +36,7 @@ void RELAPACK_chetrf_rook( | |||||
*info = -2; | *info = -2; | ||||
else if (*ldA < MAX(1, *n)) | else if (*ldA < MAX(1, *n)) | ||||
*info = -4; | *info = -4; | ||||
else if (*lWork < minlWork && *lWork != -1) | |||||
else if ((*lWork < 1 || *lWork < minlWork) && *lWork != -1) | |||||
*info = -7; | *info = -7; | ||||
else if (*lWork == -1) { | else if (*lWork == -1) { | ||||
// Work size query | // Work size query | ||||
@@ -56,7 +56,7 @@ void RELAPACK_chetrf_rook( | |||||
if (*info) { | if (*info) { | ||||
const blasint minfo = -*info; | const blasint minfo = -*info; | ||||
LAPACK(xerbla)("CHETRF", &minfo, strlen("CHETRF")); | |||||
LAPACK(xerbla)("CHETRF_ROOK", &minfo, strlen("CHETRF_ROOK")); | |||||
return; | return; | ||||
} | } | ||||
@@ -32,6 +32,8 @@ void RELAPACK_clauum( | |||||
return; | return; | ||||
} | } | ||||
if (*n == 0) return; | |||||
// Clean char * arguments | // Clean char * arguments | ||||
const char cleanuplo = lower ? 'L' : 'U'; | const char cleanuplo = lower ? 'L' : 'U'; | ||||
@@ -32,6 +32,8 @@ void RELAPACK_cpotrf( | |||||
return; | return; | ||||
} | } | ||||
if (*n == 0) return; | |||||
// Clean char * arguments | // Clean char * arguments | ||||
const char cleanuplo = lower ? 'L' : 'U'; | const char cleanuplo = lower ? 'L' : 'U'; | ||||
@@ -46,6 +48,7 @@ static void RELAPACK_cpotrf_rec( | |||||
float *A, const blasint *ldA, | float *A, const blasint *ldA, | ||||
blasint *info | blasint *info | ||||
){ | ){ | ||||
if (*n == 0) return; | |||||
if (*n <= MAX(CROSSOVER_CPOTRF, 1)) { | if (*n <= MAX(CROSSOVER_CPOTRF, 1)) { | ||||
// Unblocked | // Unblocked | ||||
@@ -36,7 +36,7 @@ void RELAPACK_csytrf( | |||||
*info = -2; | *info = -2; | ||||
else if (*ldA < MAX(1, *n)) | else if (*ldA < MAX(1, *n)) | ||||
*info = -4; | *info = -4; | ||||
else if (*lWork < minlWork && *lWork != -1) | |||||
else if ((*lWork < 1 || *lWork < minlWork) && *lWork != -1) | |||||
*info = -7; | *info = -7; | ||||
else if (*lWork == -1) { | else if (*lWork == -1) { | ||||
// Work size query | // Work size query | ||||
@@ -67,6 +67,7 @@ void RELAPACK_csytrf( | |||||
blasint nout; | blasint nout; | ||||
// Recursive kernel | // Recursive kernel | ||||
if (*n != 0) | |||||
RELAPACK_csytrf_rec(&cleanuplo, n, n, &nout, A, ldA, ipiv, cleanWork, n, info); | RELAPACK_csytrf_rec(&cleanuplo, n, n, &nout, A, ldA, ipiv, cleanWork, n, info); | ||||
#if XSYTRF_ALLOW_MALLOC | #if XSYTRF_ALLOW_MALLOC | ||||
@@ -36,7 +36,7 @@ void RELAPACK_csytrf_rook( | |||||
*info = -2; | *info = -2; | ||||
else if (*ldA < MAX(1, *n)) | else if (*ldA < MAX(1, *n)) | ||||
*info = -4; | *info = -4; | ||||
else if (*lWork < minlWork && *lWork != -1) | |||||
else if ((*lWork < 1 || *lWork < minlWork) && *lWork != -1) | |||||
*info = -7; | *info = -7; | ||||
else if (*lWork == -1) { | else if (*lWork == -1) { | ||||
// Work size query | // Work size query | ||||
@@ -56,7 +56,7 @@ void RELAPACK_csytrf_rook( | |||||
if (*info) { | if (*info) { | ||||
const blasint minfo = -*info; | const blasint minfo = -*info; | ||||
LAPACK(xerbla)("CSYTRF", &minfo, strlen("CSYTRF")); | |||||
LAPACK(xerbla)("CSYTRF_ROOK", &minfo, strlen("CSYTRF_ROOK")); | |||||
return; | return; | ||||
} | } | ||||
@@ -68,6 +68,13 @@ void RELAPACK_ctgsyl( | |||||
return; | return; | ||||
} | } | ||||
if ( *m == 0 || *n == 0) { | |||||
*scale = 1.; | |||||
if (notran && (*ijob != 0)) | |||||
*dif = 0.; | |||||
return; | |||||
} | |||||
// Clean char * arguments | // Clean char * arguments | ||||
const char cleantrans = notran ? 'N' : 'C'; | const char cleantrans = notran ? 'N' : 'C'; | ||||
@@ -47,6 +47,11 @@ void RELAPACK_ctrsyl( | |||||
return; | return; | ||||
} | } | ||||
if (*m == 0 || *n == 0) { | |||||
*scale = 1.; | |||||
return; | |||||
} | |||||
// Clean char * arguments | // Clean char * arguments | ||||
const char cleantranA = notransA ? 'N' : 'C'; | const char cleantranA = notransA ? 'N' : 'C'; | ||||
const char cleantranB = notransB ? 'N' : 'C'; | const char cleantranB = notransB ? 'N' : 'C'; | ||||
@@ -36,6 +36,8 @@ void RELAPACK_ctrtri( | |||||
return; | return; | ||||
} | } | ||||
if (*n == 0) return; | |||||
// Clean char * arguments | // Clean char * arguments | ||||
const char cleanuplo = lower ? 'L' : 'U'; | const char cleanuplo = lower ? 'L' : 'U'; | ||||
const char cleandiag = nounit ? 'N' : 'U'; | const char cleandiag = nounit ? 'N' : 'U'; | ||||