diff --git a/.buildkite/downstream.yml b/.buildkite/downstream.yml index f0a928c2..e635ca5e 100644 --- a/.buildkite/downstream.yml +++ b/.buildkite/downstream.yml @@ -8,7 +8,7 @@ steps: - label: "CUDA.jl" plugins: - JuliaCI/julia#v1: - version: "1.12" + version: "1.13" - JuliaCI/julia-coverage#v1: codecov: true command: | @@ -42,7 +42,7 @@ steps: - label: "oneAPI.jl" plugins: - JuliaCI/julia#v1: - version: "1.12" + version: "1.13" - JuliaCI/julia-coverage#v1: codecov: true command: | @@ -75,7 +75,7 @@ steps: - label: "AMDGPU.jl" plugins: - JuliaCI/julia#v1: - version: "1.12" + version: "1.13" - JuliaCI/julia-coverage#v1: codecov: true command: | @@ -104,7 +104,7 @@ steps: - label: "Metal.jl" plugins: - JuliaCI/julia#v1: - version: "1.12" + version: "1.13" - JuliaCI/julia-coverage#v1: codecov: true command: | @@ -144,7 +144,7 @@ steps: - label: "OpenCL.jl" plugins: - JuliaCI/julia#v1: - version: "1.12" + version: "1.13" - JuliaCI/julia-coverage#v1: codecov: true command: | diff --git a/.github/workflows/GetAsserts.yml b/.github/workflows/GetAsserts.yml index d06fead8..40bcf88b 100644 --- a/.github/workflows/GetAsserts.yml +++ b/.github/workflows/GetAsserts.yml @@ -26,8 +26,8 @@ jobs: strategy: fail-fast: false matrix: - # NOTE: 'master' is currently disabled; keep in sync with TestAsserts - version: ['1.12', '1.13'] + # keep in sync with TestAsserts + version: ['1.12', '1.13', 'master'] build: ['x86_64-linux-gnuassert'] steps: # Only checks out the base branch (never PR code) diff --git a/.github/workflows/Test.yml b/.github/workflows/Test.yml index 8c74b012..d109d59c 100644 --- a/.github/workflows/Test.yml +++ b/.github/workflows/Test.yml @@ -19,7 +19,7 @@ jobs: strategy: fail-fast: false matrix: - version: ['1.10', '1.11', '1.12', '1.13-nightly', 'nightly'] + version: ['1.10', '1.11', '1.12', '1.13', 'nightly'] os: [ubuntu-24.04, ubuntu-24.04-arm, macOS-15, windows-2025] llvm_args: [''] include: diff --git a/.github/workflows/TestAsserts.yml b/.github/workflows/TestAsserts.yml index 129e50bd..857a2a0e 100644 --- a/.github/workflows/TestAsserts.yml +++ b/.github/workflows/TestAsserts.yml @@ -32,7 +32,7 @@ jobs: with: script: | // Keep in sync with the matrix below - const versions = ['1.12', '1.13']; + const versions = ['1.12', '1.13', 'master']; await Promise.all(versions.map(version => github.rest.checks.create({ owner: context.repo.owner, @@ -55,7 +55,7 @@ jobs: strategy: fail-fast: false matrix: - version: ['1.12', '1.13'] + version: ['1.12', '1.13', 'master'] steps: - name: Download Julia build uses: actions/download-artifact@v8 @@ -97,7 +97,7 @@ jobs: with: script: | // Keep in sync with the matrix above - const versions = ['1.12', '1.13']; + const versions = ['1.12', '1.13', 'master']; const jobs = await github.paginate(github.rest.actions.listJobsForWorkflowRunAttempt, { owner: context.repo.owner, repo: context.repo.repo, @@ -136,7 +136,7 @@ jobs: with: script: | // Keep in sync with the matrix above - const versions = ['1.12', '1.13']; + const versions = ['1.12', '1.13', 'master']; await Promise.all(versions.map(version => github.rest.checks.create({ owner: context.repo.owner, diff --git a/src/optim.jl b/src/optim.jl index 3c1d6408..3b01e23d 100644 --- a/src/optim.jl +++ b/src/optim.jl @@ -571,9 +571,12 @@ function (self::LowerGCFrame)(fun::LLVM.Function) @compiler_assert isempty(uses(alloc_obj)) self.job end - # we don't care about write barriers - if haskey(functions(mod), "julia.write_barrier") - barrier = functions(mod)["julia.write_barrier"] + # we don't care about write barriers. Julia 1.14 replaced `julia.write_barrier` with + # object and field-aware variants, the latter specialized on the slot address space. + for name in ("julia.write_barrier", "julia.object_write_barrier", + "julia.field_write_barrier.p11", "julia.field_write_barrier.p13") + haskey(functions(mod), name) || continue + barrier = functions(mod)[name] for use in uses(barrier) call = user(use)::LLVM.CallInst diff --git a/test/ptx.jl b/test/ptx.jl index 6f018708..7140d631 100644 --- a/test/ptx.jl +++ b/test/ptx.jl @@ -481,6 +481,25 @@ end @check_not "gpu_gc_pool_alloc" PTX.code_native(mod.ref_kernel, Tuple{Ptr{Int64}, Int}) end + + # storing a heap object into a field of another one emits a write barrier + # (split into object and field-aware variants on Julia 1.14) + mod = @eval module $(gensym()) + mutable struct Outer + x::Any + end + + function store_field(outer, inner) + outer.x = inner + nothing + end + end + + @test @filecheck begin + @check_label "define void @{{(julia|j)_store_field_[0-9]+}}" + @check_not "write_barrier" + PTX.code_llvm(mod.store_field, Tuple{mod.Outer, Base.RefValue{Int}}) + end end @testset "float boxes" begin