Porting Clang to a new architecture

Justin Bogner via cfe-commits cfe-commits at lists.llvm.org
Sun Nov 1 16:45:33 PST 2015

Ariel Arelovich via cfe-commits <cfe-commits at lists.llvm.org> writes:
> Great.
> So this is what I wanted to know. I think understand what you are saying.
> You are saying that most of the work that I would need to do from the AST
> (I'm assuming that this stands from Abstract Syntax Tree) is allready being
> done by LLVM and I should look to modify for a my new arquitecture. Right?

This is close, but a little bit off. Clang generates an AST, but then
transforms it further into the LLVM intermediate language[1]. LLVM can
generate code for a number of target architectures from this language.
It sounds to me like what you want to do is write an LLVM backend for
your target. There is some documentation[2] on how to do that, which
should give you an idea of what you would need to do to leverage LLVM
for your project.

[1]: http://llvm.org/docs/LangRef.html
[2]: http://llvm.org/docs/WritingAnLLVMBackend.html

> If I take the AST and process it myself to generate the opcodes, I'm
> essentially writing LLVM just less efficient (no optimizations) and
> specific for the new architecure, right?
> On Mon, Oct 26, 2015 at 12:32 PM, Saleem Abdulrasool <compnerd at compnerd.org>
> wrote:
>> On Monday, October 26, 2015, Ariel Arelovich via cfe-commits <
>> cfe-commits at lists.llvm.org> wrote:
>>> Hi:
>>> Where I'm working I've been asked to look into developing a C (by this I
>>> mean C89 C standard) compiler a new processor architecture being created
>>> inhouse.
>>> On looking at the options and brushing up on compiler theory, I came up
>>> with Flex/Bison, Writing the compiler from scratch or use Clang. I liked
>>> this option better because parsing and and analyzing c code to genereate
>>> somthing intermediate, and do this from scratch, seemed like reinventing
>>> the wheel (an incredibly complex wheel, at that).
>>> I've figured that if Clang, works with the standard compiler flow (that
>>> I've seen everywhere), it takes a C program and transforms it until it gets
>>> a intermediate language (which is machine independant). The Dragon Book,
>>> even calls this the output of the compiler Front End. From what I've read
>>> from the documentation This is what Clang is: a compiler front end. LLVM
>>> does optimization and translation to opcodes of known architectures. Is
>>> this correct? Or am I getting this wrong?
>> Correct.  clang is just the front end for C-like languages.  It will parse
>> and analyze the code (generating the AST).  The IR it generates is the LLVM
>> IR.
>> So, my question is: Would it be possible to use Clang in such a way that
>>> it takes a C program and generates an intermediate language so that I can
>>> work directly on that language to generate opcodes based on the
>>> architecture that we are currently developing?
>> Yes.  This is how clang already works.  It sounds like you should be
>> looking at LLVM, not clang since you are trying to support a new
>> architecture, not a language feature.
>>> Thank you, for any answers.
>>> PD: I know my question might be very hard to answer as it is not very
>>> specific. All I'm asking for, here, is a simple: "It could be done, start
>>> reading about this and that" or "It will be next to impossible, just try
>>> something else" (with a little explanation as to why, if that were
>>> possible, please).
>> --
>> Saleem Abdulrasool
>> compnerd (at) compnerd (dot) org
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

More information about the cfe-commits mailing list