[llvm-dev] GSoC Opportunity

Benson Bin Bin Li via llvm-dev llvm-dev at lists.llvm.org
Tue Mar 17 22:51:28 PDT 2020


Ohh also, Raphael Isemann got back to me on the LLDB tab completion
project, and said that another student has already written a proposal. He
also suggested that I ask if another student has already submitted a
proposal for this one, and if so, to look for another llvm project within
the given time remaining.

On Wed, Mar 18, 2020 at 1:45 AM Benson Bin Bin Li <bbl2117 at columbia.edu>
wrote:

> IMHO, you do. :)
>
> Lol, you have too much faith in me. On a more serious note, how do I know
> what issue can be solved in a reasonable amount of time/how do I search for
> one?
>
>
>
>> Please feel free to email me or Ettore if you encounter any blockers, or
>> have further questions.
>
>
> Hi Whitney, thanks for the video link and info. I was a bit busy today,
> but I will work tomorrow and get back to you on this!
>
> Best,
> Benson
>
> On Tue, Mar 17, 2020 at 12:54 PM Nicholas Krause <xerofoify at gmail.com>
> wrote:
>
>>
>>
>> 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> έγραψε:
>>
>>>
>>>
>>> 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> έγραψε:
>>>
>>>>
>>>>
>>>> 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> έγραψε:
>>>>
>>>>>
>>>>>
>>>>> 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> 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> έγραψε:
>>>>>>
>>>>>>> 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
>>>>>>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>>>>
>>>>>>
>>>>> _______________________________________________
>>>>> LLVM Developers mailing listllvm-dev at lists.llvm.orghttps://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/20200318/3a70e42c/attachment.html>


More information about the llvm-dev mailing list