Hi Raphael, Thanks for the clarification. I note that in this case, I also think that Benson should preferably find a different project as that would probably be better for everybody. Best, Stefanos Baziotis On Wed, Mar 18, 2020, 12:24 Raphael “Teemperor” Isemann <teemperor at gmail.com> wrote:> Just to clarify my point about the “asking if there is already another > student applying”: > > In my situation there is already a student that applied 3 or 4 weeks ago > and that already has a finished application where I gave multiple rounds of > feedback and that already landed a few patches that convinced me he’s a > good candidate. I just told Benson that he can (of course) apply but that > he might want to see if there is still a project without a student that he > finds interesting. The reason here is simply that I don’t want Benson to > spend the remaining time on an application where there is a high chance > that another student gets selected, while at the same we have useful GSoC > projects without any applications that end up not happening. > > My goal is to have at least one good application for every project we put > up, as that benefits both LLVM and students. > > On Mar 18, 2020, at 10:39 AM, Stefanos Baziotis via llvm-dev < > llvm-dev at lists.llvm.org> wrote: > > Hi to both, > > > I'm not applying for GSoC but that's a hint if other students are > applying to help them get started. > Yes I agree, thanks for bringing up the topic. > > > 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? > Well, usually you don't. If you're lucky, someone will be able to provide > you with some issues that you can get started with in the part of LLVM that > you're interested > (independent of GSoC or not). If you can't get such an answer, then one > thing you can try is search for TODOs and FIXMEs and see if you can tackle > any of those. > > > 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. > In the discussion I posted above, you can see that probably there's > another person interested. > > But of course multiple people can apply to the same project. Realistically > speaking, you should apply where you think you have a chance, so that you > can > devote time that is useful in the end for both parties. > > One important thing though is: If you're interested in LLVM, start whether > you'll get a proposal or not. > GSoC is good because it motivates people to start contributing to a > project even if they don't get GSoC in the end. And in the long run that's > more important (and not only because the next year it will be way easier > to get a GSoC). > > Best, > Stefanos Baziotis > > Στις Τετ, 18 Μαρ 2020 στις 8:51 π.μ., ο/η Benson Bin Bin Li < > bbl2117 at columbia.edu> έγραψε: > >> 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 >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>> >>>> _______________________________________________ > LLVM Developers mailing list > 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/20200318/47bf5371/attachment-0001.html>
Hi everyone, If you're interested in LLVM, start whether you'll get a proposal or not.> GSoC is good because it motivates people to start contributing to a > project even if they don't get GSoC in the end. >Yeah, I definitely am interested, and given this whole coronavirus situation, will probably still want to contribute over the summer even if I don't get selected. So if there is a project that still needs a student, it does work out better for both parties. But in any case, thanks for letting me know Stefanos. I will probably try to find a different project then. Best, Benson On Wed, Mar 18, 2020 at 8:59 AM Stefanos Baziotis < stefanos.baziotis at gmail.com> wrote:> Hi Raphael, > > Thanks for the clarification. I note that in this case, I also think that > Benson should preferably find a different project as that would probably be > better for everybody. > > Best, > Stefanos Baziotis > > On Wed, Mar 18, 2020, 12:24 Raphael “Teemperor” Isemann < > teemperor at gmail.com> wrote: > >> Just to clarify my point about the “asking if there is already another >> student applying”: >> >> In my situation there is already a student that applied 3 or 4 weeks ago >> and that already has a finished application where I gave multiple rounds of >> feedback and that already landed a few patches that convinced me he’s a >> good candidate. I just told Benson that he can (of course) apply but that >> he might want to see if there is still a project without a student that he >> finds interesting. The reason here is simply that I don’t want Benson to >> spend the remaining time on an application where there is a high chance >> that another student gets selected, while at the same we have useful GSoC >> projects without any applications that end up not happening. >> >> My goal is to have at least one good application for every project we put >> up, as that benefits both LLVM and students. >> >> On Mar 18, 2020, at 10:39 AM, Stefanos Baziotis via llvm-dev < >> llvm-dev at lists.llvm.org> wrote: >> >> Hi to both, >> >> > I'm not applying for GSoC but that's a hint if other students are >> applying to help them get started. >> Yes I agree, thanks for bringing up the topic. >> >> > 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? >> Well, usually you don't. If you're lucky, someone will be able to >> provide you with some issues that you can get started with in the part of >> LLVM that you're interested >> (independent of GSoC or not). If you can't get such an answer, then one >> thing you can try is search for TODOs and FIXMEs and see if you can tackle >> any of those. >> >> > 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. >> In the discussion I posted above, you can see that probably there's >> another person interested. >> >> But of course multiple people can apply to the same project. >> Realistically speaking, you should apply where you think you have a chance, >> so that you can >> devote time that is useful in the end for both parties. >> >> One important thing though is: If you're interested in LLVM, start >> whether you'll get a proposal or not. >> GSoC is good because it motivates people to start contributing to a >> project even if they don't get GSoC in the end. And in the long run that's >> more important (and not only because the next year it will be way easier >> to get a GSoC). >> >> Best, >> Stefanos Baziotis >> >> Στις Τετ, 18 Μαρ 2020 στις 8:51 π.μ., ο/η Benson Bin Bin Li < >> bbl2117 at columbia.edu> έγραψε: >> >>> 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 >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> _______________________________________________ >> LLVM Developers mailing list >> 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/20200318/3f9e605c/attachment-0001.html>
Hi everyone, Best of luck Benson, we hope to see you around here again either way. Best, Stefanos Baziotis Στις Τετ, 18 Μαρ 2020 στις 8:08 μ.μ., ο/η Benson Bin Bin Li < bbl2117 at columbia.edu> έγραψε:> Hi everyone, > > If you're interested in LLVM, start whether you'll get a proposal or not. >> GSoC is good because it motivates people to start contributing to a >> project even if they don't get GSoC in the end. >> > Yeah, I definitely am interested, and given this whole coronavirus > situation, will probably still want to contribute over the summer even if I > don't get selected. So if there is a project that still needs a student, it > does work out better for both parties. But in any case, thanks for letting > me know Stefanos. I will probably try to find a different project then. > > Best, > Benson > > On Wed, Mar 18, 2020 at 8:59 AM Stefanos Baziotis < > stefanos.baziotis at gmail.com> wrote: > >> Hi Raphael, >> >> Thanks for the clarification. I note that in this case, I also think that >> Benson should preferably find a different project as that would probably be >> better for everybody. >> >> Best, >> Stefanos Baziotis >> >> On Wed, Mar 18, 2020, 12:24 Raphael “Teemperor” Isemann < >> teemperor at gmail.com> wrote: >> >>> Just to clarify my point about the “asking if there is already another >>> student applying”: >>> >>> In my situation there is already a student that applied 3 or 4 weeks ago >>> and that already has a finished application where I gave multiple rounds of >>> feedback and that already landed a few patches that convinced me he’s a >>> good candidate. I just told Benson that he can (of course) apply but that >>> he might want to see if there is still a project without a student that he >>> finds interesting. The reason here is simply that I don’t want Benson to >>> spend the remaining time on an application where there is a high chance >>> that another student gets selected, while at the same we have useful GSoC >>> projects without any applications that end up not happening. >>> >>> My goal is to have at least one good application for every project we >>> put up, as that benefits both LLVM and students. >>> >>> On Mar 18, 2020, at 10:39 AM, Stefanos Baziotis via llvm-dev < >>> llvm-dev at lists.llvm.org> wrote: >>> >>> Hi to both, >>> >>> > I'm not applying for GSoC but that's a hint if other students are >>> applying to help them get started. >>> Yes I agree, thanks for bringing up the topic. >>> >>> > 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? >>> Well, usually you don't. If you're lucky, someone will be able to >>> provide you with some issues that you can get started with in the part of >>> LLVM that you're interested >>> (independent of GSoC or not). If you can't get such an answer, then one >>> thing you can try is search for TODOs and FIXMEs and see if you can tackle >>> any of those. >>> >>> > 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. >>> In the discussion I posted above, you can see that probably there's >>> another person interested. >>> >>> But of course multiple people can apply to the same project. >>> Realistically speaking, you should apply where you think you have a chance, >>> so that you can >>> devote time that is useful in the end for both parties. >>> >>> One important thing though is: If you're interested in LLVM, start >>> whether you'll get a proposal or not. >>> GSoC is good because it motivates people to start contributing to a >>> project even if they don't get GSoC in the end. And in the long run that's >>> more important (and not only because the next year it will be way easier >>> to get a GSoC). >>> >>> Best, >>> Stefanos Baziotis >>> >>> Στις Τετ, 18 Μαρ 2020 στις 8:51 π.μ., ο/η Benson Bin Bin Li < >>> bbl2117 at columbia.edu> έγραψε: >>> >>>> 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 >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> _______________________________________________ >>> LLVM Developers mailing list >>> 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/20200318/af9bb49a/attachment-0001.html>