NHacker Next
  • new
  • past
  • show
  • ask
  • show
  • jobs
  • submit
C Compiler to SPIR-V (github.com)
sylware 5 days ago [-]
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.

Conscat 4 days ago [-]
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.

rurban 4 days ago [-]
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/
jesse__ 4 days ago [-]
Haven't actually used this project yet, but I occasionally stop by his stream on twitch. Legend.
LegNeato 4 days ago [-]
Similar project but for Rust: https://github.com/Rust-GPU/rust-gpu
binary132 4 days ago [-]
This looks very promising on the surface. I wonder how it compares to clspv?
c1b 4 days ago [-]
does this also already exist on llvm toolchain?
Conscat 4 days ago [-]
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")]]`.

kimixa 4 days ago [-]
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.

pjmlp 4 days ago [-]
The progress is that DirectX will also support SPIR-V, going forward.

https://devblogs.microsoft.com/directx/directx-adopting-spir...

pabs3 4 days ago [-]
There seems to be documentation about it:

https://llvm.org/docs/SPIRVUsage.html

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact
Rendered at 07:19:09 GMT+0000 (Coordinated Universal Time) with Vercel.