@@ -442,16 +442,6 @@ function __muldiag_nonzeroalpha!(out, D::Diagonal, B::UpperOrLowerTriangular, _a
442442 end
443443 out
444444end
445- function __muldiag! (out, D:: Diagonal , B, _add:: MulAddMul )
446- require_one_based_indexing (out, B)
447- alpha, beta = _add. alpha, _add. beta
448- if iszero (alpha)
449- _rmul_or_fill! (out, beta)
450- else
451- __muldiag_nonzeroalpha! (out, D, B, _add)
452- end
453- return out
454- end
455445
456446@inline function __muldiag_nonzeroalpha! (out, A, D:: Diagonal , _add:: MulAddMul{ais1,bis0} ) where {ais1,bis0}
457447 beta = _add. beta
@@ -495,16 +485,6 @@ function __muldiag_nonzeroalpha!(out, A::UpperOrLowerTriangular, D::Diagonal, _a
495485 end
496486 out
497487end
498- function __muldiag! (out, A, D:: Diagonal , _add:: MulAddMul )
499- require_one_based_indexing (out, A)
500- alpha, beta = _add. alpha, _add. beta
501- if iszero (alpha)
502- _rmul_or_fill! (out, beta)
503- else
504- __muldiag_nonzeroalpha! (out, A, D, _add)
505- end
506- return out
507- end
508488
509489@inline function __muldiag_nonzeroalpha! (out:: Diagonal , D1:: Diagonal , D2:: Diagonal , _add:: MulAddMul )
510490 d1 = D1. diag
515495 end
516496 out
517497end
518- function __muldiag! (out:: Diagonal , D1:: Diagonal , D2:: Diagonal , _add:: MulAddMul )
519- alpha, beta = _add. alpha, _add. beta
520- if iszero (alpha)
521- _rmul_or_fill! (out. diag, beta)
522- else
523- __muldiag_nonzeroalpha! (out, D1, D2, _add)
524- end
525- return out
526- end
498+
527499@inline function __muldiag_nonzeroalpha! (out, D1:: Diagonal , D2:: Diagonal , _add:: MulAddMul )
528500 d1 = D1. diag
529501 d2 = D2. diag
@@ -532,11 +504,26 @@ end
532504 end
533505 out
534506end
507+
508+ # muldiag mainly handles the zero-alpha case, so that we need only
509+ # specialize the non-trivial case
510+ function __muldiag! (out, A, B, _add:: MulAddMul )
511+ require_one_based_indexing (out, A, B)
512+ alpha, beta = _add. alpha, _add. beta
513+ if iszero (alpha)
514+ _rmul_or_fill! (out, beta)
515+ else
516+ __muldiag_nonzeroalpha! (out, A, B, _add)
517+ end
518+ return out
519+ end
520+
535521function __muldiag! (out, D1:: Diagonal , D2:: Diagonal , _add:: MulAddMul{ais1} ) where {ais1}
536522 require_one_based_indexing (out)
537523 alpha, beta = _add. alpha, _add. beta
538524 _rmul_or_fill! (out, beta)
539525 if ! iszero (alpha)
526+ # we ony update the diagonal
540527 _add_bis1 = MulAddMul {ais1,false,typeof(alpha),Bool} (alpha,true )
541528 __muldiag_nonzeroalpha! (out, D1, D2, _add_bis1)
542529 end
0 commit comments