Skip to content

Replace @ka_code_llvm with GPUCompiler's @device_code_* - #784

Merged
vchuravy merged 2 commits into
mainfrom
vc/device-code-reflection
Sep 15, 2026
Merged

vchuravy merged 2 commits into
mainfrom
vc/device-code-reflection

Conversation

@vchuravy

Copy link
Copy Markdown
Member

@ka_code_llvm is dead code on 0.10-dev.

It reflected on the host-side lowering of a kernel and explicitly rejected GPU backends:

if isa($kern, Kernel{G} where {G <: GPU})
    error("@ka_code_llvm does not support GPU kernels")
end

Since the CPU backend became an OpenCL backend and const CPU = POCLBackend <: GPU, that guard fires for every kernel on every backend, so the macro cannot be called at all:

julia> @ka_code_llvm mul2(CPU(), 16)(A, ndrange = 64)
ERROR: @ka_code_llvm does not support GPU kernels

Nothing in the test suite covered it, which is why it went unnoticed.

What this does

Removes @ka_code_llvm/ka_code_llvm, and forwards GPUCompiler's @device_code_* macros from KernelAbstractions in its place:

KernelAbstractions.@device_code_llvm debuginfo=:none mul2(backend, 64)(A, ndrange=length(A))

These install a compilation hook for the duration of the wrapped expression, so they report on the code a backend actually generates rather than on the host-side lowering, and they do so for any GPUCompiler-based backend — the in-tree CPU backend as well as CUDA, AMDGPU, oneAPI or Metal. That makes them a strictly more capable replacement than the CPU-only macro they replace. The one behavioural difference worth knowing, documented in the docstrings: the wrapped expression is really evaluated, so the kernels it launches are compiled and run.

They are not exported, because the backend packages export macros of the same name and using CUDA, KernelAbstractions would otherwise make the name ambiguous; hence the qualified spelling above.

@ka_code_typed is untouched — it reflects on the kernel function as the host sees it, which is backend-independent and still works. Its docstring now points at the @device_code_* macros for looking at generated device code.

Also: a Reflection section rewrite in docs/src/api.md, a 0.10 changelog entry, and a test in test/runtests.jl asserting that KernelAbstractions.@device_code_llvm over a kernel launch produces IR for that kernel and runs it.

Testing

  • julia --project=test test/runtests.jl: 2484 pass, 2 errors — both the pre-existing ifelse on aggregate types SPIR-V translation failures (ComplexF32/ComplexF64), which reproduce unchanged on main.
  • Docs build clean: no missing-docs and no broken cross-reference warnings, all six macros render on the API page.
  • Aqua and Runic clean.

🤖 Generated with Claude Code

https://claude.ai/code/session_01DbbtGLjxXpt7kZj6h2yVdK

`@ka_code_llvm` reflected on the host-side lowering of a kernel and explicitly
rejected GPU backends. On 0.10 the CPU backend compiles through OpenCL and
`const CPU = POCLBackend <: GPU`, so that guard now rejects every kernel on
every backend: the macro cannot be called at all, and nothing in the test suite
covered it.

Remove it, and forward GPUCompiler's `@device_code_*` macros from
KernelAbstractions instead. They install a compilation hook for the duration of
the wrapped expression, so they report on the code a backend really generates,
and they do that for any GPUCompiler-based backend -- the in-tree CPU backend as
well as CUDA, AMDGPU, oneAPI or Metal. They are deliberately not exported: the
backend packages export macros of the same name, and `using CUDA,
KernelAbstractions` would otherwise make the name ambiguous.

`@ka_code_typed` stays as it is. It reflects on the kernel function as the host
sees it, which is backend-independent and still works; its docstring now points
at the `@device_code_*` macros for looking at generated device code.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbbtGLjxXpt7kZj6h2yVdK
Comment thread docs/src/api.md Outdated
@github-actions

github-actions Bot commented Sep 14, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark Results

Show table
main caa7e16... main / caa7e16...
launch/3D static workgroup, dynamic ndrange 0.0729 ± 0.03 ms 0.0728 ± 0.027 ms 1 ± 0.55
launch/3D static workgroup, static ndrange 0.0738 ± 0.024 ms 0.0735 ± 0.024 ms 1 ± 0.46
launch/dynamic workgroup, dynamic ndrange 0.0759 ± 0.024 ms 0.0751 ± 0.023 ms 1.01 ± 0.45
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 0.0731 ± 0.028 ms 0.0725 ± 0.026 ms 1.01 ± 0.54
launch/static workgroup, dynamic ndrange 0.0734 ± 0.025 ms 0.0727 ± 0.025 ms 1.01 ± 0.49
launch/static workgroup, static ndrange 0.0736 ± 0.025 ms 0.073 ± 0.025 ms 1.01 ± 0.49
partition/dynamic workgroup, dynamic ndrange 0.0581 ± 0.0012 μs 0.0588 ± 0.0017 μs 0.988 ± 0.035
partition/static workgroup, dynamic ndrange 0.0664 ± 0.012 μs 0.065 ± 0.012 μs 1.02 ± 0.27
partition/static workgroup, static ndrange 1.55 ± 0.01 ns 2.47 ± 0.011 ns 0.628 ± 0.0049
saxpy/default/Float16/1024 0.0782 ± 0.019 ms 0.0778 ± 0.021 ms 1.01 ± 0.36
saxpy/default/Float16/1048576 0.778 ± 0.03 ms 0.781 ± 0.03 ms 0.997 ± 0.054
saxpy/default/Float16/16384 0.0645 ± 0.032 ms 0.0661 ± 0.033 ms 0.975 ± 0.69
saxpy/default/Float16/2048 0.0796 ± 0.031 ms 0.0792 ± 0.025 ms 1 ± 0.5
saxpy/default/Float16/256 0.077 ± 0.013 ms 0.0768 ± 0.021 ms 1 ± 0.32
saxpy/default/Float16/262144 0.24 ± 0.03 ms 0.243 ± 0.031 ms 0.991 ± 0.18
saxpy/default/Float16/32768 0.0741 ± 0.029 ms 0.0746 ± 0.031 ms 0.994 ± 0.57
saxpy/default/Float16/4096 0.0818 ± 0.031 ms 0.083 ± 0.029 ms 0.986 ± 0.51
saxpy/default/Float16/512 0.0773 ± 0.017 ms 0.0767 ± 0.019 ms 1.01 ± 0.33
saxpy/default/Float16/64 0.0766 ± 0.021 ms 0.0766 ± 0.021 ms 1 ± 0.38
saxpy/default/Float16/65536 0.0964 ± 0.027 ms 0.0962 ± 0.028 ms 1 ± 0.4
saxpy/default/Float32/1024 0.0766 ± 0.023 ms 0.0766 ± 0.02 ms 0.999 ± 0.39
saxpy/default/Float32/1048576 0.491 ± 0.024 ms 0.491 ± 0.023 ms 1 ± 0.067
saxpy/default/Float32/16384 0.0566 ± 0.028 ms 0.0575 ± 0.031 ms 0.984 ± 0.72
saxpy/default/Float32/2048 0.0756 ± 0.03 ms 0.0764 ± 0.028 ms 0.989 ± 0.54
saxpy/default/Float32/256 0.0767 ± 0.015 ms 0.0768 ± 0.018 ms 1 ± 0.31
saxpy/default/Float32/262144 0.167 ± 0.029 ms 0.168 ± 0.03 ms 0.991 ± 0.25
saxpy/default/Float32/32768 0.0646 ± 0.028 ms 0.0641 ± 0.03 ms 1.01 ± 0.64
saxpy/default/Float32/4096 0.0682 ± 0.032 ms 0.0756 ± 0.032 ms 0.902 ± 0.57
saxpy/default/Float32/512 0.0763 ± 0.019 ms 0.0765 ± 0.016 ms 0.997 ± 0.32
saxpy/default/Float32/64 0.0768 ± 0.013 ms 0.0767 ± 0.02 ms 1 ± 0.31
saxpy/default/Float32/65536 0.0767 ± 0.027 ms 0.0799 ± 0.03 ms 0.96 ± 0.49
saxpy/default/Float64/1024 0.076 ± 0.028 ms 0.0762 ± 0.025 ms 0.997 ± 0.49
saxpy/default/Float64/1048576 0.567 ± 0.077 ms 0.58 ± 0.087 ms 0.977 ± 0.2
saxpy/default/Float64/16384 0.0569 ± 0.025 ms 0.0587 ± 0.028 ms 0.968 ± 0.63
saxpy/default/Float64/2048 0.0749 ± 0.032 ms 0.0763 ± 0.029 ms 0.982 ± 0.57
saxpy/default/Float64/256 0.076 ± 0.013 ms 0.0761 ± 0.022 ms 0.999 ± 0.33
saxpy/default/Float64/262144 0.184 ± 0.035 ms 0.19 ± 0.037 ms 0.972 ± 0.27
saxpy/default/Float64/32768 0.069 ± 0.028 ms 0.0676 ± 0.028 ms 1.02 ± 0.6
saxpy/default/Float64/4096 0.0667 ± 0.03 ms 0.0719 ± 0.029 ms 0.928 ± 0.57
saxpy/default/Float64/512 0.0763 ± 0.025 ms 0.0764 ± 0.016 ms 1 ± 0.39
saxpy/default/Float64/64 0.0771 ± 0.016 ms 0.0771 ± 0.019 ms 1 ± 0.32
saxpy/default/Float64/65536 0.0853 ± 0.029 ms 0.088 ± 0.031 ms 0.969 ± 0.47
saxpy/static workgroup=(1024,)/Float16/1024 0.0746 ± 0.024 ms 0.0744 ± 0.025 ms 1 ± 0.47
saxpy/static workgroup=(1024,)/Float16/1048576 0.775 ± 0.03 ms 0.781 ± 0.03 ms 0.993 ± 0.054
saxpy/static workgroup=(1024,)/Float16/16384 0.0597 ± 0.03 ms 0.0613 ± 0.031 ms 0.974 ± 0.7
saxpy/static workgroup=(1024,)/Float16/2048 0.0761 ± 0.031 ms 0.0764 ± 0.029 ms 0.997 ± 0.56
saxpy/static workgroup=(1024,)/Float16/256 0.0734 ± 0.03 ms 0.0737 ± 0.025 ms 0.995 ± 0.52
saxpy/static workgroup=(1024,)/Float16/262144 0.233 ± 0.031 ms 0.237 ± 0.032 ms 0.983 ± 0.19
saxpy/static workgroup=(1024,)/Float16/32768 0.0704 ± 0.028 ms 0.071 ± 0.029 ms 0.992 ± 0.57
saxpy/static workgroup=(1024,)/Float16/4096 0.077 ± 0.033 ms 0.0792 ± 0.032 ms 0.973 ± 0.57
saxpy/static workgroup=(1024,)/Float16/512 0.0741 ± 0.022 ms 0.0733 ± 0.027 ms 1.01 ± 0.48
saxpy/static workgroup=(1024,)/Float16/64 0.0736 ± 0.02 ms 0.0738 ± 0.024 ms 0.997 ± 0.43
saxpy/static workgroup=(1024,)/Float16/65536 0.0913 ± 0.022 ms 0.0922 ± 0.027 ms 0.99 ± 0.38
saxpy/static workgroup=(1024,)/Float32/1024 0.0739 ± 0.021 ms 0.0735 ± 0.023 ms 1.01 ± 0.43
saxpy/static workgroup=(1024,)/Float32/1048576 0.483 ± 0.022 ms 0.491 ± 0.023 ms 0.984 ± 0.065
saxpy/static workgroup=(1024,)/Float32/16384 0.0536 ± 0.025 ms 0.0557 ± 0.029 ms 0.963 ± 0.67
saxpy/static workgroup=(1024,)/Float32/2048 0.0722 ± 0.03 ms 0.0735 ± 0.028 ms 0.983 ± 0.55
saxpy/static workgroup=(1024,)/Float32/256 0.0737 ± 0.029 ms 0.0732 ± 0.027 ms 1.01 ± 0.55
saxpy/static workgroup=(1024,)/Float32/262144 0.162 ± 0.029 ms 0.17 ± 0.03 ms 0.957 ± 0.24
saxpy/static workgroup=(1024,)/Float32/32768 0.0601 ± 0.025 ms 0.0616 ± 0.027 ms 0.976 ± 0.59
saxpy/static workgroup=(1024,)/Float32/4096 0.065 ± 0.032 ms 0.0692 ± 0.032 ms 0.94 ± 0.63
saxpy/static workgroup=(1024,)/Float32/512 0.0736 ± 0.025 ms 0.0739 ± 0.022 ms 0.996 ± 0.45
saxpy/static workgroup=(1024,)/Float32/64 0.074 ± 0.021 ms 0.0741 ± 0.024 ms 0.999 ± 0.42
saxpy/static workgroup=(1024,)/Float32/65536 0.0734 ± 0.026 ms 0.0773 ± 0.029 ms 0.949 ± 0.49
saxpy/static workgroup=(1024,)/Float64/1024 0.0727 ± 0.029 ms 0.0734 ± 0.028 ms 0.991 ± 0.54
saxpy/static workgroup=(1024,)/Float64/1048576 0.566 ± 0.069 ms 0.56 ± 0.062 ms 1.01 ± 0.17
saxpy/static workgroup=(1024,)/Float64/16384 0.055 ± 0.025 ms 0.0558 ± 0.026 ms 0.985 ± 0.64
saxpy/static workgroup=(1024,)/Float64/2048 0.0716 ± 0.031 ms 0.0735 ± 0.029 ms 0.974 ± 0.57
saxpy/static workgroup=(1024,)/Float64/256 0.0738 ± 0.023 ms 0.0737 ± 0.027 ms 1 ± 0.47
saxpy/static workgroup=(1024,)/Float64/262144 0.185 ± 0.034 ms 0.186 ± 0.034 ms 0.994 ± 0.26
saxpy/static workgroup=(1024,)/Float64/32768 0.0647 ± 0.026 ms 0.0651 ± 0.027 ms 0.994 ± 0.57
saxpy/static workgroup=(1024,)/Float64/4096 0.0601 ± 0.031 ms 0.0655 ± 0.031 ms 0.916 ± 0.63
saxpy/static workgroup=(1024,)/Float64/512 0.0735 ± 0.025 ms 0.0737 ± 0.023 ms 0.997 ± 0.46
saxpy/static workgroup=(1024,)/Float64/64 0.0739 ± 0.024 ms 0.0741 ± 0.024 ms 0.996 ± 0.45
saxpy/static workgroup=(1024,)/Float64/65536 0.0812 ± 0.028 ms 0.0841 ± 0.029 ms 0.967 ± 0.47
time_to_load 0.785 ± 0.00095 s 0.811 ± 0.0036 s 0.968 ± 0.0044
main caa7e16... main / caa7e16...
launch/3D static workgroup, dynamic ndrange 7 allocs: 0.297 kB 7 allocs: 0.297 kB 1
launch/3D static workgroup, static ndrange 8 allocs: 0.328 kB 8 allocs: 0.328 kB 1
launch/dynamic workgroup, dynamic ndrange 17 allocs: 0.469 kB 17 allocs: 0.469 kB 1
launch/dynamic workgroup, dynamic ndrange, workgroupsize given 3 allocs: 0.172 kB 3 allocs: 0.172 kB 1
launch/static workgroup, dynamic ndrange 3 allocs: 0.172 kB 3 allocs: 0.172 kB 1
launch/static workgroup, static ndrange 4 allocs: 0.203 kB 4 allocs: 0.203 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 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float16/1048576 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float16/16384 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float16/2048 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float16/256 18 allocs: 0.484 kB 18 allocs: 0.484 kB 1
saxpy/default/Float16/262144 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float16/32768 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float16/4096 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float16/512 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float16/64 18 allocs: 0.484 kB 18 allocs: 0.484 kB 1
saxpy/default/Float16/65536 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float32/1024 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float32/1048576 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float32/16384 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float32/2048 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float32/256 18 allocs: 0.484 kB 18 allocs: 0.484 kB 1
saxpy/default/Float32/262144 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float32/32768 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float32/4096 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float32/512 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float32/64 18 allocs: 0.484 kB 18 allocs: 0.484 kB 1
saxpy/default/Float32/65536 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float64/1024 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float64/1048576 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float64/16384 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float64/2048 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float64/256 18 allocs: 0.484 kB 18 allocs: 0.484 kB 1
saxpy/default/Float64/262144 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float64/32768 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float64/4096 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float64/512 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/default/Float64/64 18 allocs: 0.484 kB 18 allocs: 0.484 kB 1
saxpy/default/Float64/65536 26 allocs: 0.609 kB 26 allocs: 0.609 kB 1
saxpy/static workgroup=(1024,)/Float16/1024 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float16/1048576 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float16/16384 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float16/2048 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float16/256 3 allocs: 0.172 kB 3 allocs: 0.172 kB 1
saxpy/static workgroup=(1024,)/Float16/262144 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float16/32768 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float16/4096 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float16/512 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float16/64 3 allocs: 0.172 kB 3 allocs: 0.172 kB 1
saxpy/static workgroup=(1024,)/Float16/65536 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float32/1024 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float32/1048576 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float32/16384 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float32/2048 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float32/256 3 allocs: 0.172 kB 3 allocs: 0.172 kB 1
saxpy/static workgroup=(1024,)/Float32/262144 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float32/32768 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float32/4096 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float32/512 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float32/64 3 allocs: 0.172 kB 3 allocs: 0.172 kB 1
saxpy/static workgroup=(1024,)/Float32/65536 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float64/1024 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float64/1048576 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float64/16384 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float64/2048 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float64/256 3 allocs: 0.172 kB 3 allocs: 0.172 kB 1
saxpy/static workgroup=(1024,)/Float64/262144 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float64/32768 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float64/4096 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float64/512 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
saxpy/static workgroup=(1024,)/Float64/64 3 allocs: 0.172 kB 3 allocs: 0.172 kB 1
saxpy/static workgroup=(1024,)/Float64/65536 6 allocs: 0.219 kB 6 allocs: 0.219 kB 1
time_to_load 0.201 k allocs: 11.8 kB 0.201 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).

@codecov

codecov Bot commented Sep 15, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 65.40%. Comparing base (d1e71f4) to head (166d4d6).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #784      +/-   ##
==========================================
+ Coverage   65.04%   65.40%   +0.36%     
==========================================
  Files          23       23              
  Lines        2017     2012       -5     
==========================================
+ Hits         1312     1316       +4     
+ Misses        705      696       -9     

☔ 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.

Comment thread docs/src/api.md Outdated
…blic

Review feedback. `@ka_code_typed` reflects on the host-side lowering of a kernel
just as `@ka_code_llvm` did, and `@device_code_typed` covers what it was for --
including the Cthulhu `interactive=true` path -- so it goes too.

It was the only user of InteractiveUtils and UUIDs in the package, so both drop
out of the dependencies. test/reflection.jl only ever exercised
`@ka_code_typed`, so it goes as well, along with its `Testsuite` entry.

The forwarded `@device_code_*` macros are now marked `public` on 1.11 and later,
through `Meta.parse` since `public` is a parse error on 1.10.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DbbtGLjxXpt7kZj6h2yVdK
@vchuravy
vchuravy merged commit e6be186 into main Sep 15, 2026
76 of 78 checks passed
@vchuravy
vchuravy deleted the vc/device-code-reflection branch September 15, 2026 09:38
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.

2 participants