@@ -269,19 +269,20 @@ function _mapreducedim!(f, op, R::AbstractArray, A::AbstractArrayOrBroadcasted)
269
269
if reducedim1 (R, A)
270
270
# keep the accumulator as a local variable when reducing along the first dimension
271
271
i1 = first (axes1 (R))
272
- @inbounds for IA in CartesianIndices (indsAt)
272
+ for IA in CartesianIndices (indsAt)
273
273
IR = Broadcast. newindex (IA, keep, Idefault)
274
- r = R[i1,IR]
274
+ @inbounds r = R[i1,IR]
275
275
@simd for i in axes (A, 1 )
276
- r = op (r, f (A[i, IA]))
276
+ r = op (r, f (@inbounds ( A[i, IA]) ))
277
277
end
278
- R[i1,IR] = r
278
+ @inbounds R[i1,IR] = r
279
279
end
280
280
else
281
- @inbounds for IA in CartesianIndices (indsAt)
281
+ for IA in CartesianIndices (indsAt)
282
282
IR = Broadcast. newindex (IA, keep, Idefault)
283
283
@simd for i in axes (A, 1 )
284
- R[i,IR] = op (R[i,IR], f (A[i,IA]))
284
+ v = op (@inbounds (R[i,IR]), f (@inbounds (A[i,IA])))
285
+ @inbounds R[i,IR] = v
285
286
end
286
287
end
287
288
end
@@ -1025,33 +1026,33 @@ function findminmax!(f, op, Rval, Rind, A::AbstractArray{T,N}) where {T,N}
1025
1026
zi = zero (eltype (ks))
1026
1027
if reducedim1 (Rval, A)
1027
1028
i1 = first (axes1 (Rval))
1028
- @inbounds for IA in CartesianIndices (indsAt)
1029
+ for IA in CartesianIndices (indsAt)
1029
1030
IR = Broadcast. newindex (IA, keep, Idefault)
1030
- tmpRv = Rval[i1,IR]
1031
- tmpRi = Rind[i1,IR]
1031
+ @inbounds tmpRv = Rval[i1,IR]
1032
+ @inbounds tmpRi = Rind[i1,IR]
1032
1033
for i in axes (A,1 )
1033
1034
k, kss = y:: Tuple
1034
- tmpAv = f (A[i,IA])
1035
+ tmpAv = f (@inbounds ( A[i,IA]) )
1035
1036
if tmpRi == zi || op (tmpRv, tmpAv)
1036
1037
tmpRv = tmpAv
1037
1038
tmpRi = k
1038
1039
end
1039
1040
y = iterate (ks, kss)
1040
1041
end
1041
- Rval[i1,IR] = tmpRv
1042
- Rind[i1,IR] = tmpRi
1042
+ @inbounds Rval[i1,IR] = tmpRv
1043
+ @inbounds Rind[i1,IR] = tmpRi
1043
1044
end
1044
1045
else
1045
- @inbounds for IA in CartesianIndices (indsAt)
1046
+ for IA in CartesianIndices (indsAt)
1046
1047
IR = Broadcast. newindex (IA, keep, Idefault)
1047
1048
for i in axes (A, 1 )
1048
1049
k, kss = y:: Tuple
1049
- tmpAv = f (A[i,IA])
1050
- tmpRv = Rval[i,IR]
1051
- tmpRi = Rind[i,IR]
1050
+ tmpAv = f (@inbounds ( A[i,IA]) )
1051
+ @inbounds tmpRv = Rval[i,IR]
1052
+ @inbounds tmpRi = Rind[i,IR]
1052
1053
if tmpRi == zi || op (tmpRv, tmpAv)
1053
- Rval[i,IR] = tmpAv
1054
- Rind[i,IR] = k
1054
+ @inbounds Rval[i,IR] = tmpAv
1055
+ @inbounds Rind[i,IR] = k
1055
1056
end
1056
1057
y = iterate (ks, kss)
1057
1058
end
0 commit comments