[LLVMdev] trig language-like code generator generator

Tzu-Chien Chiu tzuchien.chiu at gmail.com
Mon Apr 25 03:17:52 PDT 2005


the proposed architecture (chris) doesn't seem to attack the phase
ordering problem. through having independent instruction selection,
instruction scheduling, and register allocation phases faciliate a
modular design, but i believe the phase-coupled code generator
generator high quality code on many architectures. espeically in the
embedded system like a media/dsp processors with very limited
resources and highly respects energy saving.

in which direction llvm team heads?

you (chris) didn't mention the optimization code in #1 - #4, and i
cannot find the optimization code in the step 2 and step 4 mentioned
in:
  http://llvm.cs.uiuc.edu/docs/CodeGenerator.html#selectiondag_process
i don't know if the optimization doesn't existing (a doc bug) or you
just miss them?

another question raises. unlike "coins"
(http://www.coins-project.org/international/), there is only one high
level ir (immediate representation) in the llvm. a low-level ir is
lacked for low-level optimizations like dead code elimination, machine
idioms and instruction combining. at present these low-level
optimization passes/modules must be implementation ad hoc for each
target. there is no low-level target-independent optimization passes.

please correct me if i am wrong.

On 4/25/05, Chris Lattner <sabre at nondot.org> wrote:
> On Mon, 25 Apr 2005, Tzu-Chien Chiu wrote:
> > i'd like to know what progress you guys have made (not on cvs?).
> 
> Everything is in CVS.  Noone is currently working on automating the
> pattern matching generator process yet.  Before doing that, there are a
> few changes we want to make to the SelectionDAG interface.  In particular,
> right now, the selection process basically works like this:
> 
> #1. Convert LLVM code to the Selection DAG (and simplify it)
> #2. Legalize the selection DAG to only use operations the target supports
>      (and simplify the result)
> #3. Use ad-hoc .cpp files to convert the selection dag to a stream of
>      linearized machine basic blocks and machine instructions.
> 
> Before automating step #3, we want to change it so that the process looks
> like this:
> 
> #1. (as above)
> #2. (as above)
> #3. Use ad-hoc .cpp files (adapted from our current ones obviously) to
>      convert from the target-independent DAG to a target specific DAG.
>      This is the "instruction selection is tree/dag covering" approach to
>      instruction selection.  The output of this is a DAG.
> #4. Use an algorithm seperate from #3 to pick an ordering (i.e. schedule)
>      of the dag nodes and convert them to machine instructions/mbb's.
> 
> Once we do this separation, automating #3 is much easier (it needs to know
> less about how the target handles instructions and it makes it easier to
> describe the pattern matching operations).
> 
> > i don't want to re-invent wheels, and the existing many code generator
> > generators. i am evaluating many possbile code generation libraries.
> > at present i give me preferrence to "Prop":
> >
> >  http://www.cs.nyu.edu/leunga/www/prop.html
> > and it's portable too.
> 
> Interesting.  I wasn't aware of this work.  Our plan wasn't to encode the
> tree pattern matches directly in the .cpp files (as I believe prop does).
> Instead, we plan to encode the patterns for each instruction in the .td
> files, which are parsed by the tablegen tool.  Tablegen then parses these
> files and emits various chunks of the code generator.  It would emit the
> instruction selector from the patterns in the .td file.
> 
> -Chris
> 
> > On 4/25/05, Chris Lattner <sabre at nondot.org> wrote:
> >> On Mon, 25 Apr 2005, Tzu-Chien Chiu wrote:
> >>> http://portal.acm.org/citation.cfm?id=75700
> >>
> >> Oh, tWig.  :)  Yes, tree pattern matching is exactly the direction we are
> >> heading.  We are slowly making the code generators more and more
> >> automatically generated as time goes on.  The SelectionDAG infrastructure
> >> is mean to support exactly this (perform Tree or DAG pattern matching on
> >> the optimized DAG instead of on the LLVM code).
> >>
> >> This is described here:
> >> http://llvm.cs.uiuc.edu/docs/CodeGenerator.html
> >>
> >> Currently, we use simple greedy bottom-up matchers that are manually
> >> written in the <target>ISelPattern.cpp file.  The plan is to extend this
> >> by allowing targets to write the DAG pattern for each instruction in the
> >> .td files, then build use an optimal code generator generator to emit the
> >> matching code.
> >>
> >> This processes of increased automation has been happening slowly over the
> >> years, but we've made good progress.  Are you interested in helping out?
> >>
> >> -Chris
> >>
> >>> On 4/25/05, Chris Lattner <sabre at nondot.org> wrote:
> >>>> On Sun, 24 Apr 2005, Tzu-Chien Chiu wrote:
> >>>>> i'd like to know if there is any plan or existing work to add a Aho's
> >>>>> trig language like code generator generator?
> >>>>
> >>>> Trig is a code generator generator?  Is there any documentation for it
> >>>> available anywhere?
> >>>>
> >>>> -Chris
> >>>>
> >>>>> "...If you are starting a new port, we recommend that you write the
> >>>>> instruction selector using the SelectionDAG infrastructure."
> >>>>>
> >>>>> any other things i should know before i write one?
> >>>>>
> >>>>> thank you.
> >>>>>
> >>>>> _______________________________________________
> >>>>> LLVM Developers mailing list
> >>>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> >>>>> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
> >>>>>
> >>>>
> >>>> -Chris
> >>>>
> >>>> --
> >>>> http://nondot.org/sabre/
> >>>> http://llvm.cs.uiuc.edu/
> >>>>
> >>>
> >>> _______________________________________________
> >>> LLVM Developers mailing list
> >>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> >>> http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev
> >>>
> >>
> >> -Chris
> >>
> >> --
> >> http://nondot.org/sabre/
> >> http://llvm.cs.uiuc.edu/
> >>
> >
> 
> -Chris
> 
> --
> http://nondot.org/sabre/
> http://llvm.cs.uiuc.edu/
>




More information about the llvm-dev mailing list