Skip to content

Commit b5fb14e

Browse files
committed
Reduce allocations
1 parent 788cbb7 commit b5fb14e

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

src/matmul.jl

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -411,15 +411,15 @@ lmul!(A, B)
411411
_vec_or_mat_str(s::Tuple{Any}) = "vector"
412412
_vec_or_mat_str(s::Tuple{Any,Any}) = "matrix"
413413
@noinline function matmul_size_check(sizeA::Tuple{Integer,Vararg{Integer}}, sizeB::Tuple{Integer,Vararg{Integer}})
414-
strA = _vec_or_mat_str(sizeA)
415-
strB = _vec_or_mat_str(sizeB)
416414
szA2 = get(sizeA, 2, 1)
417-
B_size_len = length(sizeB) == 1 ? sizeB[1] : sizeB
418-
size_or_len_str_B = B_size_len isa Integer ? "length" : "size"
419-
dim_or_len_str_B = B_size_len isa Integer ? "length" : "first dimension"
420-
pos_str_A = (length(sizeA) == length(sizeB) ? "first " : "")*strA
421-
pos_str_B = (length(sizeA) == length(sizeB) ? "second " : "")*strB
422415
if szA2 != sizeB[1]
416+
strA = _vec_or_mat_str(sizeA)
417+
strB = _vec_or_mat_str(sizeB)
418+
B_size_len = length(sizeB) == 1 ? sizeB[1] : sizeB
419+
size_or_len_str_B = B_size_len isa Integer ? "length" : "size"
420+
dim_or_len_str_B = B_size_len isa Integer ? "length" : "first dimension"
421+
pos_str_A = LazyString(length(sizeA) == length(sizeB) ? "first " : "", strA)
422+
pos_str_B = LazyString(length(sizeA) == length(sizeB) ? "second " : "", strB)
423423
throw(DimensionMismatch(
424424
LazyString(
425425
lazy"incompatible dimensions for matrix multiplication: ",
@@ -432,13 +432,13 @@ _vec_or_mat_str(s::Tuple{Any,Any}) = "matrix"
432432
return nothing
433433
end
434434
@noinline function matmul_size_check(sizeC::Tuple{Integer,Vararg{Integer}}, sizeA::Tuple{Integer,Vararg{Integer}}, sizeB::Tuple{Integer,Vararg{Integer}})
435-
strA = _vec_or_mat_str(sizeA)
436-
strB = _vec_or_mat_str(sizeB)
437-
strC = _vec_or_mat_str(sizeC)
435+
matmul_size_check(sizeA, sizeB)
438436
szB2 = get(sizeB, 2, 1)
439437
szC2 = get(sizeC, 2, 1)
440-
matmul_size_check(sizeA, sizeB)
441438
if sizeC[1] != sizeA[1] || szC2 != szB2
439+
strA = _vec_or_mat_str(sizeA)
440+
strB = _vec_or_mat_str(sizeB)
441+
strC = _vec_or_mat_str(sizeC)
442442
C_size_len = length(sizeC) == 1 ? sizeC[1] : sizeC
443443
size_or_len_str_C = C_size_len isa Integer ? "length" : "size"
444444
B_size_len = length(sizeB) == 1 ? sizeB[1] : sizeB

0 commit comments

Comments
 (0)