[llvm-dev] GSoC Opportunity

Nicholas Krause via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 17 09:54:49 PDT 2020



On 3/17/20 10:09 AM, Stefanos Baziotis wrote:
> Hi Nick,
>
> What you said makes sense, but it's not called a call graph. :)
Sure I assumed so that was just a term I used by mistake :).
> You're essentially referring to what LoopInfo does which makes sense, 
> but as I mentioned earlier, this is already done
> in the LoopInfo. Now, how much one will be able to use it in a 
> LoopNestPass is another issue, which is certainly
> something that mentors could help you with.
I'm not applying for GSoC but that's a hint if other students are 
applying to help them get started.

Nick
>
> Best,
> Stefanos
>
> Στις Τρί, 17 Μαρ 2020 στις 3:35 μ.μ., ο/η Nicholas Krause 
> <xerofoify at gmail.com <mailto:xerofoify at gmail.com>> έγραψε:
>
>
>
>     On 3/17/20 9:23 AM, Stefanos Baziotis wrote:
>>     > Yes that's correct.
>>     Well, now that I saw the LoopNestAnalysis* files, they try to do
>>     sth similar. So, I hope it helped.
>>
>>     > My idea was similar but using the call graph directly
>>
>>     Personally I don't see how the call graph can help you, since
>>     well... it's a call graph. :)
>     Not directly but you can could implement a call graph for the
>     loops internal to a function and walk up
>     it backwards. In addition you could make it possible to implement
>     this call graph to know the number
>     of loops nested and pop out to the outermost as a function.
>     Basically SCC for loops themselves rather
>     than functions.
>
>     That's probably beyond the scope of the project so your right it
>     doesn't matter for this,
>     Nick
>>     You care about loops in a specific function. What can help you is
>>     the Control-Flow graph, which is basically what LoopInfo uses to
>>     identify loops in a function.
>>     But because of that, loop identification is not your problem,
>>     loop traversing is, if I understand it correctly.
>>     Although you have to do things similar to loop identification
>>     (i.e. what LoopInfo does) when trying to
>>     decide for perfect nestings etc.
>>
>>     Best,
>>     Stefanos
>>
>>
>>     Στις Τρί, 17 Μαρ 2020 στις 3:08 μ.μ., ο/η Nicholas Krause
>>     <xerofoify at gmail.com <mailto:xerofoify at gmail.com>> έγραψε:
>>
>>
>>
>>         On 3/16/20 11:41 PM, Stefanos Baziotis wrote:
>>>         Hi everyone,
>>>
>>>         >  I probably do not have the time to get a patch through.
>>>         IMHO, you do. :)
>>>
>>>         First of all, @Benson sorry but I'm not at all familiar with
>>>         LLDB so I can't help there.
>>>
>>>         Other than that, I'll also disappoint you both probably
>>>         because I'm not that familiar with the creation of passes
>>>         and the problem at hand. I'll try to help as I can.
>>>
>>>         > Is there a specific section of the dragon book that I
>>>         should read so that I can at least understand theoretically
>>>         what it means to create a LoopNestPass? As I can understand,
>>>         no because it's more of a structural, LLVM-specific problem
>>>         than a generic, compiler optimization problem. > Stefanos
>>>         can speak to this more but in order to create a LoopNestPass
>>>         after reading what they are talking about requires
>>>         information from the call graph
>>>         > for a function or the loop hierarchy in LLVM IR. I'm not
>>>         sure of the internal classes for this so Stefanos is there a
>>>         way currently to get the info in IR about
>>>         > the outer loop or from the call graph? That seems to be
>>>         the biggest problem getting the outer loop in the IR or the
>>>         call graph. After that you would
>>>         > basically check if the loop is the outer loop and if so
>>>         you can add dynamically to the pipeline.
>>>
>>>         I'm not sure I followed you here. First of all, if you
>>>         create a regular LoopPass, you'll visit loops from the
>>>         innermost to the outermost. In the loop nest pass
>>>         you want the outermost though, so you'll have to visit them
>>>         all until you there. Now if you do it in a function pass,
>>>         you lose the ability to put loops
>>>         back into the pipeline, as this is how the function pass
>>>         works. So, the way I understand it, to solve that problem,
>>>         one would create something like a function
>>>         pass, figure out the loops there (i.e. with LoopInfo), then
>>>         convert it to LoopPass so that you can run loop passes over
>>>         the loops.
>>>         I think this can happen already, but right now, loops are
>>>         going in reverse order:
>>>         https://github.com/llvm/llvm-project/blob/master/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h#L230
>>>         So, maybe if you could modify that to something like
>>>         FunctionToLestNestPassAdaptor, it would work? I don't know
>>>         that's just an idea, let me not confuse you more.
>>>
>>>         Best,
>>>         Stefanos
>>         Yes that's correct. My idea was similar but using the call
>>         graph directly. The other problem is how to keep LCSSA form
>>         for all the loops as well and I'm
>>         aware that function passes don't care about that. So you
>>         can't really convert to a function pass itself but something
>>         similar.
>>
>>         Nick
>>>         Στις Δευ, 16 Μαρ 2020 στις 5:53 π.μ., ο/η Nicholas Krause
>>>         <xerofoify at gmail.com <mailto:xerofoify at gmail.com>> έγραψε:
>>>
>>>
>>>
>>>             On 3/15/20 11:12 PM, Benson Bin Bin Li via llvm-dev wrote:
>>>>             Hi Stefanos,
>>>>
>>>>             First, thanks a lot for the very detailed response! I
>>>>             watched both of the videos, and I seem to have a rough
>>>>             idea now of how each of the different pieces of
>>>>             software maps onto the compilation process. Though I
>>>>             found blogs such as these two:
>>>>             https://jonasdevlieghere.com/understanding-the-clang-ast/,
>>>>             https://releases.llvm.org/2.6/docs/tutorial/JITTutorial1.html
>>>>             to be better for a more in-depth understanding.
>>>>             Anyways, in response to your answers:
>>>>
>>>>                 The latter can even be problematic if you start
>>>>                 applying C++ craziness while the first is pretty
>>>>                 much always needed when working in a team project.
>>>>
>>>>             Ok, that makes sense as you would want the style to be
>>>>             consistent throughout.
>>>>
>>>>                 running the LLVM suite is super easy
>>>>
>>>>             Yeah, everything went fine from following your
>>>>             instructions. I do have a question though: How do I
>>>>             diagnose failed tests? I found the files that
>>>>             correspond to them, and they seem to be 1 line scripts
>>>>             rather than "code" per say.
>>>>
>>>>                 But I think every good GSoC proposal includes a
>>>>                 biography-like section
>>>>
>>>>                 Then, try to study it, understand the context and
>>>>                 the problem.
>>>>
>>>>                 But because submitting good patches is one of the
>>>>                 best indicators
>>>>
>>>>             Ok, so for the application process, basically try to
>>>>             get more info on the projects I am interested in and
>>>>             from there submit a proposal? Given the whole
>>>>             coronavirus situation and the time remaining for the
>>>>             application, I probably do not have the time to get a
>>>>             patch through. Regarding the projects I am interested
>>>>             in, I have narrowed it down to two(mostly because I
>>>>             don't think I have the ability to tackle
>>>>             PostDominatorTree project as of now), and have the
>>>>             following questions about them:
>>>>
>>>>             LLVM Pass
>>>>
>>>>             1.
>>>>
>>>>                 I am following the guide to create a LLVM pass
>>>>                 following this
>>>>                 guide(https://llvm.org/docs/WritingAnLLVMPass.html),
>>>>                 but it appears “add_llvm_library” is a macro and
>>>>                 not a built-in command. So I have two questions. 1)
>>>>                 In comparing the online repo I found this macro in
>>>>                 and my local, it appears I don’t have the file. Do
>>>>                 I need to build it then? 2) How do I tell CMake to
>>>>                 look for this macro?
>>>>
>>>>             2.
>>>>
>>>>                 Is there a specific section of the dragon book that
>>>>                 I should read so that I can at least understand
>>>>                 theoretically what it means to create a LoopNestPass?
>>>>
>>>             Stefanos can speak to this more but in order to create a
>>>             LoopNestPass after reading what they are talking about
>>>             requires information from the call graph
>>>             for a function or the loop hierarchy in LLVM IR. I'm not
>>>             sure of the internal classes for this so Stefanos is
>>>             there a way currently to get the info in IR about
>>>             the outer loop or from the call graph? That seems to be
>>>             the biggest problem getting the outer loop in the IR or
>>>             the call graph. After that you would
>>>             basically check if the loop is the outer loop and if so
>>>             you can add dynamically to the pipeline.
>>>
>>>             Sorry if I'm not much help as I'm not sure if the call
>>>             graph API supports this but I'm pretty sure LLVM IR
>>>             doesn't make this easy,
>>>             Nick
>>>>
>>>>             LLDB Tab Completion
>>>>
>>>>             1.
>>>>
>>>>                 Is there any resource I can read that explains how
>>>>                 lldb is able to “pause” the executable and map it
>>>>                 to a certain line in the source file/in general how
>>>>                 lldb represents the state of the executable?
>>>>
>>>>             2.
>>>>
>>>>                 Where in the source code can I go to see how
>>>>                 existing tab completions are implemented?
>>>>
>>>>              3. I built lldb and check-lldb, but it seems that the
>>>>                 call path to clang got messed up, as it is trying
>>>>                 to call "Example=Code/llvm-project" rather than my
>>>>                 actual name for the directory
>>>>                 "Example-Code/llvm-project". Should I just clone
>>>>                 the repo into a parent directory that doesn't use
>>>>                 hyphen?
>>>>
>>>>
>>>>             (Would it be better if I posted this on the forum?)
>>>>
>>>>             Best regards,
>>>>             Benson
>>>>
>>>>
>>>>             On Sat, Mar 14, 2020 at 11:10 AM Stefanos Baziotis
>>>>             <stefanos.baziotis at gmail.com
>>>>             <mailto:stefanos.baziotis at gmail.com>> wrote:
>>>>
>>>>                 Hi Benson,
>>>>
>>>>                 You're welcome to the LLVM community!
>>>>
>>>>                 I'll try to help but note that I'm no formal
>>>>                 position to talk about how LLVM decides about GSoC
>>>>                 (I'm a LLVM newcomer anyway).
>>>>                 With that said, the rest is _my_ opinion which is
>>>>                 partially formed from my experience as a GSoC student.
>>>>
>>>>                 > But to be up front about this, I have not done
>>>>                 any full scale C++ project
>>>>                 Depending on how you define "full-scale", a lot of
>>>>                 amazing LLVM contributors have not done a
>>>>                 full-scale C++. So, I think no problem there, it's
>>>>                 just good to have a relatively good knowledge of C++.
>>>>                 Talking about C++ skills, I think they're more
>>>>                 important if you want to contribute to Clang than
>>>>                 say LLVM middle or back-end. Because for Clang, you
>>>>                 have to know a lot of details of the language
>>>>                 in order to parse it, type-check it and generate
>>>>                 LLVM IR. In most other parts of LLVM, you're only
>>>>                 using the language.
>>>>                 As a matter of fact, if you have a good knowledge
>>>>                 of C++, I believe it's more important to be able to
>>>>                 understand and adapt to "nearby" code, than to be
>>>>                 an expert in C++.
>>>>                 The latter can even be problematic if you start
>>>>                 applying C++ craziness while the first is pretty
>>>>                 much always needed when working in a team project.
>>>>
>>>>                 > 1. Do I need to submit a resume/screening/patches?
>>>>                 As far as the resume, in the way that you may
>>>>                 usually apply to jobs, no. But I think every good
>>>>                 GSoC proposal includes a biography-like section
>>>>                 where you basically tell your story in programming
>>>>                 and how you fit into the project (in our case, LLVM).
>>>>
>>>>                 I'm not sure what you mean by screening.
>>>>
>>>>                 As for patches, I don't think they're required but
>>>>                 they're super useful. Not because they're some part
>>>>                 of unrelated logistics (like "you have to have X
>>>>                 patches to be considered").
>>>>                 But because submitting good patches is one of the
>>>>                 best indicators (if not the best) that you are able
>>>>                 to do useful work in this project. :)
>>>>                 And they don't only show your technical skills. But
>>>>                 also communication skills, independence etc.
>>>>
>>>>                 > 2. Although I do have interests in certain
>>>>                 projects posted on you website(Implement missing
>>>>                 tab completion, createLoopPass, and
>>>>                 PostDominatorTree), I am uncertain if I have enough
>>>>                 expertise to decide what would be an appropriate
>>>>                 project to contribute to given my current knowledge
>>>>                 and experience.
>>>>                 This is kind of a generic sentence.
>>>>                 I'd say, start with finding a project that you're
>>>>                 truly interested in. Then, try to study it,
>>>>                 understand the context and the problem.
>>>>                 You don't need to get very far, that's totally ok.
>>>>                 You can then do a post (either here or on
>>>>                 Discourse:
>>>>                 https://llvm.discourse.group/c/community/gsoc/32)
>>>>                 for this specific project (you can do posts for
>>>>                 multiple projects).
>>>>                 Hopefully, by discussing with people (and mentors)
>>>>                 and understanding what the project is asking better,
>>>>                 you can find if you want to do it or not.
>>>>                 Certainly, the mentors of the project can guide you
>>>>                 through.
>>>>
>>>>                 3. The GCC GSoC website suggested checking out
>>>>                 their source code, compiling and running their test
>>>>                 suite. Can I do something similar for LLVM?
>>>>                 Yes, totally. I'm not familiar with GCC internals
>>>>                 but running the LLVM suite is super easy (so easy
>>>>                 that you don't really learn anything by doing it :P )
>>>>                 So, the LLVM project has moved to a common
>>>>                 repository: https://github.com/llvm/llvm-project
>>>>                 You can clone the project and then use CMake to
>>>>                 build it. The cmake configuration for LLVM has a
>>>>                 bunch of flags: https://llvm.org/docs/CMake.html
>>>>                 and you may get lost. So, I'll say start simple:
>>>>                 Go to the llvm-project dir (the one you cloned) and do:
>>>>                 cmake ./llvm -DLLVM_ENABLE_PROJECTS="clang"
>>>>                 -DCMAKE_BUILD_TYPE=Release
>>>>                 -DLLVM_ENABLE_ASSERTIONS=ON
>>>>                 -DLLVM_TARGETS_TO_BUILD="X86"
>>>>
>>>>                 In the link above you can read what the flags do.
>>>>                 llvm middle / back-end (i.e. opt / llc, ask if you
>>>>                 don't know what these mean) is always built. But to
>>>>                 build clang
>>>>                 we have to enable it explicitly. We set build type
>>>>                 to release because doing a debug build will take a
>>>>                 lot of time and a lot of space. Also, when starting
>>>>                 out,
>>>>                 you probably don't need it. We enable assertions
>>>>                 mostly because you can use the -debug option say in
>>>>                 opt and see debug prints.
>>>>                 Finally, we only build for x86 arch because that's
>>>>                 probably what you have and you don't need any other
>>>>                 for now.
>>>>
>>>>                 Hit enter and once the configuration is complete
>>>>                 you can do:
>>>>                 make
>>>>                 or
>>>>                 make -j<number of threads> <-- this is faster but
>>>>                 limit it depending on your systemS
>>>>
>>>>                 When that's finished, the llvm-project/bin/ dir
>>>>                 will have executables like clang, clang++, opt, llc
>>>>                 etc.
>>>>                 Which you can run (also ask if you don't know what
>>>>                 to do with them. With clang you probably will know,
>>>>                 it's like invoking
>>>>                 most compilers like gcc to compile .c / .cpp files).
>>>>
>>>>                 To run the test suite, you can go to
>>>>                 llvm-project/llvm/test and do:
>>>>                 <dir of llvm-project>/bin/llvm-lit .
>>>>                 That will run only llvm's test suite but you'll get
>>>>                 an idea.
>>>>
>>>>                 Also, you can watch these videos:
>>>>                 https://www.youtube.com/watch?v=J5xExRGaIIY
>>>>                 https://www.youtube.com/watch?v=5kkMpJpIGYU
>>>>
>>>>                 Hope this helped!
>>>>
>>>>                 Kind regards,
>>>>                 Stefanos Baziotis
>>>>
>>>>                 Στις Σάβ, 14 Μαρ 2020 στις 2:04 π.μ., ο/η Benson
>>>>                 Bin Bin Li via llvm-dev <llvm-dev at lists.llvm.org
>>>>                 <mailto:llvm-dev at lists.llvm.org>> έγραψε:
>>>>
>>>>                     Dear LLVM Team,
>>>>
>>>>
>>>>                     I would like to contribute to/participate in
>>>>                     LLVM’s GSOC, because I would very much like to
>>>>                     combine my knowledge of graph theory/algorithms
>>>>                     and my interest in C++ together. Contributing
>>>>                     to the LLVM code seems like a fantastic
>>>>                     challenge and learning experience for these two
>>>>                     interests of mine, as well as computer science
>>>>                     in general (For example, the use of a new
>>>>                     syntactic category to disambiguate a grammar
>>>>                     demonstrates 1) indirection 2) the power of
>>>>                     naming things).
>>>>
>>>>
>>>>                     But to be up front about this, I have not done
>>>>                     any full scale C++ project(Although we had to
>>>>                     modify the Linux kernel in my OS class, that
>>>>                     was in C). However, I do believe my C++ skills
>>>>                     are at an intermediate level, as C++, like
>>>>                     Python, is a language in which I will spend my
>>>>                     free time learning more about. Like vim, there
>>>>                     is always more to learn in C++, and to that end
>>>>                     I will watch CppCon Videos or peruse blogs such
>>>>                     as Fluent C++(which is a treasure trove of
>>>>                     material to nerd out on) in my free time. I
>>>>                     also have a layman’s knowledge of CMake, from
>>>>                     using it to configure ccls to lint C++ code
>>>>                     with specific flags, and am aware of Google’s
>>>>                     Test framework. Finally, I am currently taking
>>>>                     Professor Stroustrap’s C++ class, and the
>>>>                     compilers course here at Columbia.
>>>>
>>>>
>>>>                     Regarding the logistics:
>>>>
>>>>                     1. Do I need to submit a resume/screening/patches?
>>>>
>>>>                     2. Although I do have interests in certain
>>>>                     projects posted on you website(Implement
>>>>                     missing tab completion, createLoopPass, and
>>>>                     PostDominatorTree), I am uncertain if I have
>>>>                     enough expertise to decide what would be an
>>>>                     appropriate project to contribute to given my
>>>>                     current knowledge and experience.
>>>>
>>>>                     3. The GCC GSoC website suggested checking out
>>>>                     their source code, compiling and running their
>>>>                     test suite. Can I do something similar for LLVM?
>>>>
>>>>
>>>>                     Anyways, thank you for taking the time to read
>>>>                     this email, and I hope to hear back!
>>>>
>>>>
>>>>                     Best regards,
>>>>
>>>>                     Benson Li
>>>>
>>>>                     _______________________________________________
>>>>                     LLVM Developers mailing list
>>>>                     llvm-dev at lists.llvm.org
>>>>                     <mailto:llvm-dev at lists.llvm.org>
>>>>                     https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>
>>>>
>>>>             _______________________________________________
>>>>             LLVM Developers mailing list
>>>>             llvm-dev at lists.llvm.org  <mailto: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/20200317/8f9111c5/attachment.html>


More information about the llvm-dev mailing list