@@ -27,7 +27,7 @@ void RELAPACK_sgbtrf(
27
27
* info = -3 ;
28
28
else if (* ku < 0 )
29
29
* info = -4 ;
30
- else if (* ldAb < 2 * * kl + * ku + 1 )
30
+ else if (* ldAb < 2 * * kl + * ku + 1 )
31
31
* info = -6 ;
32
32
if (* info ) {
33
33
const blasint minfo = - * info ;
@@ -55,15 +55,16 @@ void RELAPACK_sgbtrf(
55
55
56
56
// Allocate work space
57
57
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 ) ;
62
62
float * Workl = malloc (mWorkl * nWorkl * sizeof (float ));
63
63
float * Worku = malloc (mWorku * nWorku * sizeof (float ));
64
64
LAPACK (slaset )("L" , & mWorkl , & nWorkl , ZERO , ZERO , Workl , & mWorkl );
65
65
LAPACK (slaset )("U" , & mWorku , & nWorku , ZERO , ZERO , Worku , & mWorku );
66
66
67
+
67
68
// Recursive kernel
68
69
RELAPACK_sgbtrf_rec (m , n , kl , ku , Ab , ldAb , ipiv , Workl , & mWorkl , Worku , & mWorku , info );
69
70
@@ -81,6 +82,7 @@ static void RELAPACK_sgbtrf_rec(
81
82
blasint * info
82
83
) {
83
84
85
+
84
86
if (* n <= MAX (CROSSOVER_SGBTRF , 1 )) {
85
87
// Unblocked
86
88
LAPACK (sgbtf2 )(m , n , kl , ku , Ab , ldAb , ipiv , info );
@@ -127,7 +129,7 @@ static void RELAPACK_sgbtrf_rec(
127
129
float * const A_BR = A + * ldA * n1 + m1 ;
128
130
129
131
// ipiv_T
130
- // ipiv_B
132
+ // ipiv_B
131
133
blasint * const ipiv_T = ipiv ;
132
134
blasint * const ipiv_B = ipiv + n1 ;
133
135
@@ -155,6 +157,7 @@ static void RELAPACK_sgbtrf_rec(
155
157
float * const A_BRbl = A_BR + m21 ;
156
158
float * const A_BRbr = A_BR + * ldA * n21 + m21 ;
157
159
160
+
158
161
// recursion(Ab_L, ipiv_T)
159
162
RELAPACK_sgbtrf_rec (m , & n1 , kl , ku , Ab_L , ldAb , ipiv_T , Workl , ldWorkl , Worku , ldWorku , info );
160
163
@@ -216,8 +219,11 @@ static void RELAPACK_sgbtrf_rec(
216
219
}
217
220
}
218
221
222
+
219
223
// 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 );
221
227
if (* info )
222
228
* info += n1 ;
223
229
// shift pivots
0 commit comments