<div dir="ltr">Thanks Stefanos!</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 18, 2020 at 4:30 PM Stefanos Baziotis <<a href="mailto:stefanos.baziotis@gmail.com">stefanos.baziotis@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi everyone,<br><br>Best of luck Benson, we hope to see you around here again either way.<br><br>Best,<br>Stefanos Baziotis</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Στις Τετ, 18 Μαρ 2020 στις 8:08 μ.μ., ο/η Benson Bin Bin Li <<a href="mailto:bbl2117@columbia.edu" target="_blank">bbl2117@columbia.edu</a>> έγραψε:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>Hi everyone,</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>If you're interested in LLVM, start whether you'll get a proposal or not.<br>GSoC is good because it motivates people to start contributing to a project even if they don't get GSoC in the end. </div></blockquote><div>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. <br></div><div><br></div><div>Best,</div><div>Benson<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 18, 2020 at 8:59 AM Stefanos Baziotis <<a href="mailto:stefanos.baziotis@gmail.com" target="_blank">stefanos.baziotis@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Hi Raphael,<div dir="auto"><br></div><div dir="auto">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.</div><div dir="auto"><br></div><div dir="auto">Best,</div><div dir="auto">Stefanos Baziotis</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 18, 2020, 12:24 Raphael “Teemperor” Isemann <<a href="mailto:teemperor@gmail.com" target="_blank">teemperor@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>Just to clarify my point about the “asking if there is already another student applying”:<div><br></div><div>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.</div><div><br></div><div>My goal is to have at least one good application for every project we put up, as that benefits both LLVM and students.</div><div><br></div><div><div><blockquote type="cite"><div>On Mar 18, 2020, at 10:39 AM, Stefanos Baziotis via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" rel="noreferrer" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:</div><br><div><div dir="ltr">Hi to both,<br><br>> I'm not applying for GSoC but that's a hint if other students are applying to help them get started. <br>Yes I agree, thanks for bringing up the topic.<br><br>> 
<span style="font-family:Arial;font-size:14.6667px;white-space:pre-wrap">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?</span> <br> 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<br>(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.<br><br>> 

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.<br>In the discussion I posted above, you can see that probably there's another person interested.  <br><br>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<br>devote time that is useful in the end for both parties.<br><br>One important thing though is: If you're interested in LLVM, start whether you'll get a proposal or not.<br>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<br>more important (and not only because the next year it will be way easier to get a GSoC).<br><br>Best,<br>Stefanos Baziotis</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Στις Τετ, 18 Μαρ 2020 στις 8:51 π.μ., ο/η Benson Bin Bin Li <<a href="mailto:bbl2117@columbia.edu" rel="noreferrer" target="_blank">bbl2117@columbia.edu</a>> έγραψε:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">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.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Mar 18, 2020 at 1:45 AM Benson Bin Bin Li <<a href="mailto:bbl2117@columbia.edu" rel="noreferrer" target="_blank">bbl2117@columbia.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><span id="gmail-m_7837992479226455672gmail-m_-1946978078286875384gmail-m_-6630714991892037245m_-8641994975573025906gmail-m_6974057379426488436gmail-m_2064028793288335495gmail-m_3179536530125202393gmail-docs-internal-guid-d98814ff-7fff-92d5-1d96-bd4b1b0aaea7"><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">IMHO, you do. :)</span></blockquote><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">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?</span></div></span><br><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:13px">Please feel free to email me or Ettore if you encounter any blockers, or have further questions.</span></blockquote><div><br></div><div>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! </div><div><br></div><div>Best,</div><div>Benson</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Mar 17, 2020 at 12:54 PM Nicholas Krause <<a href="mailto:xerofoify@gmail.com" rel="noreferrer" target="_blank">xerofoify@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <br>
    <br>
    <div>On 3/17/20 10:09 AM, Stefanos Baziotis
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">Hi Nick,<br>
        <br>
        What you said makes sense, but it's not called a call graph. :)<br>
      </div>
    </blockquote>
    Sure I assumed so that was just a term I used by mistake :).<br>
    <blockquote type="cite">
      <div dir="ltr">You're essentially referring to what LoopInfo does
        which makes sense, but as I mentioned earlier, this is already
        done<br>
        in the LoopInfo. Now, how much one will be able to use it in a
        LoopNestPass is another issue, which is certainly<br>
        something that mentors could help you with.<br>
      </div>
    </blockquote>
    I'm not applying for GSoC but that's a hint if other students are
    applying to help them get started.<br>
    <br>
    Nick<br>
    <blockquote type="cite">
      <div dir="ltr"><br>
        Best,<br>
        Stefanos</div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">Στις Τρί, 17 Μαρ 2020 στις
          3:35 μ.μ., ο/η Nicholas Krause <<a href="mailto:xerofoify@gmail.com" rel="noreferrer" target="_blank">xerofoify@gmail.com</a>>
          έγραψε:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div> <br>
            <br>
            <div>On 3/17/20 9:23 AM, Stefanos Baziotis wrote:<br>
            </div>
            <blockquote type="cite">
              <div dir="ltr">> Yes that's correct.<br>
                Well, now that I saw the LoopNestAnalysis* files, they
                try to do sth similar. So, I hope it helped.<br>
                <br>
                > My idea was similar but using the call graph
                directly<br>
                <br>
                Personally I don't see how the call graph can help you,
                since well... it's a call graph. :)<br>
              </div>
            </blockquote>
            Not directly but you can could implement a call graph for
            the loops internal to a function and walk up <br>
            it backwards. In addition you could make it possible to
            implement this call graph to know the number<br>
            of loops nested and pop out to the outermost as a function.
            Basically SCC for loops themselves rather<br>
            than functions.<br>
            <br>
            That's probably beyond the scope of the project so your
            right it doesn't matter for this,<br>
            Nick<br>
            <blockquote type="cite">
              <div dir="ltr">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.<br>
                But because of that, loop identification is not your
                problem, loop traversing is, if I understand it
                correctly.<br>
                Although you have to do things similar to loop
                identification (i.e. what LoopInfo does) when trying to<br>
                decide for perfect nestings etc.<br>
                <br>
                Best,<br>
                Stefanos<br>
                <br>
              </div>
              <br>
              <div class="gmail_quote">
                <div dir="ltr" class="gmail_attr">Στις Τρί, 17 Μαρ 2020
                  στις 3:08 μ.μ., ο/η Nicholas Krause <<a href="mailto:xerofoify@gmail.com" rel="noreferrer" target="_blank">xerofoify@gmail.com</a>>
                  έγραψε:<br>
                </div>
                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                  <div> <br>
                    <br>
                    <div>On 3/16/20 11:41 PM, Stefanos Baziotis wrote:<br>
                    </div>
                    <blockquote type="cite">
                      <div dir="ltr">Hi everyone,<br>
                        <br>
                        >  I probably do not have the time to get a
                        patch through.<br>
                        IMHO, you do. :)<br>
                        <br>
                        First of all, @Benson sorry but I'm not at all
                        familiar with LLDB so I can't help there.<br>
                        <br>
                        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.<br>
                        <br>
                        > <span style="font-family:Arial;font-size:14.6667px;white-space:pre-wrap">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.

> </span>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<br>
                        > 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<br>
                        > 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<br>
                        > basically check if the loop is the outer
                        loop and if so you can add dynamically to the
                        pipeline.<br>
                        <br>
                        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<br>
                        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<br>
                        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<br>
                        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.<br>
                        I think this can happen already, but right now,
                        loops are going in reverse order: <a href="https://github.com/llvm/llvm-project/blob/master/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h#L230" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/blob/master/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h#L230</a><br>
                        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.<br>
                        <br>
                        Best,<br>
                        Stefanos</div>
                    </blockquote>
                    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<br>
                    aware that function passes don't care about that. 
                    So you can't really convert to a function pass
                    itself but something similar.<br>
                    <br>
                    Nick<br>
                    <blockquote type="cite">
                      <div class="gmail_quote">
                        <div dir="ltr" class="gmail_attr">Στις Δευ, 16
                          Μαρ 2020 στις 5:53 π.μ., ο/η Nicholas Krause
                          <<a href="mailto:xerofoify@gmail.com" rel="noreferrer" target="_blank">xerofoify@gmail.com</a>>
                          έγραψε:<br>
                        </div>
                        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                          <div> <br>
                            <br>
                            <div>On 3/15/20 11:12 PM, Benson Bin Bin Li
                              via llvm-dev wrote:<br>
                            </div>
                            <blockquote type="cite">
                              <div dir="ltr">
                                <div>Hi Stefanos,</div>
                                <div><br>
                                </div>
                                <div>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: <a href="https://jonasdevlieghere.com/understanding-the-clang-ast/" rel="noreferrer" target="_blank">https://jonasdevlieghere.com/understanding-the-clang-ast/</a>,
                                  <a href="https://releases.llvm.org/2.6/docs/tutorial/JITTutorial1.html" rel="noreferrer" target="_blank">https://releases.llvm.org/2.6/docs/tutorial/JITTutorial1.html</a>
                                  to be better for a more in-depth
                                  understanding. Anyways, in response to
                                  your answers:</div>
                                <div><br>
                                </div>
                                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                  <div>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.</div>
                                </blockquote>
                                <div>Ok, that makes sense as you would
                                  want the style to be consistent
                                  throughout. <br>
                                </div>
                                <div><br>
                                </div>
                                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                  <div>running the LLVM suite is super
                                    easy</div>
                                </blockquote>
                                <div>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.  <br>
                                </div>
                                <div><br>
                                </div>
                                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                  <div> But I think every good GSoC
                                    proposal includes a biography-like
                                    section</div>
                                </blockquote>
                                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                  <div>Then, try to study it, understand
                                    the context and the problem. <br>
                                  </div>
                                </blockquote>
                                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                  <div>But because submitting good
                                    patches is one of the best
                                    indicators  <br>
                                  </div>
                                </blockquote>
                                <div>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:</div>
                                <div><br>
                                </div>
                                <div><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">LLVM Pass</span></div>
                                  <ol style="margin-top:0px;margin-bottom:0px">
                                    <li dir="ltr" style="list-style-type:decimal;font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">I am following the guide to create a LLVM pass following this guide(<a href="https://llvm.org/docs/WritingAnLLVMPass.html" rel="noreferrer" target="_blank">https://llvm.org/docs/WritingAnLLVMPass.html</a>), 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?</span></div></li>
                                    <li dir="ltr" style="list-style-type:decimal;font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">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?</span></div></li>
                                  </ol>
                                </div>
                              </div>
                            </blockquote>
                            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<br>
                            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<br>
                            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<br>
                            basically check if the loop is the outer
                            loop and if so you can add dynamically to
                            the pipeline. <br>
                            <br>
                            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,<br>
                            Nick<br>
                            <blockquote type="cite">
                              <div dir="ltr">
                                <div><br><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">LLDB Tab Completion</span></div>
                                  <ol style="margin-top:0px;margin-bottom:0px">
                                    <li style="list-style-type:decimal;font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">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?</span></div></li>
                                    <li style="list-style-type:decimal;font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Where in the source code can I go to see how existing tab completions are implemented?</span></div></li>
                                    <li style="list-style-type:decimal;font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">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?
</span></li>
                                  </ol>
                                </div>
                                <div><br>
                                </div>
                                <div>(Would it be better if I posted
                                  this on the forum?)</div>
                                <div><br>
                                </div>
                                <div>Best regards,</div>
                                <div>Benson<br>
                                </div>
                                <div><br>
                                </div>
                              </div>
                              <br>
                              <div class="gmail_quote">
                                <div dir="ltr" class="gmail_attr">On
                                  Sat, Mar 14, 2020 at 11:10 AM Stefanos
                                  Baziotis <<a href="mailto:stefanos.baziotis@gmail.com" rel="noreferrer" target="_blank">stefanos.baziotis@gmail.com</a>>
                                  wrote:<br>
                                </div>
                                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                  <div dir="ltr">Hi Benson,<br>
                                    <br>
                                    You're welcome to the LLVM
                                    community!<br>
                                    <br>
                                    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).<br>
                                    With that said, the rest is _my_
                                    opinion which is partially formed
                                    from my experience as a GSoC
                                    student.<br>
                                    <br>
                                    > <span style="font-family:Arial;font-size:14.6667px;white-space:pre-wrap">But to be up front about this, I have not done any full scale C++ project
</span><br>
                                    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++.<br>
                                    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<br>
                                    in order to parse it, type-check it
                                    and generate LLVM IR. In most other
                                    parts of LLVM, you're only using the
                                    language.<br>
                                    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++.<br>
                                    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.<br>
                                    <br>
                                    > <span style="font-family:Arial;font-size:14.6667px;white-space:pre-wrap">1. Do I need to submit a resume/screening/patches? 
</span><br>
                                    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<br>
                                    where you basically tell your story
                                    in programming and how you fit into
                                    the project (in our case, LLVM).<br>
                                    <br>
                                    I'm not sure what you mean by
                                    screening.<br>
                                    <br>
                                    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").<br>
                                    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. :)<br>
                                    And they don't only show your
                                    technical skills. But also
                                    communication skills, independence
                                    etc.<br>
                                    <br>
                                    > 2. <span style="font-family:Arial;font-size:14.6667px;white-space:pre-wrap">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.
</span><br>
                                    This is kind of a generic sentence.<br>
                                    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.<br>
                                    You don't need to get very far,
                                    that's totally ok. You can then do a
                                    post (either here or on Discourse: <a href="https://llvm.discourse.group/c/community/gsoc/32" rel="noreferrer" target="_blank">https://llvm.discourse.group/c/community/gsoc/32</a>)<br>
                                    for this specific project (you can
                                    do posts for multiple projects).<br>
                                    Hopefully, by discussing with people
                                    (and mentors) and understanding what
                                    the project is asking better,<br>
                                    you can find if you want to do it or
                                    not. Certainly, the mentors of the
                                    project can guide you through.<br>
                                    <br>
                                    <span style="font-family:Arial;font-size:14.6667px;white-space:pre-wrap">3. The GCC GSoC website suggested checking out their source code, compiling and running their test suite. Can I do something similar for LLVM?
</span><br>
                                    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 )<br>
                                    So, the LLVM project has moved to a
                                    common repository: <a href="https://github.com/llvm/llvm-project" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project</a><br>
                                    You can clone the project and then
                                    use CMake to build it. The cmake
                                    configuration for LLVM has a bunch
                                    of flags: <a href="https://llvm.org/docs/CMake.html" rel="noreferrer" target="_blank">https://llvm.org/docs/CMake.html</a><br>
                                    and you may get lost. So, I'll say
                                    start simple:<br>
                                    Go to the llvm-project dir (the one
                                    you cloned) and do:<br>
                                    cmake ./llvm
                                    -DLLVM_ENABLE_PROJECTS="clang"
                                    -DCMAKE_BUILD_TYPE=Release
                                    -DLLVM_ENABLE_ASSERTIONS=ON
                                    -DLLVM_TARGETS_TO_BUILD="X86"<br>
                                    <br>
                                    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<br>
                                    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,<br>
                                    you probably don't need it. We
                                    enable assertions mostly because you
                                    can use the -debug option say in opt
                                    and see debug prints.<br>
                                    Finally, we only build for x86 arch
                                    because that's probably what you
                                    have and you don't need any other
                                    for now.<br>
                                    <br>
                                    Hit enter and once the configuration
                                    is complete you can do:<br>
                                    make<br>
                                    or<br>
                                    make -j<number of threads>   
                                    <-- this is faster but limit it
                                    depending on your systemS<br>
                                    <br>
                                    When that's finished, the
                                    llvm-project/bin/ dir will have
                                    executables like clang, clang++,
                                    opt, llc etc.<br>
                                    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<br>
                                    most compilers like gcc to compile
                                    .c / .cpp files).<br>
                                    <br>
                                    To run the test suite, you can go to
                                    llvm-project/llvm/test and do:<br>
                                    <dir of
                                    llvm-project>/bin/llvm-lit .<br>
                                    That will run only llvm's test suite
                                    but you'll get an idea.<br>
                                    <br>
                                    Also, you can watch these videos:<br>
                                    <a href="https://www.youtube.com/watch?v=J5xExRGaIIY" rel="noreferrer" target="_blank">https://www.youtube.com/watch?v=J5xExRGaIIY</a><br>
                                    <a href="https://www.youtube.com/watch?v=5kkMpJpIGYU" rel="noreferrer" target="_blank">https://www.youtube.com/watch?v=5kkMpJpIGYU</a><br>
                                    <br>
                                    Hope this helped!<br>
                                    <br>
                                    Kind regards,<br>
                                    Stefanos Baziotis</div>
                                  <br>
                                  <div class="gmail_quote">
                                    <div dir="ltr" class="gmail_attr">Στις
                                      Σάβ, 14 Μαρ 2020 στις 2:04 π.μ.,
                                      ο/η Benson Bin Bin Li via llvm-dev
                                      <<a href="mailto:llvm-dev@lists.llvm.org" rel="noreferrer" target="_blank">llvm-dev@lists.llvm.org</a>>
                                      έγραψε:<br>
                                    </div>
                                    <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                                      <div dir="ltr"><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Dear LLVM Team,</span></div>
                                        <br><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">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).</span></div>
                                        <br><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">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.</span></div>
                                        <br><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Regarding the logistics:</span></div><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">1. Do I need to submit a resume/screening/patches? </span></div><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">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. </span></div><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">3. The GCC GSoC website suggested checking out their source code, compiling and running their test suite. Can I do something similar for LLVM?</span></div>
                                        <br><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Anyways, thank you for taking the time to read this email, and I hope to hear back!</span></div>
                                        <br><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Best regards,</span></div><div style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;background-color:transparent;font-weight:400;font-style:normal;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-east-asian:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Benson Li</span></div>
                                      </div>
_______________________________________________<br>
                                      LLVM Developers mailing list<br>
                                      <a href="mailto:llvm-dev@lists.llvm.org" rel="noreferrer" target="_blank">llvm-dev@lists.llvm.org</a><br>
                                      <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
                                    </blockquote>
                                  </div>
                                </blockquote>
                              </div>
                              <br>
                              <fieldset></fieldset>
                              <pre>_______________________________________________
LLVM Developers mailing list
<a href="mailto:llvm-dev@lists.llvm.org" rel="noreferrer" target="_blank">llvm-dev@lists.llvm.org</a>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
                            </blockquote>
                            <br>
                          </div>
                        </blockquote>
                      </div>
                    </blockquote>
                    <br>
                  </div>
                </blockquote>
              </div>
            </blockquote>
            <br>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </div>

</blockquote></div>
</blockquote></div>
</blockquote></div>
_______________________________________________<br>LLVM Developers mailing list<br><a href="mailto:llvm-dev@lists.llvm.org" rel="noreferrer" target="_blank">llvm-dev@lists.llvm.org</a><br><a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br></div></blockquote></div><br></div></div></blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>