Skip to content

Commit aca6589

Browse files
committed
Remove info allocation
1 parent cad66ae commit aca6589

File tree

1 file changed

+17
-17
lines changed

1 file changed

+17
-17
lines changed

src/lu.jl

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,23 @@ function lu!(A::AbstractMatrix{T}, ipiv::AbstractVector{<:Integer},
1919
# the performance is not sensitive wrt blocksize, and 16 is a good default
2020
blocksize::Integer=16,
2121
threshold::Integer=pick_threshold()) where T
22-
info = Ref(zero(BlasInt))
22+
info = zero(BlasInt)
2323
m, n = size(A)
2424
mnmin = min(m, n)
2525
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)
2727
if m < n # fat matrix
2828
# [AL AR]
2929
AL = @view A[:, 1:m]
3030
AR = @view A[:, m+1:n]
3131
apply_permutation!(ipiv, AR)
3232
ldiv!(UnitLowerTriangular(AL), AR)
3333
end
34-
else # generic fallback
35-
_generic_lufact!(A, pivot, ipiv, info)
34+
else # generic fallback
35+
info = _generic_lufact!(A, pivot, ipiv, info)
3636
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)
3939
end
4040

4141
function nsplit(::Type{T}, n) where T
@@ -57,11 +57,11 @@ Base.@propagate_inbounds function apply_permutation!(P, A)
5757
nothing
5858
end
5959

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}
6161
@inbounds begin
6262
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
6565
end
6666
n1 = nsplit(T, n)
6767
n2 = n - n1
@@ -95,7 +95,7 @@ function reckernel!(A::AbstractMatrix{T}, pivot::Val{Pivot}, m, n, ipiv, info, b
9595
# [ A11 ] [ L11 ]
9696
# P [ ] = [ ] U11
9797
# [ A21 ] [ L21 ]
98-
reckernel!(AL, pivot, m, n1, P1, info, blocksize)
98+
info = reckernel!(AL, pivot, m, n1, P1, info, blocksize)
9999
# [ A12 ] [ P1 ] [ A12 ]
100100
# [ ] <- [ ] [ ]
101101
# [ A22 ] [ 0 ] [ A22 ]
@@ -108,17 +108,17 @@ function reckernel!(A::AbstractMatrix{T}, pivot::Val{Pivot}, m, n, ipiv, info, b
108108
#mul!(A22, A21, A12, -one(T), one(T))
109109
schur_complement!(A22, A21, A12)
110110
# record info
111-
previnfo = info[]
111+
previnfo = info
112112
# P2 A22 = L22 U22
113-
reckernel!(A22, pivot, m2, n2, P2, info, blocksize)
113+
info = reckernel!(A22, pivot, m2, n2, P2, info, blocksize)
114114
# A21 <- P2 A21
115115
Pivot && apply_permutation!(P2, A21)
116116

117-
info[] != previnfo && (info[] += n1)
117+
info != previnfo && (info += n1)
118118
@avx for i in 1:n2
119119
P2[i] += n1
120120
end
121-
return nothing
121+
return info
122122
end # inbounds
123123
end
124124

@@ -168,8 +168,8 @@ function _generic_lufact!(A, ::Val{Pivot}, ipiv, info) where Pivot
168168
@avx for i = k+1:m
169169
A[i,k] *= Akkinv
170170
end
171-
elseif info[] == 0
172-
info[] = k
171+
elseif info == 0
172+
info = k
173173
end
174174
# Update the rest
175175
@avx for j = k+1:n
@@ -179,5 +179,5 @@ function _generic_lufact!(A, ::Val{Pivot}, ipiv, info) where Pivot
179179
end
180180
end
181181
end
182-
return nothing
182+
return info
183183
end

0 commit comments

Comments
 (0)