-
-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Open
Labels
latencyLatencyLatency
Description
One of the invalidations caused by StyledStrings can be seen here:
inserting kwcall(::NamedTuple, ::typeof(printstyled), io::Base.AnnotatedIOBuffer, msg...) @ StyledStrings.Legacy ~/.julia/juliaup/julia-1.12.0-rc2+0.x64.linux.gnu/share/julia/stdlib/v1.12/StyledStrings/src/legacy.jl:126 invalidated:
backedges: 1: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol, underline::Bool}, ::typeof(printstyled), ::IO, ::String, ::String, ::Int32) (1 children)
2: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol}, ::typeof(printstyled), ::IO, ::DataType) (1 children)
3: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol}, ::typeof(printstyled), ::IO, ::String, ::Char) (1 children)
4: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::NamedTuple{(:color, :bold), <:Tuple{Union{Int64, Symbol}, Bool}}, ::typeof(printstyled), ::IO, ::String) (1 children)
5: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{bold::Bool, italic::Bool, underline::Bool, blink::Bool, reverse::Bool, hidden::Bool, color::Int64}, ::typeof(printstyled), ::IO, ::String) (2 children)
6: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol, underline::Bool}, ::typeof(printstyled), ::IO, ::String, ::String, ::Int64) (2 children)
7: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol}, ::typeof(printstyled), ::IO, ::Module) (2 children)
8: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol}, ::typeof(printstyled), ::IO, ::Type) (2 children)
9: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol}, ::typeof(printstyled), ::IO, ::String, ::Any, ::String, ::Any, ::String) (2 children)
10: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol}, ::typeof(printstyled), ::IO, ::String, ::Any) (2 children)
11: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::NamedTuple{(:bold, :color), <:Tuple{Bool, Union{Int64, Symbol}}}, ::typeof(printstyled), ::IO, ::String) (2 children)
12: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol}, ::typeof(printstyled), ::IO, ::String, ::String) (3 children)
13: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol, bold::Bool}, ::typeof(printstyled), ::IO, ::String) (3 children)
14: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol, bold::Bool}, ::typeof(printstyled), ::IO, ::Any) (3 children)
15: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol, bold::Bool}, ::typeof(printstyled), ::IO, ::String, ::DataType, ::String) (3 children)
16: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol, bold::Bool}, ::typeof(printstyled), ::IO, ::Module, ::Char) (5 children)
17: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol}, ::typeof(printstyled), ::IO, ::Any) (6 children)
18: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{bold::Bool, italic::Bool, underline::Bool, blink::Bool, reverse::Bool, hidden::Bool, color::Symbol}, ::typeof(printstyled), ::IO, ::Any, ::String) (6 children)
19: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol}, ::typeof(printstyled), ::IO, ::String, ::Any, ::String) (51 children)
20: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{color::Symbol}, ::typeof(printstyled), ::IO, ::String) (148 children)
21: superseding kwcall(::NamedTuple, ::typeof(printstyled), io::IO, msg...) @ Base util.jl:141 with MethodInstance for Core.kwcall(::@NamedTuple{bold::Bool, italic::Bool, underline::Bool, blink::Bool, reverse::Bool, hidden::Bool, color::Symbol}, ::typeof(printstyled), ::IO, ::String) (179 children)
If you follow the last of these, you're immediately led to:
julia> root
MethodInstance for Core.kwcall(::@NamedTuple{bold::Bool, italic::Bool, underline::Bool, blink::Bool, reverse::Bool, hidden::Bool, color::Symbol}, ::typeof(printstyled), ::IO, ::String) at depth 0 with 179 children
julia> ascend(root)
Choose a call for analysis (q to quit):
> kwcall(::@NamedTuple{bold::Bool, italic::Bool, underline::Bool, blink::Bool, reverse::Bool, hidden::Bool, color::Symbol}, ::typeof(printstyled), ::IO, ::String)
#printstyled#847(::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Bool, ::Symbol, ::typeof(printstyled), ::String)
...The only non-inferrable type in the kwcall is IO. I'm quite puzzled about why this is vulnerable to invalidation, as subtypes(IO) has length 15 which is too much for world-splitting. The other possibility that comes to mind is constant propagation, but that printstyled method is
Lines 143 to 144 in f0ece4a
| @constprop :none printstyled(msg...; bold::Bool=false, italic::Bool=false, underline::Bool=false, blink::Bool=false, reverse::Bool=false, hidden::Bool=false, color::Union{Int,Symbol}=:normal) = | |
| printstyled(stdout, msg...; bold=bold, italic=italic, underline=underline, blink=blink, reverse=reverse, hidden=hidden, color=color) |
and thus annotated with
@constprop :none. The callee is thus annotated, too.
If that were working properly, then I don't currently see how an invalidation could be triggered. Thus I wonder if it isn't working as intended.
Metadata
Metadata
Assignees
Labels
latencyLatencyLatency