Have a look at QBE as it may provide basic optimizations and some significant performant boost: cproc + QBE and I get 70% of gcc 13.2 -O2 speed in my benchmarks, tinycc is 2 times slower than gcc 13.2 -O2 in the same benchmarks (my benchmarks are very basic, but it shows...).
We are talking gcc complexity is grotesque/absurd for those 30%, not to mention this is now brain damaged c++ (one of the biggest mistakes in open source software ever).
I know QBE is for CPUs, but maybe there is something there for GPUs.
That link just says that the maintainer of the fork mpu for hare has no will nor abilities to add full SIMD support. But qbe is still written and maintained by Brian Callahan here: https://c9x.me/compile/
Not really. LLVM does support compute mode SPIR-V, and _very_ recently graphics-mode SPIR-V which is being dogfooded by the highly WIP HLSL front-end in Clang (I couldn't get a trivial fragment shader to build with it a few weeks ago). Clang does not support compiling graphics-mode SPIR-V from C or C++.
This seems similar to the Vulkan Clang Compiler (which is not in-tree of LLVM), although it has some interesting differences such as implementing shader functions with new specifiers like `__hcc_vertex` rather than repurposing attributes for it like `[[clang::annotate("shady::entry_point::vertex")]]`.
Though my understanding is that it's a complete hackjob stuck on an old version of LLVM, and not in a remotely upstream-able state and breaks other parts of the LLVM toolchain completely. I think there was talk about trying to clean that up at the same time as bringing the baseline version forward, but I have no idea about it's progress.
Have a look at QBE as it may provide basic optimizations and some significant performant boost: cproc + QBE and I get 70% of gcc 13.2 -O2 speed in my benchmarks, tinycc is 2 times slower than gcc 13.2 -O2 in the same benchmarks (my benchmarks are very basic, but it shows...).
We are talking gcc complexity is grotesque/absurd for those 30%, not to mention this is now brain damaged c++ (one of the biggest mistakes in open source software ever).
I know QBE is for CPUs, but maybe there is something there for GPUs.
QBE has no support for SIMD last I looked into it, so I don't think it would be appropriate for an SPMD language. https://todo.sr.ht/~mpu/qbe/5
It's common for shader compilers to invent their own IR, like Shadey and Slang IR.
That link just says that the maintainer of the fork mpu for hare has no will nor abilities to add full SIMD support. But qbe is still written and maintained by Brian Callahan here: https://c9x.me/compile/
Haven't actually used this project yet, but I occasionally stop by his stream on twitch. Legend.
Similar project but for Rust: https://github.com/Rust-GPU/rust-gpu
This looks very promising on the surface. I wonder how it compares to clspv?
does this also already exist on llvm toolchain?
Not really. LLVM does support compute mode SPIR-V, and _very_ recently graphics-mode SPIR-V which is being dogfooded by the highly WIP HLSL front-end in Clang (I couldn't get a trivial fragment shader to build with it a few weeks ago). Clang does not support compiling graphics-mode SPIR-V from C or C++.
This seems similar to the Vulkan Clang Compiler (which is not in-tree of LLVM), although it has some interesting differences such as implementing shader functions with new specifiers like `__hcc_vertex` rather than repurposing attributes for it like `[[clang::annotate("shady::entry_point::vertex")]]`.
The Microsoft HLSL compiler for dx12+ is based on LLVM and supports spir-v output https://github.com/microsoft/DirectXShaderCompiler
Though my understanding is that it's a complete hackjob stuck on an old version of LLVM, and not in a remotely upstream-able state and breaks other parts of the LLVM toolchain completely. I think there was talk about trying to clean that up at the same time as bringing the baseline version forward, but I have no idea about it's progress.
The progress is that DirectX will also support SPIR-V, going forward.
https://devblogs.microsoft.com/directx/directx-adopting-spir...
There seems to be documentation about it:
https://llvm.org/docs/SPIRVUsage.html