@@ -27,7 +27,7 @@ void RELAPACK_sgbtrf(
2727 * info = -3 ;
2828 else if (* ku < 0 )
2929 * info = -4 ;
30- else if (* ldAb < 2 * * kl + * ku + 1 )
30+ else if (* ldAb < 2 * * kl + * ku + 1 )
3131 * info = -6 ;
3232 if (* info ) {
3333 const blasint minfo = - * info ;
@@ -55,15 +55,16 @@ void RELAPACK_sgbtrf(
5555
5656 // Allocate work space
5757 const blasint n1 = SREC_SPLIT (* n );
58- const blasint mWorkl = ( kv > n1 ) ? MAX (1 , * m - * kl ) : kv ;
59- const blasint nWorkl = ( kv > n1 ) ? n1 : kv ;
60- const blasint mWorku = ( * kl > n1 ) ? n1 : * kl ;
61- const blasint nWorku = ( * kl > n1 ) ? MAX (0 , * n - * kl ) : * kl ;
58+ const blasint mWorkl = abs ( ( kv > n1 ) ? MAX (1 , * m - * kl ) : kv ) ;
59+ const blasint nWorkl = abs ( ( kv > n1 ) ? n1 : kv ) ;
60+ const blasint mWorku = abs ( ( * kl > n1 ) ? n1 : * kl ) ;
61+ const blasint nWorku = abs ( ( * kl > n1 ) ? MAX (0 , * n - * kl ) : * kl ) ;
6262 float * Workl = malloc (mWorkl * nWorkl * sizeof (float ));
6363 float * Worku = malloc (mWorku * nWorku * sizeof (float ));
6464 LAPACK (slaset )("L" , & mWorkl , & nWorkl , ZERO , ZERO , Workl , & mWorkl );
6565 LAPACK (slaset )("U" , & mWorku , & nWorku , ZERO , ZERO , Worku , & mWorku );
6666
67+
6768 // Recursive kernel
6869 RELAPACK_sgbtrf_rec (m , n , kl , ku , Ab , ldAb , ipiv , Workl , & mWorkl , Worku , & mWorku , info );
6970
@@ -81,6 +82,7 @@ static void RELAPACK_sgbtrf_rec(
8182 blasint * info
8283) {
8384
85+
8486 if (* n <= MAX (CROSSOVER_SGBTRF , 1 )) {
8587 // Unblocked
8688 LAPACK (sgbtf2 )(m , n , kl , ku , Ab , ldAb , ipiv , info );
@@ -127,7 +129,7 @@ static void RELAPACK_sgbtrf_rec(
127129 float * const A_BR = A + * ldA * n1 + m1 ;
128130
129131 // ipiv_T
130- // ipiv_B
132+ // ipiv_B
131133 blasint * const ipiv_T = ipiv ;
132134 blasint * const ipiv_B = ipiv + n1 ;
133135
@@ -155,6 +157,7 @@ static void RELAPACK_sgbtrf_rec(
155157 float * const A_BRbl = A_BR + m21 ;
156158 float * const A_BRbr = A_BR + * ldA * n21 + m21 ;
157159
160+
158161 // recursion(Ab_L, ipiv_T)
159162 RELAPACK_sgbtrf_rec (m , & n1 , kl , ku , Ab_L , ldAb , ipiv_T , Workl , ldWorkl , Worku , ldWorku , info );
160163
@@ -216,8 +219,11 @@ static void RELAPACK_sgbtrf_rec(
216219 }
217220 }
218221
222+
219223 // recursion(Ab_BR, ipiv_B)
220- RELAPACK_sgbtrf_rec (& m2 , & n2 , kl , ku , Ab_BR , ldAb , ipiv_B , Workl , ldWorkl , Worku , ldWorku , info );
224+ //cause of infinite recursion here ?
225+ // RELAPACK_sgbtrf_rec(&m2, &n2, kl, ku, Ab_BR, ldAb, ipiv_B, Workl, ldWorkl, Worku, ldWorku, info);
226+ LAPACK (sgbtf2 )(& m2 , & n2 , kl , ku , Ab_BR , ldAb , ipiv_B , info );
221227 if (* info )
222228 * info += n1 ;
223229 // shift pivots
0 commit comments