Skip to content

Commit

Permalink
Precompile methods for common types (#148)
Browse files Browse the repository at this point in the history
  • Loading branch information
timholy authored Dec 12, 2019
1 parent 49627e2 commit f647feb
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 3 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Manifest.toml
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ os:
- osx
julia:
- 1.0
- 1.1
- 1.2
- nightly
notifications:
email: false
Expand Down
5 changes: 3 additions & 2 deletions src/FixedPointNumbers.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
VERSION < v"0.7.0-beta2.199" && __precompile__()

module FixedPointNumbers

import Base: ==, <, <=, -, +, *, /, ~, isapprox,
Expand Down Expand Up @@ -199,4 +197,7 @@ end
rand(::Type{T}) where {T <: FixedPoint} = reinterpret(T, rand(rawtype(T)))
rand(::Type{T}, sz::Dims) where {T <: FixedPoint} = reinterpret(T, rand(rawtype(T), sz))

include("precompile.jl")
_precompile_()

end # module
30 changes: 30 additions & 0 deletions src/precompile.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
function _precompile_()
ccall(:jl_generating_output, Cint, ()) == 1 || return nothing
normedtypes = (N0f8, N0f16) # precompiled Normed types
realtypes = (Float16, Float32, Float64, Int) # types for mixed Normed/Real operations
for T in normedtypes
for f in (+, -, abs, eps, rand) # unary operations
@assert precompile(Tuple{typeof(f),T})
end
@assert precompile(Tuple{typeof(rand),T,Tuple{Int}})
@assert precompile(Tuple{typeof(rand),T,Tuple{Int,Int}})
for f in (trunc, floor, ceil, round) # rounding operations
@assert precompile(Tuple{typeof(f),T})
@assert precompile(Tuple{typeof(f),Type{Int},T})
end
for f in (+, -, *, /, <, <=, ==) # binary operations
@assert precompile(Tuple{typeof(f),T,T})
for S in realtypes
@assert precompile(Tuple{typeof(f),T,S})
@assert precompile(Tuple{typeof(f),S,T})
end
end
# conversions
for S in realtypes
@assert precompile(Tuple{Type{T},S})
@assert precompile(Tuple{Type{S},T})
@assert precompile(Tuple{typeof(convert),Type{T},S})
@assert precompile(Tuple{typeof(convert),Type{S},T})
end
end
end

0 comments on commit f647feb

Please sign in to comment.