Add hot cold splitting to GSOC
diff --git a/OpenProjects.html b/OpenProjects.html
index 8db1c77..536a3f9 100755
--- a/OpenProjects.html
+++ b/OpenProjects.html
@@ -17,6 +17,7 @@
             <li><a href="#llvm_dbg_invariant">Make LLVM passes debug info invariant</a></li>
             <li><a href="#llvm_mergesim">Improve MergeFunctions to incorporate MergeSimilarFunction patches and ThinLTO Support</a></li>
             <li><a href="#llvm_dwarf_yaml2obj">Add DWARF support to yaml2obj</a></li>
+            <li><a href="#llvm_holtcold">Improve hot cold splitting to outline maximal SESE/SEME regions</a></li>
           </ul>
           <li><a href="http://clang.llvm.org/"><b>Clang</b></a>
             <ul>
@@ -447,6 +448,78 @@
 </div>
 
 <!-- *********************************************************************** -->
+
+<div class="www_subsubsection">
+  <a name="llvm_hotcold">Improve hot cold splitting to outline maximal SESE/SEME regions</a>
+</div>
+<!-- *********************************************************************** -->
+
+ <div class="www_text">
+  <p><b>Description of the project:</b>Hot Cold Splitting in LLVM is an IR level
+    function splitting transformation. The goal of hot/cold splitting is to improve
+    the memory locality of code and helps reduce startup working set. The splitting pass
+    does this by identifying cold blocks and moving them into separate functions. Because it
+    is implemented at the IR level all the back end target benefit from it.
+
+    It is a relatively new optimization and it was recently presented at
+    the <a href="https://llvm.org/devmtg/2019-10/talk-abstracts.html#tech8">LLVM Dev Meeting in
+    2019</a> and the slides are <a href="https://llvm.org/devmtg/2019-10/slides/Kumar-HotColdSplitting.pdf">here</a> 
+    Currently, hot cold splitting works as a greedy algorithm where a region found
+    by first cold basic block is given preference. When a new region is found which
+    intersects with an existing region, the new region is dropped. One approach
+    would be to first run an analysis pass to find a set of SESE/SEME regions and do
+    some bookkeeping to detect the most profitable ones. The goal should be to not
+    regress and keep the compile time linear. There are fast algorithms to detect
+    SESE regions as illustrated in
+    (http://impact.gforge.inria.fr/impact2016/papers/impact2016-kumar.pdf), we can
+    additionally leverage the existing RegionInfo as well if that has acceptable
+    compilation time complexity.
+
+  </p>
+  <p><b>Preparation resources:</b>
+  <ul>
+    <li>
+      <a href="http://lists.llvm.org/pipermail/llvm-dev/2019-January/129606.html">Update on hot cold splitting</a>
+    </li>
+    <ul>
+      The following two papers provide earlier work on hot cold splitting. While these papers are a good start, LLVM's
+      HCS has completely different implementation in two aspects a) It is implemented at IR level and outlines basic
+      blocks as function rather than naked branches. b) It is based on regions and outlines a set of basic blocks.
+    <li>
+    <a href="http://pages.cs.wisc.edu/~fischer/cs701.f05/code.positioning.pdf">Original paper on hot cold splitting by
+      Pettis and Hansen.</a>Section 5 on procedure splitting is interesting one. It has nice examples ;) to help
+    understand why HCS works.
+    </li>
+    <li>
+      <a href="https://www.cs.cmu.edu/afs/cs/academic/class/15745-s07/www/papers/p80-cohn.pdf">Paper on hot cold
+        splitting</a> The paper provides some details on one approach to split functions. This is helpful to get a
+      different perspective and may help get new ideas.
+    </li>
+    <li>
+      <a href="https://llvm.org/devmtg/2019-10/talk-abstracts.html#tech8">Video and slides of the presentation</a>
+    </li>
+  </ul>
+  </p>
+  <p><b>Expected results:</b>
+    <ul>
+      <li>
+        Improve Hot Cold Splitting to detect maximal SEME regions without incurring super linear compile time overhead.
+        In case compile time overhead becomes quadratic, come up with a cost model to detect when quadratic behavior
+        gets triggered and bail out based on a compiler flag.
+      </li>
+    </ul>
+  </p>
+
+  <p><b>Confirmed Mentors:</b>Aditya Kumar</p>
+
+  <p><b>Desirable skills:</b>
+    Course on compiler design, SSA Representation,
+    Intermediate knowledge of C++, Familiarity with LLVM Core.
+  </p>
+</div>
+
+
+<!-- *********************************************************************** -->
 <div class="www_subsection">
   <a>MLIR</a>
 </div>