[LLVMdev] Initial thoughts on an LLVM backend for N-address generic assembly
nkavv at physics.auth.gr
nkavv at physics.auth.gr
Thu Jan 24 03:46:45 PST 2013
Hi all,
i'm just starting out with LLVM (although i've been observing its
evolution since that first release some years ago :)
I would like to develop a backend for a generic assembly-like
language, called NAC (N-Address Code). More info on NAC can be found
here:
http://www.nkavvadias.com/hercules/nac-refman.html (HTML)
http://www.nkavvadias.com/hercules/nac-refman.pdf (PDF)
You can consider NAC similar to an LLVM subset for hardware synthesis.
Although NAC was developed independently, certain decisions taken when
designing it, may or may not defer from other textual IRs like LLVM or
PTX.
I have a number of questions:
1) It seems to me that a template backend either the C backend or
NVPTX are possible starting points. However, only NVPTX makes use of
tblgen which removes some burder from the backend developer. I also
think that a tblgen-based backend like NVPTX is easier to maintain in
the long term. What do you think?
2) NAC uses the following statement form (for any given statement):
dst1, dst2, ..., dstm <= op src1, src2, ..., srcn;
which expresses an operation op with n source operands and m
destination operands. Do you think that tblgen supports such form or
should I sanitize it?
3) The NAC memory model uses separate address spaces per array. A
general-use stack/heap might also be supported. Should I use dot
directives to declare each address space in use for a given
translation unit/module?
4) What is the maximum that I can get from tblgen? Which C++ source
files cannot be generated by .td files and always have to be coded by
hand?
In the end, source code for the LLVM->NAC backend and a NAC
interpreter will be released, probably as third-party BSD-licensed
tools.
Best regards
Nikolaos Kavvadias
More information about the llvm-dev
mailing list