GPUCompiler@v2.2.2 contains #899, which sets CC.OptimizationParams(; compilesig_invokes=false). With that, the @noinline throw1(x) = throw(DomainError(x, ...)) closure inside Base.Math.exponent now gets codegen'd into the kernel, and DomainError(x, msg) needs a heap box → gc_pool_alloc → gpu_malloc. gpu_malloc is a backend-provided runtime symbol (compile(:malloc, ...) in GPUCompiler's runtime.jl), and oneAPI.jl doesn't provide one. Under 2.2.1, the throw path never reached the IR.
I'm working on a malloc for oneAPI.jl and pinned the GPUCompiler.jl version for now. From what I understand, the latter is needed for Julia 1.14.
GPUCompiler@v2.2.2 contains #899, which sets
CC.OptimizationParams(; compilesig_invokes=false). With that, the@noinline throw1(x) = throw(DomainError(x, ...))closure insideBase.Math.exponentnow gets codegen'd into the kernel, andDomainError(x, msg)needs a heap box →gc_pool_alloc→gpu_malloc. gpu_mallocis a backend-provided runtime symbol (compile(:malloc, ...)in GPUCompiler'sruntime.jl), and oneAPI.jl doesn't provide one. Under 2.2.1, the throw path never reached the IR.I'm working on a malloc for oneAPI.jl and pinned the GPUCompiler.jl version for now. From what I understand, the latter is needed for Julia 1.14.