<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <br>
    <br>
    <div class="moz-cite-prefix">On 3/16/20 11:41 PM, Stefanos Baziotis
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CABAxE=KfhgGnvQCnihdx819+2Rkg2kJc0wE4JKX_tec6T5r-8A@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <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"
          moz-do-not-send="true">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"
cite="mid:CABAxE=KfhgGnvQCnihdx819+2Rkg2kJc0wE4JKX_tec6T5r-8A@mail.gmail.com">
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">Στις Δευ, 16 Μαρ 2020 στις
          5:53 π.μ., ο/η Nicholas Krause <<a
            href="mailto:xerofoify@gmail.com" moz-do-not-send="true">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" moz-do-not-send="true">https://jonasdevlieghere.com/understanding-the-clang-ast/</a>,
                  <a
                    href="https://releases.llvm.org/2.6/docs/tutorial/JITTutorial1.html"
                    target="_blank" moz-do-not-send="true">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_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" moz-do-not-send="true">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" moz-do-not-send="true">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" moz-do-not-send="true">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" moz-do-not-send="true">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" moz-do-not-send="true">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" moz-do-not-send="true">https://www.youtube.com/watch?v=J5xExRGaIIY</a><br>
                    <a
                      href="https://www.youtube.com/watch?v=5kkMpJpIGYU"
                      target="_blank" moz-do-not-send="true">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" moz-do-not-send="true">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_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" moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
                      <a
                        href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
                        rel="noreferrer" target="_blank"
                        moz-do-not-send="true">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" moz-do-not-send="true">llvm-dev@lists.llvm.org</a>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" target="_blank" moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a>
</pre>
            </blockquote>
            <br>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>