diff --git a/src/matmul.jl b/src/matmul.jl
index 2b2f7d81..5c92d24c 100644
--- a/src/matmul.jl
+++ b/src/matmul.jl
@@ -1063,20 +1063,18 @@ function __generic_matvecmul!(::typeof(identity), C::AbstractVector, A::Abstract
                             alpha::Number, beta::Number)
     Astride = size(A, 1)
     @inbounds begin
-        for i = eachindex(C)
-            if !iszero(beta)
-                C[i] *= beta
-            elseif length(B) == 0
+        for i in eachindex(C)
+            if length(B) == 0
                 C[i] = zero(eltype(C))
             else
-                C[i] = zero(A[i]*B[1] + A[i]*B[1])
+                @stable_muladdmul _modify!(MulAddMul(alpha, beta), A[i]*B[1], C, i)
             end
         end
-        for k = eachindex(B)
+        for k in @view eachindex(B)[2:end]
             aoffs = (k-1)*Astride
-            b = @stable_muladdmul MulAddMul(alpha,false)(B[k])
-            for i = eachindex(C)
-                C[i] += A[aoffs + i] * b
+            bα = @stable_muladdmul MulAddMul(alpha,false)(B[k])
+            for i in eachindex(C)
+                C[i] += A[aoffs + i] * bα
             end
         end
     end