Remove HAVE_BZLIB and HAVE_BZIP2. We always have bzip2 now.
[oota-llvm.git] / docs / OpenProjects.html
index ddc6720d3feb5558527452665801d2b2a7ca35d5..2acb7279c21357f297fa343edde5cfed8c4f3a24 100644 (file)
   <li><a href="#what">What is this?</a></li>
   <li><a href="#improving">Improving the current system</a>
   <ol>
+    <li><a href="#code-cleanups">Implementing Code Cleanup bugs</a></li>
     <li><a href="#glibc">Port glibc to LLVM</a></li>
-    <li><a href="#NightlyTest">Improving the Nightly Tester</a></li>
     <li><a href="#programs">Compile programs with the LLVM Compiler</a></li>
     <li><a href="#llvm_ir">Extend the LLVM intermediate representation</a></li>
+    <li><a href="#target">Target backend improvements</a></li>
     <li><a href="#misc_imp">Miscellaneous Improvements</a></li>
   </ol></li>
 
   <li><a href="#new">Adding new capabilities to LLVM</a>
   <ol>
+    <li><a href="#newfeaturebugs">Implementing new feature PRs</a></li>
     <li><a href="#pointeranalysis">Pointer and Alias Analysis</a></li>
-    <li><a href="#profileguided">Profile Guided Optimization</a></li>
+    <li><a href="#profileguided">Profile-Guided Optimization</a></li>
     <li><a href="#xforms">New Transformations and Analyses</a></li>
     <li><a href="#x86be">X86 Back-end Improvements</a></li>
     <li><a href="#misc_new">Miscellaneous Additions</a></li>
   </ol></li>
 </ul>
 
+<div class="doc_author">
+  <p>Written by the <a href="http://llvm.cs.uiuc.edu/">LLVM Team</a></p>
+</div>
+
+
 <!-- *********************************************************************** -->
 <div class="doc_section">
   <a name="what">What is this?</a>
@@ -77,36 +84,35 @@ can use improvement...</p>
 
 <!-- ======================================================================= -->
 <div class="doc_subsection">
-  <a name="glibc">Port glibc to LLVM</a>
+  <a name="code-cleanups">Implementing Code Cleanup bugs</a>
 </div>
 
 <div class="doc_text">
 
-<p>It would be very useful to <a
-href="http://www.gnu.org/software/libc/porting.html">port</a> <a
-href="http://www.gnu.org/software/glibc/">glibc</a> to LLVM.  This would allow a
-variety of interprocedural algorithms to be much more effective in the face of
-library calls.  The most important pieces to port are things like the string
-library and the <tt>stdio</tt> related functions... low-level system calls like
-'<tt>read</tt>' should stay unimplemented in LLVM.</p>
+<p>
+The <a href="http://llvm.cs.uiuc.edu/bugs/">LLVM bug tracker</a> occasionally
+has <a
+  href="http://llvm.cs.uiuc.edu/bugs/buglist.cgi?short_desc_type=allwordssubstr&amp;short_desc=&amp;long_desc_type=allwordssubstr&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=code-cleanup&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailtype1=substring&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailcc2=1&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;changedin=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;order=Bug+Number&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">"code-cleanup" bugs</a> filed in it.  Taking one of these and fixing it is a good
+way to get your feet wet in the LLVM code and discover how some of its components
+work.
+</p>
 
 </div>
 
 <!-- ======================================================================= -->
 <div class="doc_subsection">
-  <a name="NightlyTest">Improving the Nightly Tester</a>
+  <a name="glibc">Port glibc to LLVM</a>
 </div>
 
 <div class="doc_text">
 
-<p>The <a href="/testresults/">Nightly Tester</a> is a simple perl script
-(located in <tt>utils/NightlyTest.pl</tt>) which runs every night to generate a
-daily report.  It could use the following improvements:</p>
-
-<ol>
-<li>Regression tests - We should run the regression tests in addition to the
-    program tests...</li>
-</ol>
+<p>It would be very useful to <a
+href="http://www.gnu.org/software/libc/manual/html_node/Porting.html">port</a> <a
+href="http://www.gnu.org/software/libc/">glibc</a> to LLVM.  This would allow a
+variety of interprocedural algorithms to be much more effective in the face of
+library calls.  The most important pieces to port are things like the string
+library and the <tt>stdio</tt> related functions... low-level system calls like
+'<tt>read</tt>' should stay unimplemented in LLVM.</p>
 
 </div>
 
@@ -148,6 +154,27 @@ all the back-ends: CBE, llc, and lli.</p>
 
 </div>
 
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="target">Target backend improvements</a>
+</div>
+
+<div class="doc_text">
+
+<ol>
+  <li>Find benchmarks either using our <a
+  href="http://llvm.cs.uiuc.edu/testresults/">test results</a> or on your own,
+  where LLVM code generators do not produce optimal code or simply where another
+  compiler produces better code.  Try to minimize the test case that
+  demonstrates the issue.  Then, either <a
+  href="http://llvm.cs.uiuc.edu/bugs/">submit a bug</a> with your testcase and
+  the code that LLVM produces vs. the code that it <em>should</em> produce, or
+  even better, see if you can improve the code generator and submit a
+  patch.</li>
+</ol>
+
+</div>
+
 <!-- ======================================================================= -->
 <div class="doc_subsection">
   <a name="misc_imp">Miscellaneous Improvements</a>
@@ -190,6 +217,19 @@ also be very rewarding.</p>
 
 </div>
 
+
+<!-- ======================================================================= -->
+<div class="doc_subsection">
+  <a name="newfeaturebugs">Implementing new feature PRs</a>
+</div>
+
+<div class="doc_text">
+
+<p>Many ideas for feature requests are stored in LLVM bugzilla.  Just <a
+  href="http://llvm.cs.uiuc.edu/bugs/buglist.cgi?short_desc_type=allwordssubstr&amp;short_desc=&amp;long_desc_type=allwordssubstr&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;status_whiteboard_type=allwordssubstr&amp;status_whiteboard=&amp;keywords_type=allwords&amp;keywords=new-feature&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;emailassigned_to1=1&amp;emailtype1=substring&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailcc2=1&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;votes=&amp;changedin=&amp;chfieldfrom=&amp;chfieldto=Now&amp;chfieldvalue=&amp;cmdtype=doit&amp;namedcmd=All+PRs&amp;newqueryname=&amp;order=Bug+Number&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">search for bugs with a "new-feature" keyword</a>.</p>
+
+</div>
+
 <!-- ======================================================================= -->
 <div class="doc_subsection">
   <a name="pointeranalysis">Pointer and Alias Analysis</a>
@@ -209,12 +249,8 @@ themselves.  It seems natural to want to take advantage of this...</p>
 <li>Implement a flow-sensitive context-insensitive alias analysis algorithm<br>
   - Just an efficient local algorithm perhaps?</li>
 
-<li>Implement an interface to update analyses in response to common code motion
-    transformations</li>
-
 <li>Implement alias-analysis-based optimizations:
   <ul>
-  <li>Dead store elimination</li>
   <li>...</li>
   </ul></li>
 </ol>
@@ -223,7 +259,7 @@ themselves.  It seems natural to want to take advantage of this...</p>
 
 <!-- ======================================================================= -->
 <div class="doc_subsection">
-  <a name="profileguided">Profile Guided Optimization</a>
+  <a name="profileguided">Profile-Guided Optimization</a>
 </div>
 
 <div class="doc_text">
@@ -234,7 +270,7 @@ but we don't have many transformations.  We would welcome new profile-guided
 transformations as well as improvements to the current profiling system.
 </p>
 
-<p>Ideas for profile guided transformations:</p>
+<p>Ideas for profile-guided transformations:</p>
 
 <ol>
 <li>Superblock formation (with many optimizations)</li>
@@ -271,12 +307,12 @@ profiling code to work with the generic profiling interfaces.</li>
 <div class="doc_text">
 
 <ol>
+<li>Implement <a href="http://www.cs.purdue.edu/homes/vandrutj/">GVN-PRE</a>, a 
+  powerful and simple Partial Redundancy Elimination algorithm for SSA form</li>
 <li>Implement a Dependence Analysis Infrastructure<br>
      - Design some way to represent and query dep analysis</li>
 <li>Implement a strength reduction pass</li>
 <li>Value range propagation pass</li>
-<li>Implement an unswitching pass</li>
-<li>Write a loop unroller, with a simple heuristic for when to unroll</li>
 </ol>
 
 </div>
@@ -292,6 +328,10 @@ profiling code to work with the generic profiling interfaces.</li>
 <li>Implement a better instruction selector</li>
 <li>Implement support for the "switch" instruction without requiring the 
     lower-switches pass.</li>
+<li>Implement interprocedural register allocation. The CallGraphSCCPass can be
+    used to implement a bottom-up analysis that will determine the *actual* 
+    registers clobbered by a function. Use the pass to fine tune register usage 
+    in callers based on *actual* registers used by the callee.</li>
 </ol>
 
 </div>
@@ -304,11 +344,16 @@ profiling code to work with the generic profiling interfaces.</li>
 <div class="doc_text">
 
 <ol>
-<li>Port the <A HREF="http://www-sop.inria.fr/mimosa/fp/Bigloo/">Bigloo</A>
+<li>Port the <a href="http://www-sop.inria.fr/mimosa/fp/Bigloo/">Bigloo</A>
 Scheme compiler, from Manuel Serrano at INRIA Sophia-Antipolis, to
 output LLVM bytecode. It seems that it can already output .NET
 bytecode, JVM bytecode, and C, so LLVM would ostensibly be another good
 candidate.</li>
+<li>Write a new frontend for C/C++ <b>in</b> C++, giving us the ability to
+directly use LLVM C++ classes from within a compiler rather than use
+C-based wrapper functions a la llvm-gcc.  One possible starting point is the <a
+href="http://www.parashift.com/c++-faq-lite/compiler-dependencies.html#faq-37.11">C++
+yacc grammar by Ed Willink</a>.</li>
 <li>Write a new frontend for some other language (Java? OCaml? Forth?)</li>
 <li>Write a new backend for a target (IA64? MIPS? MMIX?)</li>
 <li>Write a disassembler for machine code that would use TableGen to output 
@@ -318,6 +363,20 @@ run it through llvm-gcc, then run a random set of passes on it using opt.
 Try to crash opt. When opt crashes, use bugpoint to reduce the test case and
 mail the result to yourself.  Repeat ad infinitum.</li>
 <li>Design a simple, recognizable logo.</li>
+<li>Improve the usefulness and utility of the Skeleton target backend:
+<ul>
+  <li>Convert the non-functional Skeleton target to become an abstract machine
+  target (choose some simple instructions, a register set, etc).  This will
+  become a much more useful example of a backend since it would be a simple
+  but <em>functional</em> backend.  Examples of such architectures include MIX,
+  MMIX, <a
+  href="http://www.cs.cinvestav.mx/SC/prof_personal/adiaz/vhdl/DLX/">DLX</a>,
+  or come up with your own!</li>
+  <li>Use the new Skeleton backend in the Interpreter: compile LLVM to Skeleton
+  target, and then interpret that code instead of LLVM.  Performance win would
+  be the primary goal, as the number of registers would be a small constant
+  instead of unbounded, for example.</li>
+</ul></li>
 </ol>
 
 </div>