Add more GSoC ideas from IBM folks.
diff --git a/OpenProjects.html b/OpenProjects.html
index 4cd42b0..6c7a508 100755
--- a/OpenProjects.html
+++ b/OpenProjects.html
@@ -20,6 +20,10 @@
             <li><a href="#llvm_hotcold">Improve hot cold splitting to outline maximal SESE/SEME regions</a></li>
             <li><a href="#llvm_pass_order">Advanced Heuristics for Ordering Compiler Optimization Passes</a></li>
             <li><a href="#llvm_ml_scc">Machine learning and compiler optimizations: using inter-procedural analysis to select optimizations</a></li>
+            <li><a href="#llvm_postdominators">Add PostDominatorTree in LoopStandardAnalysisResults</a></li>
+            <li><a href="#llvm_loopnest">Create loop nest pass</a></li>
+            <li><a href="#llvm_instdump">Instruction properties dumper and checker</a></li>
+            <li><a href="#llvm_movecode">Unify ways to move code or check if code is safe to be moved</a></li>
           </ul>
           <li><a href="http://clang.llvm.org/"><b>Clang</b></a>
             <ul>
@@ -603,6 +607,154 @@
  </p>
 </div>
 
+<!-- *********************************************************************** -->
+
+<div class="www_subsubsection">
+  <a name="llvm_postdominators"></a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="www_text">
+  <p><b>Description of the project:</b>
+    There is currently no easy way to use the result of
+    PostDominatorTreeAnalysis in a loop pass, as PostDominatorTreeAnalysis is a
+    function analysis, and it is not included in LoopStandardAnalysisResults. If one adds
+    PostDominatorTreeAnalysis in LoopStandardAnalysisResults, then all loop passes
+    need to preserve it, meaning that all loop passes need to make sure the result is up to
+    date. In this project, we want to modify some commonly used utilities to generate a
+    list of updates, which can be consume by different updaters, e.g. DomTreeUpdater to
+    update DominatorTree and PostDominatorTree, and MSSAU to update MemorySSA,
+    etc, instead of only updating the DominatorTree. In additional, we want to change
+    existing loop passes to preserve the PostDominatorTree. Finally, adding
+    PostDominatorTree in LoopStandardAnalysisResults.
+  </p>
+  <p><b>Expected results (possibilities):</b>
+    PostDominatorTree added in LoopStandardAnalysisResults, and
+    can be used by loop passes. More common utilities change to generate list of updates
+    to be easily obtained by different updaters.
+  </p>
+  <p><b>Confirmed Mentors:</b>
+    Whitney Tsang, Ettore Tiotto, Bardia Mahjour
+  </p>
+  <p><b>Desirable skills:</b>
+    Intermediate knowledge of C++, self-motivation.
+  </p>
+  <p><b>Preparation resources:</b>
+    <a href="https://reviews.llvm.org/rL336163"></a>
+    <a href="http://llvm.org/doxygen/classllvm_1_1DomTreeUpdater.html"></a>
+    <a href="https://llvm.org/doxygen/classllvm_1_1PostDominatorTreeAnalysis.html"></a>
+    <a href="http://llvm.org/doxygen/structllvm_1_1LoopStandardAnalysisResults.html"></a>
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="www_subsubsection">
+  <a name="llvm_loopnest">Create LoopNest Pass</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="www_text">
+  <p><b>Description of the project:</b>
+    Currently if you want to write a pass that works on a loop
+    nest, you have to pick from either a function pass or a loop pass. If you chose to write
+    it as a function pass, then you lose the ability to add loops dynamically back to the
+    pipeline. If you decide to write it as a loop pass, then you are wasting compile time to
+    traverse to your pass and return right away when the given loop is not the outermost
+    loop. In this project, we want to create a LoopNestPass, where transformations
+    intended for loop nest can inherit from it, and have the same ability as the LoopPass to
+    dynamically add loops to the pipeline. In addition, create all the adaptors requires to
+    add loop nest passes at different points of the pass builder.
+  </p>
+  <p><b>Expected results (possibilities):</b>
+    Transformations/Analyses can be written as LoopNestPass,
+    without compromising compile time or usability.
+  </p>
+  <p><b>Confirmed Mentors:</b>
+    Whitney Tsang, Ettore Tiotto
+  </p>
+  <p><b>Desirable skills:</b>
+    Intermediate knowledge of C++, self-motivation.
+  </p>
+  <p><b>Preparation resources:</b>
+    <a href="https://reviews.llvm.org/D68789"</a>
+    <a href="https://llvm.org/doxygen/classllvm_1_1PassBuilder.html"</a>
+  </p>
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="www_subsubsection">
+  <a name="llvm_instdump">Instruction properties dumper and checker</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="www_text">
+  <p><b>Description of the project:</b>
+    TableGen is flexible and allow the end-user to define and set common properties of
+    records (instructions). Every target has dozens or hundreds of such instruction
+    properties. As target code evolve, the td files become more and more complicated,
+    it become harder to see whether the setting of some properties is necessary, even
+    correct or not. eg: whether hasSideEffects property is correctly set on all
+    instructions?
+
+    One can manually search through the TableGen-generated files; or write some
+    script to run TableGen and matching the output for some specific properties, but a
+    standalone utility that can dump and check instruction properties
+    systematically (eg: also allow target to define some verification rules) might be
+    better from a build-process-management standpoint. This can help to find quite
+    some hidden bugs and hence improve the overall codegen code quality. In
+    addition, the utility can be used to write regression tests for instruction
+    properties, which will increase the quality and precision of LLVM's
+    regression tests.
+  </p>
+  <p><b>Expected results (possibilities):</b>
+    A standalone llvm tool or utility that can dump and check instruction properties systematically
+  </p>
+  <p><b>Confirmed Mentors:</b>
+    Hal Finkel, Jinsong Ji , Qingshan Zhang
+  </p>
+  <p><b>Desirable skills:</b>
+    Intermediate knowledge of C++, self-motivation.
+  </p>
+</div>
+
+<!-- *********************************************************************** -->
+
+<div class="www_subsubsection">
+  <a name="llvm_movecode">Unify ways to move code or check if code is safe to be moved</a>
+</div>
+<!-- *********************************************************************** -->
+
+<div class="www_text">
+  <p><b>Description of the project:</b>
+    Determining whether it is safe to move code around is
+    implemented in several transformations in LLVM (e.g. canSinkOrHoistInst in LICM,
+    or makeLoopInvariant in Loop). Each of these implementations may return different
+    results for a given query, making code motion safety checks inconsistent and
+    duplicated. On the other hand, the mechanism for doing the actual code motion is also
+    different in each transformation. Code duplication causes maintenance problems and
+    increases the time taken to write new transformation. In this project, we want to first
+    identify all the existing ways in loop transformations (could be function or loop pass)
+    to check if code is safe to move, and to move code, and create a standardize way to do
+    so.
+  </p>
+  <p><b>Expected results (possibilities):</b>
+    A standardize/superset of all the existing ways in loop
+    transformations of checking if code is safe to be moved and to move <code class=""></code>
+  </p>
+
+  <p><b>Confirmed Mentors:</b>
+    Whitney Tsang, Ettore Tiotto, Bardia Mahjour
+  </p>
+  <p><b>Desirable skills:</b>
+    Intermediate knowledge of C++, self-motivation.
+  </p>
+  <p><b>Preparation resources:</b>
+    <a href="https://github.com/llvm/llvm-project/blob/master/llvm/include/llvm/Transforms/Utils/CodeMoverUtils.h"></a>
+    <a href="https://llvm.org/doxygen/LICM_8cpp_source.html"></a>
+    <a href="https://llvm.org/doxygen/classllvm_1_1Loop.html"></a>
+  </p>
+</div>
 
 <!-- *********************************************************************** -->
 <div class="www_subsection">