[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 08:33:41 PST 2013
Hi Justin
> It really depends on your goals and the abstractions provided by the target
> IR. For NVPTX, we use a traditional LLVM back-end approach (using TableGen
> and the SelectionDAG/MachineInstr/MC infrastructure) because PTX is
> low-level enough to be treated as an assembly language.
I consider NAC (N-Address Code) to be comparably low-level to PTX
(AFAICS from PTX ver. 3.1 PDF).
> If your IR is more like LLVM IR, then it may make sense to do some kind of
> direct translation from LLVM IR to your IR and bypass the traditional
> codegen approach.
It seems to be that NAC has more resemblance to PTX than LLVM. That,
there is e.g. a PHI instruction that works in the same way as in LLVM.
I gave thoughts of writing an external translator, but i'm afraid that
it would be obsoleted if some dramatic change happens to the LLVM
infrastructure. A backend would be maintainable in the longer term.
> For PTX, we have to walk a fine line compared to other back-ends
> because PTX is not the machine ISA.
Similarly, NAC is not a specific ISA but a generic, assembly-like,
input to a high-level synthesis process, mostly involving CDFG
mapping, operation scheduling, state assignments, resource allocation
and RTL code generation. The result is a hardware-only
(non-programmable) architecture that implements the input program.
Regarding machine-independent optimizations, I would basically use
whatever is supported by LLVM's "opt". Target-dependent optimizations,
do happen, but as part of the high-level synthesis backend.
> If your IR is meant
> for optimization passes, then it may not make sense to perform all of the
> back-end optimizations available through LLVM, but just use the middle-end
> optimizations performed on LLVM IR directly.
I agree, this is my intention. The IR is meant as an LLVM
simplification and subset for hardware synthesis.
Best regards
Nikolaos Kavvadias
More information about the llvm-dev
mailing list