From 3398fdae224b898a38d124258c5606121f0f993e Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Fri, 19 Sep 2025 18:13:34 -0300 Subject: [PATCH 1/3] Don't look at past partitions when doing inference --- Compiler/src/abstractinterpretation.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Compiler/src/abstractinterpretation.jl b/Compiler/src/abstractinterpretation.jl index fe3983dfa1ef2..7a6aebe38d5ad 100644 --- a/Compiler/src/abstractinterpretation.jl +++ b/Compiler/src/abstractinterpretation.jl @@ -3704,14 +3704,14 @@ function scan_specified_partitions(query::F1, walk_binding_partition::F2, @assert lookup_world in partition_validity this_rte = query(interp, leaf_binding, leaf_partition) if @isdefined(rte) + if min_world(total_validity) <= wwr.this + @goto out + end if this_rte === rte total_validity = union(total_validity, partition_validity) lookup_world = min_world(total_validity) - 1 continue end - if min_world(total_validity) <= wwr.this - @goto out - end end total_validity = partition_validity lookup_world = min_world(total_validity) - 1 From 20eb56842708ba25638563c81d6b55ce76cc7776 Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Tue, 23 Sep 2025 13:01:02 -0300 Subject: [PATCH 2/3] Try another way of doing this --- Compiler/src/abstractinterpretation.jl | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Compiler/src/abstractinterpretation.jl b/Compiler/src/abstractinterpretation.jl index 7a6aebe38d5ad..1dd58e5743343 100644 --- a/Compiler/src/abstractinterpretation.jl +++ b/Compiler/src/abstractinterpretation.jl @@ -3691,7 +3691,7 @@ end function scan_specified_partitions(query::F1, walk_binding_partition::F2, interp::Union{AbstractInterpreter,Nothing}, g::GlobalRef, wwr::WorldWithRange) where {F1,F2} - local total_validity, rte, binding_partition + local total_validity, rte, binding_partition, kind binding = convert(Core.Binding, g) lookup_world = max_world(wwr.valid_worlds) while true @@ -3704,18 +3704,19 @@ function scan_specified_partitions(query::F1, walk_binding_partition::F2, @assert lookup_world in partition_validity this_rte = query(interp, leaf_binding, leaf_partition) if @isdefined(rte) - if min_world(total_validity) <= wwr.this - @goto out - end - if this_rte === rte + if this_rte === rte && !(is_some_guard(kind) ⊻ is_some_guard(binding_kind(leaf_partition))) # Don't merge from no guard to guard total_validity = union(total_validity, partition_validity) lookup_world = min_world(total_validity) - 1 continue end + if min_world(total_validity) <= wwr.this + @goto out + end end total_validity = partition_validity lookup_world = min_world(total_validity) - 1 rte = this_rte + kind = binding_kind(leaf_partition) end min_world(total_validity) > min_world(wwr.valid_worlds) || break end From 2dc4e14bbc5e21a8cfe6cfb12e65f014a4cad890 Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Wed, 1 Oct 2025 12:58:20 -0300 Subject: [PATCH 3/3] Add test --- Compiler/test/codegen.jl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Compiler/test/codegen.jl b/Compiler/test/codegen.jl index f90ab7dff6655..8eb49212ceafa 100644 --- a/Compiler/test/codegen.jl +++ b/Compiler/test/codegen.jl @@ -1075,3 +1075,11 @@ let io = IOBuffer() str = String(take!(io)) @test occursin("julia.write_barrier", str) end + +f42559 = 5 +foo42559() = f42559 +let io = IOBuffer() + code_llvm(io, foo42559, Tuple{}, raw=true, optimize=false) + str = String(take!(io)) + @test !occursin("jl_get_binding_value_seqcst", str) +end