[llvm-dev] Hello

Eric Astor via llvm-dev llvm-dev at lists.llvm.org
Sat Jan 9 19:05:13 PST 2021


Mihir,

In case it helps - the "-emit-llvm" option works very well on Compiler
Explorer. For instance:
https://godbolt.org/z/9brhdG
shows the LLVM-IR results of compiling your C++ example with and without
-O1. (-O2 gets the same results in this case.)

As a general rule, I'd think that producing better IR from your frontend
will only help the overall pipeline, except in rare cases where it might
reveal a weakness in an analysis pass further down the line... but it may
not be *necessary*, if the optimizer is capable of producing good results
from whatever you output.

- Eric

On Sat, Jan 9, 2021 at 9:59 PM Stefanos Baziotis via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> >  If you have a book recommendation on those basics which explains them
> in depth :D please share.
>
> Unfortunately, I don't. I learned LLVM IR basically by implementing a
> front-end, trying things on Godbolt and sometimes reading the LangRef. So,
> I know these can work because of experience.
>
> That said, this book:
> https://www.amazon.com/LLVM-Essentials-familiar-infrastructure-libraries-ebook/dp/B0166Y6Z34
> seems to be more suited to your needs (but
> again, I have not read it, just skimmed through it).
>
> > I am confused that if I do that without -O2 then what will be the
> implication?
>
> Sorry, but this question is unclear to me. I guess I see two possible
> questions:
> 1) What if I write the optimized version myself and give it to the
> compiler ?
> If you write it in ASM, the compiler doesn't have much of a saying... You
> are responsible for it to be correct, fast etc.
>
> 2) What is the difference between the two versions?
> Among other things the second has no loads / stores, does not use the
> stack etc.
>
> I'm not sure if any of those was your question.
>
> Best,
> Stefanos
>
>
> Στις Κυρ, 10 Ιαν 2021 στις 3:35 π.μ., ο/η Mihir Sevak <
> mihir.sevak at gmail.com> έγραψε:
>
>> HI Stefanos,
>>     I take your advice by heart. I will practice the basics. If you have
>> a book recommendation on those basics which explains them in depth :D
>> please share. I have seen the video you shared a few times as I get lost in
>> between but I still feel hungry for more.
>> Second part lets say this function is a C/C++ function. Ideally we should
>> be inlining it but lets leave it as is for our discussion. Following are
>> two different version of same code. I tend to write my code more like
>> optimized version. I am confused that if I do that without -O2 then what
>> will be the implication?
>> int square(int num) {
>>     return num * num;
>> }
>>
>> /// Without Optimization turned on
>> square(int):                             # @square(int)
>>         push    rbp
>>         mov     rbp, rsp
>>         mov     dword ptr [rbp - 4], edi
>>         mov     eax, dword ptr [rbp - 4]
>>         imul    eax, dword ptr [rbp - 4]
>>         pop     rbp
>>         ret
>>
>>
>> /// After Optimizing turning on
>> square(int):                             # @square(int)
>>         mov     eax, edi
>>         imul    eax, edi
>>         ret
>>
>> On Sat, Jan 9, 2021 at 5:22 PM Stefanos Baziotis <
>> stefanos.baziotis at gmail.com> wrote:
>>
>>> >  This is great, thank you so much!
>>>
>>> Np :)
>>>
>>> >  I have read them and conceptually I understand them but I am afraid I
>>> can't write them on my own.
>>>
>>> I'd work a little bit more on those and godbolt can help a lot :) You
>>> can always see what the compiler does.
>>>
>>> > Do you know how I can learn about differences between IRs when
>>> optimizing is turned on vs. when it is not turned on?
>>>
>>> What do you mean ? Like, why did something happen ? Or, why is one
>>> version faster than the other ? Or sth else ?
>>>
>>> >  If there are many people on this list who might be interested in this
>>> topic then we can remove spamming everyone on this list by including
>>> llvm-dev. You guys decide.
>>>
>>> I didn't get that... :) llvm-dev is "included", it's CC'd. In any case,
>>> it's ok, I don't think we're spamming anyone in llvm-dev.
>>>
>>> - Stefanos
>>>
>>> Στις Κυρ, 10 Ιαν 2021 στις 3:06 π.μ., ο/η Mihir Sevak <
>>> mihir.sevak at gmail.com> έγραψε:
>>>
>>>> This is great, thank you so much! I don't have mastery over the basics
>>>> yet. I have read them and conceptually I understand them but I am afraid I
>>>> can't write them on my own. I also appreciate your sharing godbolt.org.
>>>> That is a great help. Do you know how I can learn about differences between
>>>> IRs when optimizing is turned on vs. when it is not turned on? If there are
>>>> many people on this list who might be interested in this topic then we can
>>>> remove spamming everyone on this list by including llvm-dev. You guys
>>>> decide.
>>>>
>>>> Thanks.
>>>>
>>>> On Sat, Jan 9, 2021 at 4:56 PM Stefanos Baziotis <
>>>> stefanos.baziotis at gmail.com> wrote:
>>>>
>>>>> Hi Mihir,
>>>>>
>>>>> I'm not really sure what would be the best choice given that you
>>>>> mention that you want a source that covers LLVM IR "in depth" while
>>>>> previously it seemed you needed
>>>>> a beginner-like source.
>>>>>
>>>>> If you already know the basics, i.e.,:
>>>>> - IR Structure (Module -> Function -> Basic Block -> Instruction)
>>>>> - Basic operations (arithmetic, branches, calls, loads/stores,
>>>>> conversions all that)
>>>>> - Intrinsics / Metadata
>>>>> - PHIs
>>>>> - GEPs
>>>>> - What role types play in general
>>>>>
>>>>> Bear in mind that when I mention these basics, I don't mean just
>>>>> knowing sort of what they do. I also mean how knowing sort of how can you
>>>>> use them as
>>>>> building blocks to implement high level operations, e.g., (from simple
>>>>> to more complicated):
>>>>> - 1 + 2 + 3
>>>>> - function calls
>>>>> - if-else if-else
>>>>> - classes / structs and operations in them
>>>>> - virtual functions
>>>>>
>>>>> Maybe type conversions, pointers etc. anyway you get the point.
>>>>>
>>>>> If you do have the basics down, _then_ I think is the time to start
>>>>> studying in depth. At this point, I don't think a book or any such source
>>>>> would be useful to you. LangRef would be the way to go along
>>>>> with writing C++ in godbolt (https://godbolt.org/) and seeing what
>>>>> LLVM IR Clang emits (with -emit-llvm and preferably -g0 to avoid debug info
>>>>> as cmd args).
>>>>>
>>>>> But if you don't have the basics down, then you probably don't need
>>>>> something in-depth. In this case, I'd start with this video:
>>>>> https://www.youtube.com/watch?v=m8G_S5LwlTo,
>>>>> writing (simple) C code in godbolt and inspecting the result
>>>>> (eventually trying to produce it myself) and maybe I'd watch a compilers
>>>>> course (meaning 1-2 lectures covering things
>>>>> of interest, not the whole thing and without paying - there is plenty
>>>>> of free material from universities online).
>>>>>
>>>>> I hope this helps. If not, maybe you can try to direct us on what
>>>>> exactly is your level.
>>>>>
>>>>> Best,
>>>>> Stefanos
>>>>>
>>>>> Στις Κυρ, 10 Ιαν 2021 στις 2:39 π.μ., ο/η Mihir Sevak via llvm-dev <
>>>>> llvm-dev at lists.llvm.org> έγραψε:
>>>>>
>>>>>> Ok, thanks for the reply. Lets see what other folks have to say.
>>>>>>
>>>>>> On Sat, Jan 9, 2021 at 4:37 PM David Blaikie <dblaikie at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Yeah, sorry - I haven't read any LLVM books, unfortunately. Perhaps
>>>>>>> some other folks will be able to chime in with tips.
>>>>>>>
>>>>>>> On Sat, Jan 9, 2021 at 4:36 PM Mihir Sevak <mihir.sevak at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> I own this book and it doesn't cover IR in depth. I am trying to
>>>>>>>> write an additional feature for C++ frontend and for that I want to use
>>>>>>>> proper Intermediate Representation that doesn't become a laughing stock so
>>>>>>>> I am looking for some in depth explanation on IR. I am aware that it
>>>>>>>> changes so fast that a book will become outdated however for my exercise I
>>>>>>>> am willing to go back to the version the book covers and implement it
>>>>>>>> there. If you have used some book personally and recommend it please share
>>>>>>>> with me.
>>>>>>>>
>>>>>>>> Thanks.
>>>>>>>>
>>>>>>>> On Sat, Jan 9, 2021 at 4:31 PM David Blaikie <dblaikie at gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Published books probably get out of date pretty quickly, so you'll
>>>>>>>>> need to keep the more up-to-date code/online docs in mind even if you're
>>>>>>>>> reading printed stuff. At a quick google this seems like the sort of thing
>>>>>>>>> that might be useful:
>>>>>>>>> https://www.amazon.com/Getting-Started-LLVM-Core-Libraries/dp/1782166920
>>>>>>>>> (googling 'llvm book' shows a few results)
>>>>>>>>>
>>>>>>>>> On Sat, Jan 9, 2021 at 4:24 PM Mihir Sevak <mihir.sevak at gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Thanks David. Really appreciate this.
>>>>>>>>>>
>>>>>>>>>> Would you please kindly share those names of the books so at
>>>>>>>>>> least I have an idea about what resources are available and in case I need
>>>>>>>>>> more explanation than this Language Reference Manual ?
>>>>>>>>>>
>>>>>>>>>> Once again thanks.
>>>>>>>>>>
>>>>>>>>>> On Sat, Jan 9, 2021 at 3:57 PM David Blaikie <dblaikie at gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> There are some books, but if you're looking for the best
>>>>>>>>>>> reference for LLVM IR it's online here:
>>>>>>>>>>> https://llvm.org/docs/LangRef.html
>>>>>>>>>>>
>>>>>>>>>>> On Sat, Jan 9, 2021 at 3:43 PM Mihir Sevak via llvm-dev <
>>>>>>>>>>> llvm-dev at lists.llvm.org> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hello LLVM group,
>>>>>>>>>>>>      I am very new to this project. I want to develop a few
>>>>>>>>>>>> things on LLVM platform and for that I am wondering where can I learn about
>>>>>>>>>>>> Intermediate Representation used in LLVM project? Is there any in-depth
>>>>>>>>>>>> instruction level guide available except online tutorials?
>>>>>>>>>>>>
>>>>>>>>>>>> Please advise.
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks.
>>>>>>>>>>>> Have a great weekend.
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> "How can anything be impossible when impossible itself says I M
>>>>>>>>>>>> Possible???"®
>>>>>>>>>>>> Mihir Sevak
>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> LLVM Developers mailing list
>>>>>>>>>>>> llvm-dev at lists.llvm.org
>>>>>>>>>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> "How can anything be impossible when impossible itself says I M
>>>>>>>>>> Possible???"®
>>>>>>>>>> Mihir Sevak
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> "How can anything be impossible when impossible itself says I M
>>>>>>>> Possible???"®
>>>>>>>> Mihir Sevak
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> "How can anything be impossible when impossible itself says I M
>>>>>> Possible???"®
>>>>>> Mihir Sevak
>>>>>> _______________________________________________
>>>>>> LLVM Developers mailing list
>>>>>> llvm-dev at lists.llvm.org
>>>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>>>
>>>>>
>>>>
>>>> --
>>>> "How can anything be impossible when impossible itself says I M
>>>> Possible???"®
>>>> Mihir Sevak
>>>>
>>>
>>
>> --
>> "How can anything be impossible when impossible itself says I M
>> Possible???"®
>> Mihir Sevak
>>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210109/303ee208/attachment-0001.html>


More information about the llvm-dev mailing list