[llvm-dev] Hello

Mihir Sevak via llvm-dev llvm-dev at lists.llvm.org
Sat Jan 9 17:35:12 PST 2021


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/20210109/fb03457a/attachment.html>


More information about the llvm-dev mailing list