[LLVMdev] Thoughts about the llvm architecture -

Xerxes RĂ„nby xerxes at zafena.se
Fri Sep 3 05:50:54 PDT 2010


On 2010-09-03 13:19, Jochen Wilhelmy wrote:
>   
>>> Hi!
>>>
>>> The following thoughts about the llvm architecture I'd like to share 
>>> with you
>>> (from the perspective of a user):
>>>
>>> - If a backend has no vector support, then I wonder why there is no 
>>> de-vectorization
>>> pass that operates on indermediate llvm-ir. I would think that if you 
>>> use such a target
>>> then you have to insert a target independent pass before it that it does 
>>> not have to
>>> care about vector code. The advantage is that constant vector components 
>>> can already
>>> be handled by instcombine. what do you think?
>>>
>>> - If the integer width of a backend is smaller than the integers in the 
>>> llvm-ir (e.g.
>>> an 8 bit microcontroller) then i also would expect a target independent 
>>> integer
>>> splitting.  the difficulty here is how to handle carry in the ir. but the 
>>> advantage would
>>> be that if i have e.g. int32_t a = 5 then three of the four bytes are 
>>> zero and can
>>> be optimized by instcombine. I have seen very bad code in the output of 
>>> avr-gcc in this case.
>>>     
>>>       
>> Legalize and DAG combine already handle these cases.  Why would we want to duplicate the code?
>>
>>   
>>     
> But what is the output of legalize and DAG combine? Is it llvm-ir again?
>   
No, the output after legalize and DAG combine are a modified selection
DAG graph.
This selection DAG graph later gets converted into MachineInstrs after
scheduling.

All this are CodeGen specific and "lower" than LLVM IR.
> I think I still miss some of the "big picture". Is there an architecture 
> chart that shows the pipeline
> stages of llvm and what is done where?
>   
This presentation from 2008 by Dan Gohman describes the various pipeline
stages that happens during CodeGen.
And explains the bigger picture on how LLVM IR are converted by the
CodeGen into a leagal stream of MachineInstr.

Slides:
http://llvm.org/devmtg/2008-08/Gohman_CodeGenAndSelectionDAGs.pdf
Video:
http://llvm.org/devmtg/2008-08/Gohman_CodeGenAndSelectionDAGs_Hi.m4v

For more info see
http://llvm.org/docs/CodeGenerator.html

> For example it seems that ligalization takes place after instcombine, 
> but I would think it
> should happen before instcombine.
>   
The combine phase are actually run twice

Combine
Legalize
Combine

> -Jochen
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>   

Hope this helps, Cheers
Xerxes




More information about the llvm-dev mailing list