diff --git a/Project.toml b/Project.toml index f5d149d82..9f7141743 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "GPUCompiler" uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" -version = "1.22.1" +version = "1.22.2" authors = ["Tim Besard "] [workspace] diff --git a/src/metal.jl b/src/metal.jl index 5107b02ab..dc6f32ed3 100644 --- a/src/metal.jl +++ b/src/metal.jl @@ -1270,7 +1270,13 @@ function add_argument_metadata!(@nospecialize(job::CompilerJob), mod::LLVM.Modul # XXX: unknown push!(md, Metadata(ConstantInt(Int32(1)))) - push!(md, MDString("air.read_write")) # TODO: Check for const array + # only pointer-to-data arguments are written through; by-reference values (kernel + # state, bitstype objects) are read into a stack slot and never written back. + if arg.cc == BITS_VALUE && (arg.typ <: Ptr || arg.typ <: Core.LLVMPtr) + push!(md, MDString("air.read_write")) + else + push!(md, MDString("air.read")) + end push!(md, MDString("air.address_space")) push!(md, Metadata(ConstantInt(Int32(addrspace(parameters(entry_ft)[arg.idx])))))