Skip to content

Commit 35f45ce

Browse files
committed
Respect strong zero in generic matvec-mul (#1417)
1 parent 984c046 commit 35f45ce

File tree

2 files changed

+23
-9
lines changed

2 files changed

+23
-9
lines changed

src/matmul.jl

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -968,11 +968,13 @@ function __generic_matvecmul!(::typeof(identity), C::AbstractVector, A::Abstract
968968
C[i] = zero(A[i]*B[1] + A[i]*B[1])
969969
end
970970
end
971-
for k = eachindex(B)
972-
aoffs = (k-1)*Astride
973-
b = @stable_muladdmul MulAddMul(alpha,false)(B[k])
974-
for i = eachindex(C)
975-
C[i] += A[aoffs + i] * b
971+
if !iszero(alpha)
972+
for k = eachindex(B)
973+
aoffs = (k-1)*Astride
974+
b = @stable_muladdmul MulAddMul(alpha,false)(B[k])
975+
for i = eachindex(C)
976+
C[i] += A[aoffs + i] * b
977+
end
976978
end
977979
end
978980
end

test/matmul.jl

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -960,11 +960,23 @@ Base.:*(x::Float64, a::A32092) = x * a.x
960960
end
961961

962962
@testset "strong zero" begin
963-
@testset for α in Any[false, 0.0, 0], n in 1:4
964-
C = ones(n, n)
965-
A = fill!(zeros(n, n), NaN)
966-
B = ones(n, n)
963+
@testset for α in Any[false, 0.0, 0], n in 1:4, T in (Float16, Float64)
964+
C = ones(T, n)
965+
A = fill(T(NaN), n, n)
966+
B = ones(T, n)
967967
@test mul!(copy(C), A, B, α, 1.0) == C
968+
C = ones(T, n, n)
969+
B = ones(T, n, n)
970+
@test mul!(copy(C), A, B, α, 1.0) == C
971+
end
972+
@testset for α in Any[false, 0.0, 0], β in Any[false, 0.0, 0], n in 1:4, T in (Float16, Float64)
973+
C = fill(T(NaN), n)
974+
A = fill(T(NaN), n, n)
975+
B = fill(T(NaN), n)
976+
@test iszero(mul!(copy(C), A, B, α, β))
977+
C = fill(T(NaN), n, n)
978+
B = fill(T(NaN), n, n)
979+
@test iszero(mul!(copy(C), A, B, α, β))
968980
end
969981
end
970982

0 commit comments

Comments
 (0)