float *A, const blasint *ldA, blasint *ipiv,
blasint *info
) {
-
// Check arguments
*info = 0;
if (*m < 0)
LAPACK(xerbla)("SGETRF", &minfo, strlen("SGETRF"));
return;
}
+
+ if (*m == 0 || *n == 0) return;
+
const blasint sn = MIN(*m, *n);
RELAPACK_sgetrf_rec(m, &sn, A, ldA, ipiv, info);
if (*m < *n) {
// Constants
const float ONE[] = { 1. };
- const blasint iONE[] = { 1. };
+ const blasint iONE[] = { 1 };
// Splitting
const blasint rn = *n - *m;
float *A, const blasint *ldA, blasint *ipiv,
blasint *info
) {
- if (*n <= MAX(CROSSOVER_SGETRF, 1)) {
+
+ if (*m == 0 || *n == 0) return;
+
+ if ( *n <= MAX(CROSSOVER_SGETRF, 1)) {
// Unblocked
- LAPACK(sgetf2)(m, n, A, ldA, ipiv, info);
+ LAPACK(sgetrf2)(m, n, A, ldA, ipiv, info);
return;
}
// recursion(A_L, ipiv_T)
RELAPACK_sgetrf_rec(m, &n1, A_L, ldA, ipiv_T, info);
+ if (*info)
+ return;
// apply pivots to A_R
LAPACK(slaswp)(&n2, A_R, ldA, iONE, &n1, ipiv_T, iONE);
*info = -2;
else if (*ldA < MAX(1, *n))
*info = -4;
- else if (*lWork < minlWork && *lWork != -1)
+ else if ((*lWork <1 || *lWork < minlWork) && *lWork != -1)
*info = -7;
else if (*lWork == -1) {
// Work size query
blasint nout;
// Recursive kernel
+if (*n != 0)
RELAPACK_ssytrf_rec(&cleanuplo, n, n, &nout, A, ldA, ipiv, cleanWork, n, info);
#if XSYTRF_ALLOW_MALLOC
*info = -2;
else if (*ldA < MAX(1, *n))
*info = -4;
- else if (*lWork < minlWork && *lWork != -1)
+ else if ((*lWork < 1 ||*lWork < minlWork) && *lWork != -1)
*info = -7;
else if (*lWork == -1) {
// Work size query
if (*info) {
const blasint minfo = -*info;
- LAPACK(xerbla)("SSYTRF", &minfo, strlen("SSYTRF"));
+ LAPACK(xerbla)("SSYTRF_ROOK", &minfo, strlen("SSYTRF_ROOK"));
return;
}
blasint nout;
// Recursive kernel
+if (*n != 0)
RELAPACK_ssytrf_rook_rec(&cleanuplo, n, n, &nout, A, ldA, ipiv, cleanWork, n, info);
#if XSYTRF_ALLOW_MALLOC