Skip to content

Upgrade to LLVM.jl 10 - #823

Merged
maleadt merged 5 commits into
mainfrom
tb/llvm10
Oct 3, 2026
Merged

maleadt merged 5 commits into
mainfrom
tb/llvm10

Conversation

@maleadt

@maleadt maleadt commented Oct 3, 2026 •

Copy link
Copy Markdown
Member

Ports KernelAbstractions to LLVM.jl 10. LLVM.jl is only used by the POCL back-end, a copy of OpenCL.jl's compiler and device code, and by one llvmcall in NDIteration. The port follows OpenCL.jl's (JuliaGPU/OpenCL.jl#525).

Main changes:

  • Mechanical port: vocabulary imports, properties instead of accessors, and generate_llvmcall for the IR generators.
  • No more raw C API: LLVM.jl's lookups and scoped enums instead.
  • @llvmgenerated for the kernel-argument, invariant-load and randn table generators. Memory effects replace readnone, which is invalid on LLVM 16+, and assume uses LLVM.Interop.assume.

Fixes, each in its own commit:

  • The POCL back-end didn't dispose of the IR that GPUCompiler returns, which leaked one module per compiled kernel.
  • unsafe_invariant_load sign-extended narrow indices, so a large UInt32 index addressed memory before the array.
  • The RNG prologue copied its line-0 debug location onto the kernel's first instruction.

Tested on Julia 1.10, 1.12 and 1.13, with the same results as main. LLVM.jl's memcheck mode on 1.12 reports nothing.

Requires GPUCompiler 2.11 (JuliaGPU/GPUCompiler.jl#974), GPUToolbox 3.3.3 (JuliaGPU/GPUToolbox.jl#28), SPIRVIntrinsics 1.2 (JuliaGPU/OpenCL.jl#525), and UnsafeAtomics 0.3.3 (JuliaConcurrent/UnsafeAtomics.jl#31) or 0.4.


Disclaimer: this PR is AI-assisted and has not been reviewed in detail. Tests pass locally, so it should be a good starting point for a maintainer to complete the upgrade.

Import the IR and Build vocabularies next to LLVM.Interop, since
`using LLVM` no longer exports the API, and use properties instead of
the removed accessor functions (metadata, function attributes, module
functions, linkage, initializer, alignment, the entry block and the
subprogram of a function, ...).

create_function and call_function were removed: the additional kernel
arguments, the constant tables for randn and the invariant loads now
generate their IR with generate_llvmcall.

Insertion points are explicit now: the block that initializes the RNG
state is created LLVM.before the entry block, and the builder positioned
LLVM.at_end of it. The builder gets the line-0 location of the kernel's
subprogram for the instructions it inserts; the old
`debuglocation!(builder, first(instructions(top_bb)))` copied that
location onto the first instruction of the original entry block (or
cleared its location without a subprogram), which wasn't the intent.
Look up or declare functions with get! on the module's function view,
check for the RNG attribute by its kind instead of collecting and
comparing attributes, use the scoped linkage enumeration instead of
LLVM.API, and the public metadata kinds.

The intrinsics for the additional kernel arguments now only get their
readnone attribute when they're declared, rather than every time they
are looked up.
The accessor for the additional kernel arguments, the invariant load
and the constant tables for randn were @generated functions around
generate_llvmcall: define them with @llvmgenerated instead, which
derives the LLVM signature from the Julia one. The invariant load's
checks move to a wrapper, and its generator uses an unconditional typed
bitcast (which folds away with opaque pointers) and load!'s align
keyword. The table accessors become plain functions that pass the
table's name and element type to one generator, which reads the
(constant) table from Random.

Use memory effects instead of the readnone attribute, which is invalid
on functions as of LLVM 16, derive the return type of the
deferred_codegen declaration from Julia's lowering of Ptr{Cvoid}
instead of a version decision tree, and implement NDIteration.assume
with LLVM.Interop.assume instead of a copy of its IR.
GPUCompiler now hands the module that Julia's code generator produced
to the caller of compile: on Julia 1.11 and later it moves the module
out of the native code, and on 1.10 (LLVM 15, which can't do that) it
returns the module for the caller to consume or dispose of.
compile_to_obj only read the entry point's name and attributes, and
never disposed of the module. That leaked it: up to Julia 1.13, the
native-code descriptor is never freed and keeps its thread-safe module,
and with it the context, alive, so the module isn't freed together with
the context either. memcheck also reported every compiled module.

Dispose of the IR with @dispose inside the JuliaContext block, once the
entry point has been inspected, like GPUCompiler's own callers do, so
that it is also disposed of when the inspection throws.
The index was decremented in its own type and passed to getelementptr
as is, which sign-extends narrower indices, so e.g. a UInt32 index of
0x80000001 addressed a negative offset. Convert it to Int in Julia
first, like LLVM.jl's unsafe_load does.
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results

Show table
main d3696fc... main / d3696fc...
const/@Const/Float32/262144 0.293 ± 0.034 ms 0.295 ± 0.035 ms 0.996 ± 0.17
const/@Const/Float32/65536 0.13 ± 0.026 ms 0.131 ± 0.026 ms 0.993 ± 0.28
const/@Const/Float64/262144 0.438 ± 0.038 ms 0.438 ± 0.038 ms 0.999 ± 0.12
const/@Const/Float64/65536 0.18 ± 0.018 ms 0.181 ± 0.018 ms 0.995 ± 0.14
const/unmarked/Float32/262144 1.16 ± 0.035 ms 1.17 ± 0.036 ms 0.999 ± 0.043
const/unmarked/Float32/65536 0.343 ± 0.032 ms 0.346 ± 0.033 ms 0.992 ± 0.13
const/unmarked/Float64/262144 1.39 ± 0.041 ms 1.4 ± 0.04 ms 0.997 ± 0.041
const/unmarked/Float64/65536 0.409 ± 0.036 ms 0.407 ± 0.036 ms 1 ± 0.13
launch/3D static workgroup, dynamic ndrange 28.7 ± 58 μs 29 ± 58 μs 0.989 ± 2.8
launch/3D static workgroup, static ndrange 28.9 ± 58 μs 28.6 ± 58 μs 1.01 ± 2.9
launch/dynamic workgroup, dynamic ndrange 0.0447 ± 0.058 ms 0.0455 ± 0.059 ms 0.981 ± 1.8
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 0.0455 ± 0.059 ms 0.0457 ± 0.059 ms 0.997 ± 1.8
launch/static workgroup, dynamic ndrange 29.2 ± 58 μs 29.5 ± 58 μs 0.987 ± 2.8
launch/static workgroup, static ndrange 28.8 ± 58 μs 29.4 ± 58 μs 0.979 ± 2.8
partition/dynamic workgroup, dynamic ndrange 0.0584 ± 0.00091 μs 0.0619 ± 0.0008 μs 0.943 ± 0.019
partition/static workgroup, dynamic ndrange 0.0562 ± 0.011 μs 0.0617 ± 0.011 μs 0.911 ± 0.24
partition/static workgroup, static ndrange 1.55 ± 0.01 ns 1.6 ± 0.92 ns 0.969 ± 0.56
saxpy/default/Float16/1024 31.1 ± 58 μs 30.4 ± 57 μs 1.02 ± 2.7
saxpy/default/Float16/1048576 0.811 ± 0.037 ms 0.814 ± 0.037 ms 0.995 ± 0.064
saxpy/default/Float16/16384 0.0763 ± 0.031 ms 0.0782 ± 0.034 ms 0.976 ± 0.58
saxpy/default/Float16/2048 0.0821 ± 0.047 ms 0.0815 ± 0.048 ms 1.01 ± 0.83
saxpy/default/Float16/256 31.1 ± 58 μs 30.2 ± 58 μs 1.03 ± 2.8
saxpy/default/Float16/262144 0.261 ± 0.037 ms 0.262 ± 0.037 ms 0.995 ± 0.2
saxpy/default/Float16/32768 0.0876 ± 0.033 ms 0.0886 ± 0.032 ms 0.988 ± 0.52
saxpy/default/Float16/4096 0.0689 ± 0.029 ms 0.0678 ± 0.029 ms 1.02 ± 0.62
saxpy/default/Float16/512 30.1 ± 57 μs 30.5 ± 57 μs 0.988 ± 2.6
saxpy/default/Float16/64 0.0367 ± 0.058 ms 0.0323 ± 0.059 ms 1.14 ± 2.7
saxpy/default/Float16/65536 0.11 ± 0.032 ms 0.11 ± 0.032 ms 0.998 ± 0.41
saxpy/default/Float32/1024 29.4 ± 57 μs 29.2 ± 57 μs 1.01 ± 2.8
saxpy/default/Float32/1048576 0.392 ± 0.028 ms 0.403 ± 0.032 ms 0.973 ± 0.1
saxpy/default/Float32/16384 0.0703 ± 0.035 ms 0.0698 ± 0.035 ms 1.01 ± 0.71
saxpy/default/Float32/2048 30.8 ± 58 μs 30.2 ± 57 μs 1.02 ± 2.7
saxpy/default/Float32/256 0.0335 ± 0.058 ms 30.8 ± 59 μs 1.09 ± 2.8
saxpy/default/Float32/262144 0.158 ± 0.033 ms 0.157 ± 0.032 ms 1 ± 0.29
saxpy/default/Float32/32768 0.0775 ± 0.032 ms 0.0796 ± 0.032 ms 0.973 ± 0.56
saxpy/default/Float32/4096 0.0629 ± 0.061 ms 0.0618 ± 0.062 ms 1.02 ± 1.4
saxpy/default/Float32/512 28.8 ± 56 μs 28.6 ± 54 μs 1.01 ± 2.7
saxpy/default/Float32/64 0.0373 ± 0.059 ms 0.0344 ± 0.058 ms 1.08 ± 2.5
saxpy/default/Float32/65536 0.089 ± 0.032 ms 0.0899 ± 0.032 ms 0.99 ± 0.51
saxpy/default/Float64/1024 29.7 ± 58 μs 29 ± 54 μs 1.02 ± 2.7
saxpy/default/Float64/1048576 0.636 ± 0.048 ms 0.712 ± 0.083 ms 0.892 ± 0.12
saxpy/default/Float64/16384 0.0709 ± 0.034 ms 0.0733 ± 0.034 ms 0.966 ± 0.64
saxpy/default/Float64/2048 31.4 ± 60 μs 31.1 ± 59 μs 1.01 ± 2.7
saxpy/default/Float64/256 28.4 ± 54 μs 28.5 ± 55 μs 0.997 ± 2.7
saxpy/default/Float64/262144 0.213 ± 0.034 ms 0.215 ± 0.038 ms 0.992 ± 0.24
saxpy/default/Float64/32768 0.0851 ± 0.034 ms 0.0894 ± 0.033 ms 0.952 ± 0.52
saxpy/default/Float64/4096 31.6 ± 56 μs 0.0322 ± 0.055 ms 0.982 ± 2.4
saxpy/default/Float64/512 29 ± 56 μs 28.9 ± 58 μs 1 ± 2.8
saxpy/default/Float64/64 0.0332 ± 0.058 ms 0.0338 ± 0.059 ms 0.981 ± 2.4
saxpy/default/Float64/65536 0.104 ± 0.034 ms 0.107 ± 0.034 ms 0.972 ± 0.45
saxpy/static workgroup=(1024,)/Float16/1024 30.9 ± 58 μs 30.2 ± 56 μs 1.02 ± 2.7
saxpy/static workgroup=(1024,)/Float16/1048576 0.808 ± 0.037 ms 0.812 ± 0.039 ms 0.996 ± 0.066
saxpy/static workgroup=(1024,)/Float16/16384 0.0797 ± 0.033 ms 0.0782 ± 0.032 ms 1.02 ± 0.59
saxpy/static workgroup=(1024,)/Float16/2048 0.0737 ± 0.065 ms 0.0686 ± 0.065 ms 1.07 ± 1.4
saxpy/static workgroup=(1024,)/Float16/256 0.0319 ± 0.058 ms 30.6 ± 57 μs 1.04 ± 2.7
saxpy/static workgroup=(1024,)/Float16/262144 0.26 ± 0.034 ms 0.263 ± 0.034 ms 0.987 ± 0.18
saxpy/static workgroup=(1024,)/Float16/32768 0.0898 ± 0.031 ms 0.0893 ± 0.031 ms 1.01 ± 0.5
saxpy/static workgroup=(1024,)/Float16/4096 0.0889 ± 0.029 ms 0.088 ± 0.033 ms 1.01 ± 0.5
saxpy/static workgroup=(1024,)/Float16/512 31.1 ± 57 μs 30.6 ± 57 μs 1.02 ± 2.7
saxpy/static workgroup=(1024,)/Float16/64 0.0384 ± 0.058 ms 31.3 ± 58 μs 1.23 ± 2.9
saxpy/static workgroup=(1024,)/Float16/65536 0.114 ± 0.032 ms 0.113 ± 0.032 ms 1.01 ± 0.4
saxpy/static workgroup=(1024,)/Float32/1024 29.5 ± 58 μs 29.1 ± 56 μs 1.01 ± 2.8
saxpy/static workgroup=(1024,)/Float32/1048576 0.408 ± 0.031 ms 0.412 ± 0.029 ms 0.99 ± 0.1
saxpy/static workgroup=(1024,)/Float32/16384 0.0661 ± 0.036 ms 0.0648 ± 0.036 ms 1.02 ± 0.79
saxpy/static workgroup=(1024,)/Float32/2048 30.7 ± 58 μs 30.3 ± 57 μs 1.01 ± 2.7
saxpy/static workgroup=(1024,)/Float32/256 30.3 ± 57 μs 0.0322 ± 0.058 ms 0.941 ± 2.4
saxpy/static workgroup=(1024,)/Float32/262144 0.162 ± 0.028 ms 0.162 ± 0.028 ms 1 ± 0.25
saxpy/static workgroup=(1024,)/Float32/32768 0.0772 ± 0.031 ms 0.0762 ± 0.032 ms 1.01 ± 0.59
saxpy/static workgroup=(1024,)/Float32/4096 0.0372 ± 0.058 ms 30.6 ± 55 μs 1.22 ± 2.9
saxpy/static workgroup=(1024,)/Float32/512 29.1 ± 56 μs 28.9 ± 56 μs 1.01 ± 2.7
saxpy/static workgroup=(1024,)/Float32/64 0.0361 ± 0.058 ms 0.0339 ± 0.058 ms 1.07 ± 2.5
saxpy/static workgroup=(1024,)/Float32/65536 0.094 ± 0.031 ms 0.093 ± 0.031 ms 1.01 ± 0.47
saxpy/static workgroup=(1024,)/Float64/1024 29.2 ± 55 μs 29 ± 55 μs 1.01 ± 2.7
saxpy/static workgroup=(1024,)/Float64/1048576 0.625 ± 0.039 ms 0.637 ± 0.078 ms 0.982 ± 0.13
saxpy/static workgroup=(1024,)/Float64/16384 0.0688 ± 0.034 ms 0.07 ± 0.034 ms 0.983 ± 0.68
saxpy/static workgroup=(1024,)/Float64/2048 0.0324 ± 0.06 ms 30.9 ± 59 μs 1.05 ± 2.8
saxpy/static workgroup=(1024,)/Float64/256 29.8 ± 57 μs 29.6 ± 57 μs 1.01 ± 2.7
saxpy/static workgroup=(1024,)/Float64/262144 0.212 ± 0.031 ms 0.209 ± 0.036 ms 1.01 ± 0.23
saxpy/static workgroup=(1024,)/Float64/32768 0.0862 ± 0.032 ms 0.0853 ± 0.032 ms 1.01 ± 0.53
saxpy/static workgroup=(1024,)/Float64/4096 28.4 ± 54 μs 29.9 ± 56 μs 0.952 ± 2.5
saxpy/static workgroup=(1024,)/Float64/512 29.5 ± 57 μs 29.3 ± 57 μs 1.01 ± 2.8
saxpy/static workgroup=(1024,)/Float64/64 0.0326 ± 0.058 ms 31.2 ± 58 μs 1.04 ± 2.7
saxpy/static workgroup=(1024,)/Float64/65536 0.106 ± 0.03 ms 0.105 ± 0.03 ms 1.01 ± 0.41
time_to_load 0.797 ± 0.00028 s 0.508 ± 0.0031 s 1.57 ± 0.0097
main d3696fc... main / d3696fc...
const/@Const/Float32/262144 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
const/@Const/Float32/65536 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
const/@Const/Float64/262144 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
const/@Const/Float64/65536 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
const/unmarked/Float32/262144 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
const/unmarked/Float32/65536 9 allocs: 0.203 kB 5 allocs: 0.0938 kB 2.17
const/unmarked/Float64/262144 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
const/unmarked/Float64/65536 9 allocs: 0.203 kB 9 allocs: 0.203 kB 1
launch/3D static workgroup, dynamic ndrange 9 allocs: 0.219 kB 9 allocs: 0.219 kB 1
launch/3D static workgroup, static ndrange 9 allocs: 0.219 kB 9 allocs: 0.219 kB 1
launch/dynamic workgroup, dynamic ndrange 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
launch/static workgroup, dynamic ndrange 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
launch/static workgroup, static ndrange 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
partition/dynamic workgroup, dynamic ndrange 2 allocs: 0.0625 kB 2 allocs: 0.0625 kB 1
partition/static workgroup, dynamic ndrange 2 allocs: 32 B 2 allocs: 32 B 1
partition/static workgroup, static ndrange 0 allocs: 0 B 0 allocs: 0 B
saxpy/default/Float16/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/1048576 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float16/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float16/262144 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/32768 12 allocs: 0.25 kB 8 allocs: 0.141 kB 1.78
saxpy/default/Float16/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float16/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float16/65536 12 allocs: 0.25 kB 8 allocs: 0.141 kB 1.78
saxpy/default/Float32/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/1048576 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float32/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float32/262144 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float32/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float32/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float32/65536 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/1048576 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float64/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float64/262144 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/default/Float64/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/default/Float64/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/default/Float64/65536 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/1048576 12 allocs: 0.25 kB 8 allocs: 0.141 kB 1.78
saxpy/static workgroup=(1024,)/Float16/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float16/262144 8 allocs: 0.141 kB 12 allocs: 0.25 kB 0.562
saxpy/static workgroup=(1024,)/Float16/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float16/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float16/65536 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/1048576 8 allocs: 0.141 kB 12 allocs: 0.25 kB 0.562
saxpy/static workgroup=(1024,)/Float32/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float32/262144 12 allocs: 0.25 kB 8 allocs: 0.141 kB 1.78
saxpy/static workgroup=(1024,)/Float32/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float32/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float32/65536 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/1024 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/1048576 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/static workgroup=(1024,)/Float64/16384 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/2048 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/256 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float64/262144 12 allocs: 0.25 kB 12 allocs: 0.25 kB 1
saxpy/static workgroup=(1024,)/Float64/32768 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/4096 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/512 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
saxpy/static workgroup=(1024,)/Float64/64 5 allocs: 0.0938 kB 5 allocs: 0.0938 kB 1
saxpy/static workgroup=(1024,)/Float64/65536 8 allocs: 0.141 kB 8 allocs: 0.141 kB 1
time_to_load 0.2 k allocs: 11.8 kB 0.2 k allocs: 11.8 kB 1

Benchmark Plots

A plot of the benchmark results have been uploaded as an artifact to the workflow run for this PR.
Go to "Actions"->"Benchmark a pull request"->[the most recent run]->"Artifacts" (at the bottom).

@maleadt
maleadt merged commit 6218e25 into main Oct 3, 2026
58 of 59 checks passed
@maleadt
maleadt deleted the tb/llvm10 branch October 3, 2026 12:17
@codecov

codecov Bot commented Oct 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 91.11111% with 4 lines in your changes missing coverage. Please review.
✅ Project coverage is 67.89%. Comparing base (2e027f0) to head (d3696fc).
⚠️ Report is 10 commits behind head on main.

Files with missing lines Patch % Lines
src/pocl/device/runtime.jl 62.50% 3 Missing ⚠️
src/pocl/compiler/compilation.jl 93.33% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #823      +/-   ##
==========================================
- Coverage   70.77%   67.89%   -2.89%     
==========================================
  Files          27       27              
  Lines        2221     2327     +106     
==========================================
+ Hits         1572     1580       +8     
- Misses        649      747      +98     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant