For now, if you’re on v1.8, you can do callsite inlining to recover the performance:
❯ git diff --no-index noinlined.jl inlined.jl
diff --git a/noinlined.jl b/inlined.jl
index 3d12124..ca96fc8 100644
--- a/noinlined.jl
+++ b/inlined.jl
@@ -12,6 +12,7 @@ mutable struct AVLTree{K,D}
end
@inline function rotate_left(t::AVLTree{K,D}, x::Node{K,D}, x_right::Node{K,D}) where {K,D}
+ @inline begin
y = x_right
if y.left !== nothing
@@ -40,6 +41,7 @@ end
y.bf += x.bf * (x.bf < zero(Int8)) - one(Int8)
return y
+ end # @inline begin
end
t = AVLTree{Int, Nothing}(nothing)