@@ -793,7 +793,8 @@ Base.@constprop :aggressive function syrk_wrapper!(C::StridedMatrix{T}, tA::Abst
793793 if T <: Union{Real,Complex} && (iszero (β) || issymmetric (C))
794794 return copytri! (generic_syrk! (C, A, false , aat, α, β), ' U' )
795795 end
796- return _generic_matmatmul! (C, wrap (A, tA), wrap (B, tB), α, β)
796+ tAt = aat ? ' T' : ' N'
797+ return _generic_matmatmul! (C, wrap (A, tA), wrap (A, tAt), α, β)
797798end
798799# legacy method
799800syrk_wrapper! (C:: StridedMatrix{T} , tA:: AbstractChar , A:: StridedVecOrMat{T} , _add:: MulAddMul = MulAddMul ()) where {T<: BlasFloat } =
@@ -838,11 +839,11 @@ Base.@constprop :aggressive function herk_wrapper!(C::StridedMatrix{T}, tA::Abst
838839
839840 tA_uc = uppercase (tA) # potentially strip a WrapperChar
840841 aat = (tA_uc == ' N' )
841-
842842 if isreal (α) && isreal (β) && (iszero (β) || ishermitian (C))
843843 return copytri! (generic_syrk! (C, A, true , aat, α, β), ' U' , true )
844844 end
845- return _generic_matmatmul! (C, wrap (A, tA), wrap (B, tB), α, β)
845+ tAt = aat ? ' C' : ' N'
846+ return _generic_matmatmul! (C, wrap (A, tA), wrap (A, tAt), α, β)
846847end
847848# legacy method
848849herk_wrapper! (C:: Union{StridedMatrix{T}, StridedMatrix{Complex{T}}} , tA:: AbstractChar , A:: Union{StridedVecOrMat{T}, StridedVecOrMat{Complex{T}}} ,
@@ -877,6 +878,7 @@ Base.@constprop :aggressive function gemm_wrapper!(C::StridedVecOrMat{T}, tA::Ab
877878 mB, nB = lapack_size (tB, B)
878879
879880 matmul_size_check (size (C), (mA, nA), (mB, nB))
881+ matmul2x2or3x3_nonzeroalpha! (C, tA, tB, A, B, α, β) && return C
880882
881883 if C === A || B === C
882884 throw (ArgumentError (" output matrix must not be aliased with input matrix" ))
0 commit comments