<div dir="ltr">Yes!<div><br></div><div>Thank you. I've begun reading up on this, and it is effectively what I want to do. I working on modifying LLVM code. </div><div><br></div><div>One question that I still can't answer is the whole standard libraries. Are these precompiled for a given backend? Do I need to write them for my proposed arquitecture?</div><div><br></div><div>Or by simply writing a  new backend everything else is done by the front end?</div><div><br></div><div>I have tried asking on the cfe-devs but the list is more technical than anything else so I don't get nay answers.</div><div><br></div><div>I would appreciate if anyone could point me in the direction where to read about this. (c standard libraries in a new arquitecture)</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Nov 1, 2015 at 9:45 PM, Justin Bogner <span dir="ltr"><<a href="mailto:mail@justinbogner.com" target="_blank">mail@justinbogner.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">Ariel Arelovich via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> writes:<br>
> Great.<br>
><br>
> So this is what I wanted to know. I think understand what you are saying.<br>
> You are saying that most of the work that I would need to do from the AST<br>
> (I'm assuming that this stands from Abstract Syntax Tree) is allready being<br>
> done by LLVM and I should look to modify for a my new arquitecture. Right?<br>
<br>
</span>This is close, but a little bit off. Clang generates an AST, but then<br>
transforms it further into the LLVM intermediate language[1]. LLVM can<br>
generate code for a number of target architectures from this language.<br>
It sounds to me like what you want to do is write an LLVM backend for<br>
your target. There is some documentation[2] on how to do that, which<br>
should give you an idea of what you would need to do to leverage LLVM<br>
for your project.<br>
<br>
[1]: <a href="http://llvm.org/docs/LangRef.html" rel="noreferrer" target="_blank">http://llvm.org/docs/LangRef.html</a><br>
[2]: <a href="http://llvm.org/docs/WritingAnLLVMBackend.html" rel="noreferrer" target="_blank">http://llvm.org/docs/WritingAnLLVMBackend.html</a><br>
<div><div class="h5"><br>
> If I take the AST and process it myself to generate the opcodes, I'm<br>
> essentially writing LLVM just less efficient (no optimizations) and<br>
> specific for the new architecure, right?<br>
><br>
><br>
><br>
> On Mon, Oct 26, 2015 at 12:32 PM, Saleem Abdulrasool <<a href="mailto:compnerd@compnerd.org">compnerd@compnerd.org</a>><br>
> wrote:<br>
><br>
>> On Monday, October 26, 2015, Ariel Arelovich via cfe-commits <<br>
>> <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br>
>><br>
>>> Hi:<br>
>>><br>
>>> Where I'm working I've been asked to look into developing a C (by this I<br>
>>> mean C89 C standard) compiler a new processor architecture being created<br>
>>> inhouse.<br>
>>><br>
>>> On looking at the options and brushing up on compiler theory, I came up<br>
>>> with Flex/Bison, Writing the compiler from scratch or use Clang. I liked<br>
>>> this option better because parsing and and analyzing c code to genereate<br>
>>> somthing intermediate, and do this from scratch, seemed like reinventing<br>
>>> the wheel (an incredibly complex wheel, at that).<br>
>>><br>
>>> I've figured that if Clang, works with the standard compiler flow (that<br>
>>> I've seen everywhere), it takes a C program and transforms it until it gets<br>
>>> a intermediate language (which is machine independant). The Dragon Book,<br>
>>> even calls this the output of the compiler Front End. From what I've read<br>
>>> from the documentation This is what Clang is: a compiler front end. LLVM<br>
>>> does optimization and translation to opcodes of known architectures. Is<br>
>>> this correct? Or am I getting this wrong?<br>
>>><br>
>><br>
>> Correct.  clang is just the front end for C-like languages.  It will parse<br>
>> and analyze the code (generating the AST).  The IR it generates is the LLVM<br>
>> IR.<br>
>><br>
>> So, my question is: Would it be possible to use Clang in such a way that<br>
>>> it takes a C program and generates an intermediate language so that I can<br>
>>> work directly on that language to generate opcodes based on the<br>
>>> architecture that we are currently developing?<br>
>>><br>
>><br>
>> Yes.  This is how clang already works.  It sounds like you should be<br>
>> looking at LLVM, not clang since you are trying to support a new<br>
>> architecture, not a language feature.<br>
>><br>
>><br>
>>><br>
>>> Thank you, for any answers.<br>
>>><br>
>>> PD: I know my question might be very hard to answer as it is not very<br>
>>> specific. All I'm asking for, here, is a simple: "It could be done, start<br>
>>> reading about this and that" or "It will be next to impossible, just try<br>
>>> something else" (with a little explanation as to why, if that were<br>
>>> possible, please).<br>
>>><br>
>><br>
>><br>
>> --<br>
>> Saleem Abdulrasool<br>
>> compnerd (at) compnerd (dot) org<br>
>><br>
</div></div>> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>