Skip to content

Commit 130264c

Browse files
committed
Respect strong zero in generic matvec-mul
1 parent 6c92d28 commit 130264c

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
@@ -1072,11 +1072,13 @@ function __generic_matvecmul!(::typeof(identity), C::AbstractVector, A::Abstract
10721072
C[i] = zero(A[i]*B[1] + A[i]*B[1])
10731073
end
10741074
end
1075-
for k = eachindex(B)
1076-
aoffs = (k-1)*Astride
1077-
b = @stable_muladdmul MulAddMul(alpha,false)(B[k])
1078-
for i = eachindex(C)
1079-
C[i] += A[aoffs + i] * b
1075+
if !iszero(alpha)
1076+
for k = eachindex(B)
1077+
aoffs = (k-1)*Astride
1078+
b = @stable_muladdmul MulAddMul(alpha,false)(B[k])
1079+
for i = eachindex(C)
1080+
C[i] += A[aoffs + i] * b
1081+
end
10801082
end
10811083
end
10821084
end

test/matmul.jl

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

982982
@testset "strong zero" begin
983-
@testset for α in Any[false, 0.0, 0], n in 1:4
984-
C = ones(n, n)
985-
A = fill!(zeros(n, n), NaN)
986-
B = ones(n, n)
983+
@testset for α in Any[false, 0.0, 0], n in 1:4, T in (Float16, Float64)
984+
C = ones(T, n)
985+
A = fill(T(NaN), n, n)
986+
B = ones(T, n)
987987
@test mul!(copy(C), A, B, α, 1.0) == C
988+
C = ones(T, n, n)
989+
B = ones(T, n, n)
990+
@test mul!(copy(C), A, B, α, 1.0) == C
991+
end
992+
@testset for α in Any[false, 0.0, 0], β in Any[false, 0.0, 0], n in 1:4, T in (Float16, Float64)
993+
C = fill(T(NaN), n)
994+
A = fill(T(NaN), n, n)
995+
B = fill(T(NaN), n)
996+
@test iszero(mul!(copy(C), A, B, α, β))
997+
C = fill(T(NaN), n, n)
998+
B = fill(T(NaN), n, n)
999+
@test iszero(mul!(copy(C), A, B, α, β))
9881000
end
9891001
end
9901002

0 commit comments

Comments
 (0)