Skip to content

Commit 6713747

Browse files
Merge pull request #205 from JuliaDiffEq/ChrisRackauckas-patch-1
No bounds check in generated functions
2 parents 12eb8a9 + 6e09afe commit 6713747

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

src/utils.jl

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ function flatten_expr!(x)
3131
x
3232
end
3333

34-
function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, expression = Val{true}; constructor=nothing)
34+
function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, expression = Val{true};
35+
checkbounds = false, constructor=nothing)
3536
_vs = map(x-> x isa Operation ? x.op : x, vs)
3637
_ps = map(x-> x isa Operation ? x.op : x, ps)
3738
var_pairs = [(u.name, :(u[$i])) for (i, u) enumerate(_vs)]
@@ -48,12 +49,16 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
4849

4950
sys_expr = build_expr(:tuple, [conv(rhs) for rhs rhss])
5051
let_expr = Expr(:let, var_eqs, sys_expr)
51-
52+
bounds_block = checkbounds ? let_expr : :(@inbounds begin $let_expr end)
53+
ip_bounds_block = checkbounds ? ip_let_expr : :(@inbounds begin $ip_let_expr end)
54+
5255
fargs = ps == () ? :(u,$(args...)) : :(u,p,$(args...))
5356

5457
oop_ex = :(
5558
($(fargs.args...),) -> begin
56-
X = $let_expr
59+
@inbounds begin
60+
X = $bounds_block
61+
end
5762
T = promote_type(map(typeof,X)...)
5863
convert.(T,X)
5964
construct = $(constructor === nothing ? :(u isa ModelingToolkit.StaticArrays.StaticArray ? ModelingToolkit.StaticArrays.similar_type(typeof(u), eltype(X)) : x->(du=similar(u, T, $(size(rhss)...)); vec(du) .= x; du)) : constructor)
@@ -63,7 +68,9 @@ function build_function(rhss, vs, ps = (), args = (), conv = simplified_expr, ex
6368

6469
iip_ex = :(
6570
($X,$(fargs.args...)) -> begin
66-
$ip_let_expr
71+
@inbounds begin
72+
$ip_bounds_block
73+
end
6774
nothing
6875
end
6976
)

0 commit comments

Comments
 (0)