[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