[LLVMdev] trig language-like code generator generator

Chris Lattner sabre at nondot.org
Mon Apr 25 08:33:19 PDT 2005


On Mon, 25 Apr 2005, Tzu-Chien Chiu wrote:
> 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.

Hrm, can you give a specific example of the problem you are worried about?

> in which direction llvm team heads?

The way I described :)

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

The optimizations are currently very simple, in SelectionDAG.cpp.  They 
are currently limited to folding things like (X + 0) -> X and other 
similar things.  Eventually they will become a full file/pass on their 
own.

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

This is incorrect.  LLVM has two low-level intermediate representations: 
the selection DAG and the MachineInstr/MachineBB representation.  DCE and 
local CSE is implicit in the DAG construction and machine 
idioms/instruction combining are exactly what instruction selection is all 
about!

Other optimization when they exist (e.g. modulo scheduling) will run after 
instruction selection when the machine instrs/machine bb's are available. 
This is the representation we perform register allocation on etc.

-Chris

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

-Chris

-- 
http://nondot.org/sabre/
http://llvm.cs.uiuc.edu/




More information about the llvm-dev mailing list