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