This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: SPIR-V and GCC

> This great article explans better
> what SPIR-V is.

Another use-case that occurred to me when I was looking at the link you
posted above: using gcc for optimizing SPIR-V and compiling it e.g. to
CPU code.

As of gcc 5, libgccjit can be hooked up to a pre-existing language
frontend, with the gcc backend emitting machine code for the CPU,
assuming that the frontend is license-compatible with libgccjit's
GPLv3-or-later.  See this example, which uses libgccjit to build a
compiler for brainf**k:

So if there's a SPIR-V loader library that's license-compatible, you
could write code to inject SPIR-V into libgccjit, and call
gcc_jit_context_compile_to_file on it to optimize it and turn it into
machine code.

That use-case is probably doable today using gcc 5 (and could be written
in C, C++, Python, or D, with the bindings we already have).
Potentially such a library could also generate other kinds of code,
including e.g. optimized SPIR-V... but that requires both (i) a gcc
backend for the desired target code and (ii) libgccjit to support
cross-compilation (which as I mentioned would probably be a gcc 6

Yep, that's another use-case, which might be used by free drives (Intel, AMD, Lima, etc.).

I'm probably not the best person to help, as I've not written a gcc
backend (the jit counts as a frontend, albeit a very unusual one).  FWIW
there seems to be a good tutorial on writing backends here:

Thanks a lot for the link, it helped me a lot (I found this [0] one quite good).

I checked them a little bit and I'm afraid it might be a a few problems to create a SPIR-V backend:

1. SPIR-V a binary Intermediate Language format but it's still not machine code. It seems gcc backends produces a text machine code, so I think will not be possible to produce SPIR-V a binary format directly from GCC backend.

2. Because SPIR-V is not a machine format, it doesn't have any registers. Instead it's using IDs for everything [1]. I didn't find a way to create IDs instead of registers in GCC.

3. SPIR-V supports some "non-standard" types[2], will it be a problems to support these types in GCC frontend/backend?



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]