[llvm-dev] Hello

Stefanos Baziotis via llvm-dev llvm-dev at lists.llvm.org
Sat Jan 9 18:58:40 PST 2021


>  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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210110/66de962b/attachment.html>


More information about the llvm-dev mailing list