Porting Clang to a new architecture

2015-10-26 Thread Ariel Arelovich via cfe-commits
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?

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?

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).
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: Porting Clang to a new architecture

2015-10-26 Thread Ariel Arelovich via cfe-commits
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?

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 
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


Re: Porting Clang to a new architecture

2015-11-02 Thread Ariel Arelovich via cfe-commits
Yes!

Thank you. I've begun reading up on this, and it is effectively what I want
to do. I working on modifying LLVM code.

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?

Or by simply writing a  new backend everything else is done by the front
end?

I have tried asking on the cfe-devs but the list is more technical than
anything else so I don't get nay answers.

I would appreciate if anyone could point me in the direction where to read
about this. (c standard libraries in a new arquitecture)

On Sun, Nov 1, 2015 at 9:45 PM, Justin Bogner  wrote:

> Ariel Arelovich via cfe-commits  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