sylware 6 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 6 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 5 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__ 6 days ago

Haven't actually used this project yet, but I occasionally stop by his stream on twitch. Legend.

binary132 6 days ago

This looks very promising on the surface. I wonder how it compares to clspv?

c1b 6 days ago

does this also already exist on llvm toolchain?

  • Conscat 6 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 6 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.