<div dir="ltr">Hi Nick,<br><br>Sorry for the late reply. Here are some thoughts that may be useful to you:<br><br>1) You might want to see if there's any overlap with previous similar talks. I think there may be some with these two:<br>- Introduction to LLVM: 

<a href="https://www.youtube.com/watch?v=J5xExRGaIIY">https://www.youtube.com/watch?v=J5xExRGaIIY</a><br>- Introduction to Clang: 

<a href="https://www.youtube.com/watch?v=5kkMpJpIGYU">https://www.youtube.com/watch?v=5kkMpJpIGYU</a><br><br>In the same spirit, at the end it would be good if you put other similar talks that people can watch tii. Apart from the<br>two already mentioned, also:<br>- The Clang AST Tutorial: 

<a href="https://www.youtube.com/watch?v=VqCkCDFLSsc">https://www.youtube.com/watch?v=VqCkCDFLSsc</a><br>- LLVM IR Tutorial: 

<a href="https://www.youtube.com/watch?v=m8G_S5LwlTo">https://www.youtube.com/watch?v=m8G_S5LwlTo</a><br>-  Writing an LLVM Pass 101: <a href="https://www.youtube.com/watch?v=ar7cJl2aBuU">https://www.youtube.com/watch?v=ar7cJl2aBuU</a><br>  This is for the new pass manager, one can also see the doc for the old one: 

<a href="https://llvm.org/docs/WritingAnLLVMPass.html">https://llvm.org/docs/WritingAnLLVMPass.html</a><br>- Getting Started with LLVM: Basics: 

<a href="https://www.youtube.com/watch?v=3QQuhL-dSys">https://www.youtube.com/watch?v=3QQuhL-dSys</a><br>- How to Contribute to LLVM: 

<a href="https://www.youtube.com/watch?v=C5Y977rLqpw">https://www.youtube.com/watch?v=C5Y977rLqpw</a><br>- LLVM: A Modern, Open C++ Toolchain: 

<a href="https://www.youtube.com/watch?v=uZI_Qla4pNA">https://www.youtube.com/watch?v=uZI_Qla4pNA</a><br>- Understanding Compiler Optimization: 

<a href="https://www.youtube.com/watch?v=FnGCDLhaxKU">https://www.youtube.com/watch?v=FnGCDLhaxKU</a><br>- Hybrid Data Structures: 

<a href="https://www.youtube.com/watch?v=vElZc6zSIXM">https://www.youtube.com/watch?v=vElZc6zSIXM</a> (Mentions a lot about LLVM's internal DS)<br>... (here basically you can just say: "Any talk by Chandler Carruth" :p )<br>- Register Allocation: More than Coloring: 

<a href="https://www.youtube.com/watch?v=IK8TMJf3G6U">https://www.youtube.com/watch?v=IK8TMJf3G6U</a><br>- Address Spaces in LLVM: 

<a href="https://www.youtube.com/watch?v=Oj1BNoL1jpM">https://www.youtube.com/watch?v=Oj1BNoL1jpM</a><br>- Scalar Evolution - Demystified:  <a href="https://www.youtube.com/watch?v=AmjliNp0_00">https://www.youtube.com/watch?v=AmjliNp0_00</a><br><br>You might think that the last 3-4 are maybe too specific but actually the DS, Address Spaces and Scalar Evolution are almost<br>everywhere (the DS are truly everywhere). And register allocation is considered by a lot the most important<br>optimization. The ones that don't agree with that, probably think that inlining is the most important. But sadly<br>we don't have a tutorial that explains LLVM's inlining.<br><br>Finally, note that even having a single slide with these is helpful because I remember myself as a beginner. I found<br>those after a lot of time searching and some of them by luck. It would be good to have a slide "Start with these".<br><br>2) Around 25:06: You can mention Polly's create_ll.sh file: 

<a href="https://github.com/llvm/llvm-project/blob/master/polly/test/create_ll.sh">https://github.com/llvm/llvm-project/blob/master/polly/test/create_ll.sh</a> <br>For the Clang part, you can get even less stuff in the emitted IR with this: clang -c -S -emit-llvm -g0 -Xclang -disable-O0-optnone<br><br>3) In the example that you show on the video, we can't actually use memcpy(). It's nitpicking and maybe you actually<br>mentioned it and I missed it but we can't because mempcy() copies only one byte across a buffer. It can't copy<br>e.g. an int that is 4 bytes.<br><br>4) Regarding Canonical Loop Forms in LLVM: There are really more than one loop canonical forms in LLVM<div>but if we had to say there is one, I guess that would be the Loop Simplify Form. You can read more<br>about loop forms and generally loops in the loop terminology: 

<a href="https://llvm.org/docs/LoopTerminology.html">https://llvm.org/docs/LoopTerminology.html</a> <br>(You can also tell me if there's something unclear there because I would be one of the first candidates to fix it :) ).<br><br>Cheers,<br>Stefanos</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Στις Τρί, 11 Αυγ 2020 στις 11:53 μ.μ., ο/η Nick Desaulniers via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> έγραψε:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Sharing a link to a presentation I gave recently on the basics of<br>
working with LLVM: <a href="https://youtu.be/bUTXhcf_aNc" rel="noreferrer" target="_blank">https://youtu.be/bUTXhcf_aNc</a>.<br>
<br>
I have an extended+modified version of this talk I'm preparing for<br>
LLVM dev conf.<br>
-- <br>
Thanks,<br>
~Nick Desaulniers<br>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>