@@ -19,23 +19,23 @@ function lu!(A::AbstractMatrix{T}, ipiv::AbstractVector{<:Integer},
19
19
# the performance is not sensitive wrt blocksize, and 16 is a good default
20
20
blocksize:: Integer = 16 ,
21
21
threshold:: Integer = pick_threshold ()) where T
22
- info = Ref ( zero (BlasInt) )
22
+ info = zero (BlasInt)
23
23
m, n = size (A)
24
24
mnmin = min (m, n)
25
25
if A isa StridedArray && mnmin > threshold
26
- reckernel! (A, pivot, m, mnmin, ipiv, info, blocksize)
26
+ info = reckernel! (A, pivot, m, mnmin, ipiv, info, blocksize)
27
27
if m < n # fat matrix
28
28
# [AL AR]
29
29
AL = @view A[:, 1 : m]
30
30
AR = @view A[:, m+ 1 : n]
31
31
apply_permutation! (ipiv, AR)
32
32
ldiv! (UnitLowerTriangular (AL), AR)
33
33
end
34
- else # generic fallback
35
- _generic_lufact! (A, pivot, ipiv, info)
34
+ else # generic fallback
35
+ info = _generic_lufact! (A, pivot, ipiv, info)
36
36
end
37
- check && checknonsingular (info[] )
38
- LU {T, typeof(A)} (A, ipiv, info[] )
37
+ check && checknonsingular (info)
38
+ LU {T, typeof(A)} (A, ipiv, info)
39
39
end
40
40
41
41
function nsplit (:: Type{T} , n) where T
@@ -57,11 +57,11 @@ Base.@propagate_inbounds function apply_permutation!(P, A)
57
57
nothing
58
58
end
59
59
60
- function reckernel! (A:: AbstractMatrix{T} , pivot:: Val{Pivot} , m, n, ipiv, info, blocksize):: Nothing where {T,Pivot}
60
+ function reckernel! (A:: AbstractMatrix{T} , pivot:: Val{Pivot} , m, n, ipiv, info, blocksize):: BlasInt where {T,Pivot}
61
61
@inbounds begin
62
62
if n <= max (blocksize, 1 )
63
- _generic_lufact! (A, pivot, ipiv, info)
64
- return nothing
63
+ info = _generic_lufact! (A, pivot, ipiv, info)
64
+ return info
65
65
end
66
66
n1 = nsplit (T, n)
67
67
n2 = n - n1
@@ -95,7 +95,7 @@ function reckernel!(A::AbstractMatrix{T}, pivot::Val{Pivot}, m, n, ipiv, info, b
95
95
# [ A11 ] [ L11 ]
96
96
# P [ ] = [ ] U11
97
97
# [ A21 ] [ L21 ]
98
- reckernel! (AL, pivot, m, n1, P1, info, blocksize)
98
+ info = reckernel! (AL, pivot, m, n1, P1, info, blocksize)
99
99
# [ A12 ] [ P1 ] [ A12 ]
100
100
# [ ] <- [ ] [ ]
101
101
# [ A22 ] [ 0 ] [ A22 ]
@@ -108,17 +108,17 @@ function reckernel!(A::AbstractMatrix{T}, pivot::Val{Pivot}, m, n, ipiv, info, b
108
108
# mul!(A22, A21, A12, -one(T), one(T))
109
109
schur_complement! (A22, A21, A12)
110
110
# record info
111
- previnfo = info[]
111
+ previnfo = info
112
112
# P2 A22 = L22 U22
113
- reckernel! (A22, pivot, m2, n2, P2, info, blocksize)
113
+ info = reckernel! (A22, pivot, m2, n2, P2, info, blocksize)
114
114
# A21 <- P2 A21
115
115
Pivot && apply_permutation! (P2, A21)
116
116
117
- info[] != previnfo && (info[] += n1)
117
+ info != previnfo && (info += n1)
118
118
@avx for i in 1 : n2
119
119
P2[i] += n1
120
120
end
121
- return nothing
121
+ return info
122
122
end # inbounds
123
123
end
124
124
@@ -168,8 +168,8 @@ function _generic_lufact!(A, ::Val{Pivot}, ipiv, info) where Pivot
168
168
@avx for i = k+ 1 : m
169
169
A[i,k] *= Akkinv
170
170
end
171
- elseif info[] == 0
172
- info[] = k
171
+ elseif info == 0
172
+ info = k
173
173
end
174
174
# Update the rest
175
175
@avx for j = k+ 1 : n
@@ -179,5 +179,5 @@ function _generic_lufact!(A, ::Val{Pivot}, ipiv, info) where Pivot
179
179
end
180
180
end
181
181
end
182
- return nothing
182
+ return info
183
183
end
0 commit comments