<div dir="ltr"><span id="gmail-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;color:rgb(0,0,0);background-color:transparent;font-variant-numeric:normal;font-variant-east-asian:normal;vertical-align:baseline;white-space:pre-wrap">IMHO, you do. :)</span></blockquote><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);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></p></span><br class="gmail-Apple-interchange-newline"><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">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" 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" 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="color:rgb(0,0,0);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" 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" 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/" target="_blank">https://jonasdevlieghere.com/understanding-the-clang-ast/</a>,
                                  <a href="https://releases.llvm.org/2.6/docs/tutorial/JITTutorial1.html" 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>
                                  <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" id="gmail-m_-3739033030269313122gmail-m_-760413992732672551gmail-m_-1000483654617762840gmail-m_8480675998277982117gmail-docs-internal-guid-48482a0b-7fff-e7f0-4627-fb046bcc2e7f"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">LLVM Pass</span></p>
                                  <ol style="margin-top:0px;margin-bottom:0px">
                                    <li dir="ltr" style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant: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" 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></p></li>
                                    <li dir="ltr" style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"><p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant: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></p></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>
                                  <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap">LLDB Tab Completion</span></p>
                                  <ol style="margin-top:0px;margin-bottom:0px">
                                    <li style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant: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></p></li>
                                    <li style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"><p style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant: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></p></li>
                                    <li style="list-style-type:decimal;font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant: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" 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="color:rgb(0,0,0);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="color:rgb(0,0,0);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="color:rgb(0,0,0);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" 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="color:rgb(0,0,0);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" 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" 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" target="_blank">https://www.youtube.com/watch?v=J5xExRGaIIY</a><br>
                                    <a href="https://www.youtube.com/watch?v=5kkMpJpIGYU" 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" 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">
                                        <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt" id="gmail-m_-3739033030269313122gmail-m_-760413992732672551gmail-m_-1000483654617762840gmail-m_8480675998277982117gmail-m_-4313643294865233574gmail-m_-8466928840379538763gmail-docs-internal-guid-2a0d31dc-7fff-9297-e699-ad2df8792b10"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Dear LLVM Team,</span></p>
                                        <br>
                                        <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant: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></p>
                                        <br>
                                        <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant: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></p>
                                        <br>
                                        <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Regarding the logistics:</span></p>
                                        <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">1. Do I need to submit a resume/screening/patches? </span></p>
                                        <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant: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></p>
                                        <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant: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></p>
                                        <br>
                                        <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant: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></p>
                                        <br>
                                        <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Best regards,</span></p>
                                        <p dir="ltr" style="line-height:1.38;margin-top:0pt;margin-bottom:0pt"><span style="font-size:11pt;font-family:Arial;color:rgb(0,0,0);background-color:transparent;font-weight:400;font-style:normal;font-variant:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap">Benson Li</span></p>
                                      </div>
_______________________________________________<br>
                                      LLVM Developers mailing list<br>
                                      <a href="mailto:llvm-dev@lists.llvm.org" 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>
                                    </blockquote>
                                  </div>
                                </blockquote>
                              </div>
                              <br>
                              <fieldset></fieldset>
                              <pre>_______________________________________________
LLVM Developers mailing list
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" 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>