Skip to content

Commit 76a30fb

Browse files
Andy Ferrisvtjnash
authored andcommitted
remove many unneeded pure annotations
Removing actually may enable inference to get a sharper result, since it is no longer being directed to ignore backedges and correctness assumptions Replaces pure annotations in promotion with inline
1 parent f97d9e8 commit 76a30fb

File tree

5 files changed

+30
-27
lines changed

5 files changed

+30
-27
lines changed

base/inference.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1865,8 +1865,8 @@ function abstract_call(f::ANY, fargs::Union{Tuple{},Vector{Any}}, argtypes::Vect
18651865
t = pure_eval_call(f, argtypes, atype, sv)
18661866
t !== false && return t
18671867

1868-
if istopfunction(tm, f, :promote_type) || istopfunction(tm, f, :typejoin)
1869-
return Type
1868+
if istopfunction(tm, f, :typejoin) || f === return_type
1869+
return Type # don't try to infer these function edges directly -- it won't actually come up with anything useful
18701870
elseif length(argtypes) == 2 && istopfunction(tm, f, :typename)
18711871
return typename_static(argtypes[2])
18721872
end

base/linalg/uniformscaling.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# This file is a part of Julia. License is MIT: https://julialang.org/license
22

33
import Base: copy, ctranspose, getindex, show, transpose, one, zero, inv,
4-
@_pure_meta, hcat, vcat, hvcat
4+
hcat, vcat, hvcat
55
import Base.LinAlg: SingularException
66

77
struct UniformScaling{T<:Number}
@@ -201,7 +201,7 @@ promote_to_arrays(n,k, ::Type{T}, A, B, C) where {T} =
201201
(promote_to_arrays_(n[k], T, A), promote_to_arrays_(n[k+1], T, B), promote_to_arrays_(n[k+2], T, C))
202202
promote_to_arrays(n,k, ::Type{T}, A, B, Cs...) where {T} =
203203
(promote_to_arrays_(n[k], T, A), promote_to_arrays_(n[k+1], T, B), promote_to_arrays(n,k+2, T, Cs...)...)
204-
promote_to_array_type(A::Tuple{Vararg{Union{AbstractVecOrMat,UniformScaling}}}) = (@_pure_meta; Matrix)
204+
promote_to_array_type(A::Tuple{Vararg{Union{AbstractVecOrMat,UniformScaling}}}) = Matrix
205205

206206
for (f,dim,name) in ((:hcat,1,"rows"), (:vcat,2,"cols"))
207207
@eval begin

base/promotion.jl

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -122,14 +122,14 @@ end
122122

123123
## promotion mechanism ##
124124

125-
promote_type() = (@_pure_meta; Bottom)
126-
promote_type(T) = (@_pure_meta; T)
127-
promote_type(T, S, U, V...) = (@_pure_meta; promote_type(T, promote_type(S, U, V...)))
125+
promote_type() = Bottom
126+
promote_type(T) = T
127+
promote_type(T, S, U, V...) = (@_inline_meta; promote_type(T, promote_type(S, U, V...)))
128128

129-
promote_type(::Type{Bottom}, ::Type{Bottom}) = (@_pure_meta; Bottom)
130-
promote_type(::Type{T}, ::Type{T}) where {T} = (@_pure_meta; T)
131-
promote_type(::Type{T}, ::Type{Bottom}) where {T} = (@_pure_meta; T)
132-
promote_type(::Type{Bottom}, ::Type{T}) where {T} = (@_pure_meta; T)
129+
promote_type(::Type{Bottom}, ::Type{Bottom}) = Bottom
130+
promote_type(::Type{T}, ::Type{T}) where {T} = T
131+
promote_type(::Type{T}, ::Type{Bottom}) where {T} = T
132+
promote_type(::Type{Bottom}, ::Type{T}) where {T} = T
133133

134134
"""
135135
promote_type(type1, type2)
@@ -152,7 +152,7 @@ BigFloat
152152
```
153153
"""
154154
function promote_type(::Type{T}, ::Type{S}) where {T,S}
155-
@_pure_meta
155+
@_inline_meta
156156
# Try promote_rule in both orders. Typically only one is defined,
157157
# and there is a fallback returning Bottom below, so the common case is
158158
# promote_type(T, S) =>
@@ -161,26 +161,29 @@ function promote_type(::Type{T}, ::Type{S}) where {T,S}
161161
promote_result(T, S, promote_rule(T,S), promote_rule(S,T))
162162
end
163163

164-
promote_rule(T, S) = (@_pure_meta; Bottom)
164+
promote_rule(::Type{<:Any}, ::Type{<:Any}) = Bottom
165165

166-
promote_result(t,s,T,S) = (@_pure_meta; promote_type(T,S))
166+
promote_result(::Type{<:Any},::Type{<:Any},::Type{T},::Type{S}) where {T,S} = (@_inline_meta; promote_type(T,S))
167167
# If no promote_rule is defined, both directions give Bottom. In that
168168
# case use typejoin on the original types instead.
169-
promote_result(::Type{T},::Type{S},::Type{Bottom},::Type{Bottom}) where {T,S} = (@_pure_meta; typejoin(T, S))
169+
promote_result(::Type{T},::Type{S},::Type{Bottom},::Type{Bottom}) where {T,S} = (@_inline_meta; typejoin(T, S))
170170

171171
promote() = ()
172172
promote(x) = (x,)
173173
function promote(x::T, y::S) where {T,S}
174+
@_inline_meta
174175
(convert(promote_type(T,S),x), convert(promote_type(T,S),y))
175176
end
176-
promote_typeof(x) = (@_pure_meta; typeof(x))
177-
promote_typeof(x, xs...) = (@_pure_meta; promote_type(typeof(x), promote_typeof(xs...)))
177+
promote_typeof(x) = typeof(x)
178+
promote_typeof(x, xs...) = (@_inline_meta; promote_type(typeof(x), promote_typeof(xs...)))
178179
function promote(x, y, z)
180+
@_inline_meta
179181
(convert(promote_typeof(x,y,z), x),
180182
convert(promote_typeof(x,y,z), y),
181183
convert(promote_typeof(x,y,z), z))
182184
end
183185
function promote(x, y, zs...)
186+
@_inline_meta
184187
(convert(promote_typeof(x,y,zs...), x),
185188
convert(promote_typeof(x,y,zs...), y),
186189
convert(Tuple{Vararg{promote_typeof(x,y,zs...)}}, zs)...)
@@ -195,16 +198,16 @@ end
195198
# happens, and +(promote(x,y)...) is called again, causing a stack
196199
# overflow.
197200
function promote_result(::Type{T},::Type{S},::Type{Bottom},::Type{Bottom}) where {T<:Number,S<:Number}
198-
@_pure_meta
201+
@_inline_meta
199202
promote_to_supertype(T, S, typejoin(T,S))
200203
end
201204

202205
# promote numeric types T and S to typejoin(T,S) if T<:S or S<:T
203206
# for example this makes promote_type(Integer,Real) == Real without
204207
# promoting arbitrary pairs of numeric types to Number.
205-
promote_to_supertype(::Type{T}, ::Type{T}, ::Type{T}) where {T<:Number} = (@_pure_meta; T)
206-
promote_to_supertype(::Type{T}, ::Type{S}, ::Type{T}) where {T<:Number,S<:Number} = (@_pure_meta; T)
207-
promote_to_supertype(::Type{T}, ::Type{S}, ::Type{S}) where {T<:Number,S<:Number} = (@_pure_meta; S)
208+
promote_to_supertype(::Type{T}, ::Type{T}, ::Type{T}) where {T<:Number} = (@_inline_meta; T)
209+
promote_to_supertype(::Type{T}, ::Type{S}, ::Type{T}) where {T<:Number,S<:Number} = (@_inline_meta; T)
210+
promote_to_supertype(::Type{T}, ::Type{S}, ::Type{S}) where {T<:Number,S<:Number} = (@_inline_meta; S)
208211
promote_to_supertype(::Type{T}, ::Type{S}, ::Type) where {T<:Number,S<:Number} =
209212
error("no promotion exists for ", T, " and ", S)
210213

@@ -304,15 +307,15 @@ minmax(x::Real, y::Real) = minmax(promote(x, y)...)
304307
# "Promotion" that takes a function into account and tries to preserve
305308
# non-concrete types. These are meant to be used mainly by elementwise
306309
# operations, so it is advised against overriding them
307-
_default_type(T::Type) = (@_pure_meta; T)
310+
_default_type(T::Type) = (@_inline_meta; T)
308311

309312
if isdefined(Core, :Inference)
310313
const _return_type = Core.Inference.return_type
311314
else
312315
_return_type(f::ANY, t::ANY) = Any
313316
end
314317

315-
promote_op(::Any...) = (@_pure_meta; Any)
318+
promote_op(::Any...) = (@_inline_meta; Any)
316319
function promote_op{S}(f, ::Type{S})
317320
@_inline_meta
318321
T = _return_type(f, Tuple{_default_type(S)})

base/sparse/abstractsparse.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ issparse(S::LinAlg.UnitLowerTriangular{<:Any,<:AbstractSparseMatrix}) = true
2020
issparse(S::UpperTriangular{<:Any,<:AbstractSparseMatrix}) = true
2121
issparse(S::LinAlg.UnitUpperTriangular{<:Any,<:AbstractSparseMatrix}) = true
2222

23-
indtype(S::AbstractSparseArray{<:Any,Ti}) where {Ti} = (Base.@_pure_meta; Ti)
23+
indtype(S::AbstractSparseArray{<:Any,Ti}) where {Ti} = Ti

base/sparse/sparsevector.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
### Common definitions
44

5-
import Base: scalarmax, scalarmin, sort, find, findnz, @_pure_meta
5+
import Base: scalarmax, scalarmin, sort, find, findnz
66
import Base.LinAlg: promote_to_array_type, promote_to_arrays_
77

88
### The SparseVector
@@ -962,8 +962,8 @@ function hvcat(rows::Tuple{Vararg{Int}}, X::_SparseConcatGroup...)
962962
end
963963

964964
# make sure UniformScaling objects are converted to sparse matrices for concatenation
965-
promote_to_array_type(A::Tuple{Vararg{Union{_SparseConcatGroup,UniformScaling}}}) = (@_pure_meta; SparseMatrixCSC)
966-
promote_to_array_type(A::Tuple{Vararg{Union{_DenseConcatGroup,UniformScaling}}}) = (@_pure_meta; Matrix)
965+
promote_to_array_type(A::Tuple{Vararg{Union{_SparseConcatGroup,UniformScaling}}}) = SparseMatrixCSC
966+
promote_to_array_type(A::Tuple{Vararg{Union{_DenseConcatGroup,UniformScaling}}}) = Matrix
967967
promote_to_arrays_(n::Int, ::Type{SparseMatrixCSC}, J::UniformScaling) = sparse(J, n, n)
968968

969969
# Concatenations strictly involving un/annotated dense matrices/vectors should yield dense arrays

0 commit comments

Comments
 (0)