Skip to content

Commit

Permalink
Avoid introducing local variable (and GC frame store) when the inline…
Browse files Browse the repository at this point in the history
…r is

confused about the return point.
  • Loading branch information
yuyichao committed Oct 5, 2015
1 parent 02748d1 commit 2d39883
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion base/array.jl
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,11 @@ end
setindex!{T}(A::Array{T}, x, i1::Real) = arrayset(A, convert(T,x)::T, to_index(i1))
setindex!{T}(A::Array{T}, x, i1::Real, i2::Real, I::Real...) = arrayset(A, convert(T,x)::T, to_index(i1), to_index(i2), to_indexes(I...)...)

unsafe_setindex!{T}(A::Array{T}, x, i1::Real, I::Real...) = @inbounds return arrayset(A, convert(T,x)::T, to_index(i1), to_indexes(I...)...)
# Type inference is confused by `@inbounds return ...` and introduces a
# local variable for the Array which disables SIMD since we don't have a
# TBAA for the GC frame yet.
unsafe_setindex!{T}(A::Array{T}, x, i1::Real, I::Real...) =
(@inbounds arrayset(A, convert(T,x)::T, to_index(i1), to_indexes(I...)...); A)

# These are redundant with the abstract fallbacks but needed for bootstrap
function setindex!(A::Array, x, I::AbstractVector{Int})
Expand Down

0 comments on commit 2d39883

Please sign in to comment.