diff --git a/stdlib/LinearAlgebra/src/generic.jl b/stdlib/LinearAlgebra/src/generic.jl index fd5da53c9ba87..d1f7eccc8162f 100644 --- a/stdlib/LinearAlgebra/src/generic.jl +++ b/stdlib/LinearAlgebra/src/generic.jl @@ -25,8 +25,21 @@ struct MulAddMul{ais1, bis0, TA, TB} beta::TB end -MulAddMul(alpha::TA, beta::TB) where {TA, TB} = - MulAddMul{isone(alpha), iszero(beta), TA, TB}(alpha, beta) +@inline function MulAddMul(alpha::TA, beta::TB) where {TA,TB} + if isone(alpha) + if iszero(beta) + return MulAddMul{true,true,TA,TB}(alpha, beta) + else + return MulAddMul{true,false,TA,TB}(alpha, beta) + end + else + if iszero(beta) + return MulAddMul{false,true,TA,TB}(alpha, beta) + else + return MulAddMul{false,false,TA,TB}(alpha, beta) + end + end +end MulAddMul() = MulAddMul(true, false)