[HN Gopher] C Compiler to SPIR-V
       ___________________________________________________________________
        
       C Compiler to SPIR-V
        
       Author : bwidlar
       Score  : 58 points
       Date   : 2024-11-16 10:49 UTC (12 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | sylware wrote:
       | 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 wrote:
         | 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.
        
       | jesse__ wrote:
       | Haven't actually used this project yet, but I occasionally stop
       | by his stream on twitch. Legend.
        
       | c1b wrote:
       | does this also already exist on llvm toolchain?
        
         | Conscat wrote:
         | 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")]]`.
        
       ___________________________________________________________________
       (page generated 2024-11-16 23:00 UTC)