Ariel Arelovich via cfe-commits <cfe-commits@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 <compn...@compnerd.org> > wrote: > >> On Monday, October 26, 2015, Ariel Arelovich via cfe-commits < >> cfe-commits@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits