Live data from Hacker News

C Compiler to SPIR-V

github.com

1–10 of 12 posts

Re: C Compiler to SPIR-V

#2
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.

Re: C Compiler to SPIR-V

#5
post #4

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")]]`.

Re: C Compiler to SPIR-V

#6
post #2

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 o…

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.

Re: C Compiler to SPIR-V

#8
post #5
post #4

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 di…

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.

Post reply on HN