<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                      "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <title>LLVM Developer Policy</title>
  <link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>
      
<h1>LLVM Developer Policy</h1>
<ol>
  <li><a href="#introduction">Introduction</a></li>
  <li><a href="#policies">Developer Policies</a>
  <ol>
    <li><a href="#informed">Stay Informed</a></li>
    <li><a href="#patches">Making a Patch</a></li>
    <li><a href="#reviews">Code Reviews</a></li>
    <li><a href="#owners">Code Owners</a></li>
    <li><a href="#testcases">Test Cases</a></li>
    <li><a href="#quality">Quality</a></li>
    <li><a href="#commitaccess">Obtaining Commit Access</a></li>
    <li><a href="#newwork">Making a Major Change</a></li>
    <li><a href="#incremental">Incremental Development</a></li>
    <li><a href="#attribution">Attribution of Changes</a></li>
  </ol></li>
  <li><a href="#clp">Copyright, License, and Patents</a>
  <ol>
    <li><a href="#copyright">Copyright</a></li>
    <li><a href="#license">License</a></li>
    <li><a href="#patents">Patents</a></li>
  </ol></li>
</ol>
<div class="doc_author">Written by the LLVM Oversight Team</div>

<!--=========================================================================-->
<h2><a name="introduction">Introduction</a></h2>
<!--=========================================================================-->
<div class="doc_text">
<p>This document contains the LLVM Developer Policy which defines the project's
   policy towards developers and their contributions. The intent of this policy
   is to eliminate miscommunication, rework, and confusion that might arise from
   the distributed nature of LLVM's development.  By stating the policy in clear
   terms, we hope each developer can know ahead of time what to expect when
   making LLVM contributions.  This policy covers all llvm.org subprojects,
   including Clang, LLDB, etc.</p>
<p>This policy is also designed to accomplish the following objectives:</p>

<ol>
  <li>Attract both users and developers to the LLVM project.</li>

  <li>Make life as simple and easy for contributors as possible.</li>

  <li>Keep the top of Subversion trees as stable as possible.</li>
</ol>
  
<p>This policy is aimed at frequent contributors to LLVM. People interested in
   contributing one-off patches can do so in an informal way by sending them to
   the
   <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits
   mailing list</a> and engaging another developer to see it through the
   process.</p>
</div>

<!--=========================================================================-->
<h2><a name="policies">Developer Policies</a></h2>
<!--=========================================================================-->
<div class="doc_text">
<p>This section contains policies that pertain to frequent LLVM developers.  We
   always welcome <a href="#patches">one-off patches</a> from people who do not
   routinely contribute to LLVM, but we expect more from frequent contributors
   to keep the system as efficient as possible for everyone.  Frequent LLVM
   contributors are expected to meet the following requirements in order for
   LLVM to maintain a high standard of quality.<p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="informed">Stay Informed</a></h3>
<div class="doc_text">
<p>Developers should stay informed by reading at least the "dev" mailing list
   for the projects you are interested in, such as 
   <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a> for
   LLVM, <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev">cfe-dev</a>
   for Clang, or <a
   href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev">lldb-dev</a>
   for LLDB.  If you are doing anything more than just casual work on LLVM, it
   is suggested that you also subscribe to the "commits" mailing list for the
   subproject you're interested in, such as
  <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>,
  <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits">cfe-commits</a>,
  or <a href="http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits">lldb-commits</a>.
   Reading the "commits" list and paying attention to changes being made by
   others is a good way to see what other people are interested in and watching
   the flow of the project as a whole.</p>

<p>We recommend that active developers register an email account with 
   <a href="http://llvm.org/bugs/">LLVM Bugzilla</a> and preferably subscribe to
   the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs">llvm-bugs</a>
   email list to keep track of bugs and enhancements occurring in LLVM.  We
   really appreciate people who are proactive at catching incoming bugs in their
   components and dealing with them promptly.</p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="patches">Making a Patch</a></h3>

<div class="doc_text">
<p>When making a patch for review, the goal is to make it as easy for the
   reviewer to read it as possible.  As such, we recommend that you:</p>

<ol>
  <li>Make your patch against the Subversion trunk, not a branch, and not an old
      version of LLVM.  This makes it easy to apply the patch.  For information
      on how to check out SVN trunk, please see the <a
      href="GettingStarted.html#checkout">Getting Started Guide</a>.</li>
        
  <li>Similarly, patches should be submitted soon after they are generated.  Old
      patches may not apply correctly if the underlying code changes between the
      time the patch was created and the time it is applied.</li>

  <li>Patches should be made with <tt>svn diff</tt>, or similar. If you use
      a different tool, make sure it uses the <tt>diff -u</tt> format and
      that it doesn't contain clutter which makes it hard to read.</li>

  <li>If you are modifying generated files, such as the top-level
      <tt>configure</tt> script, please separate out those changes into
      a separate patch from the rest of your changes.</li>
</ol>
  
<p>When sending a patch to a mailing list, it is a good idea to send it as an
   <em>attachment</em> to the message, not embedded into the text of the
   message.  This ensures that your mailer will not mangle the patch when it
   sends it (e.g. by making whitespace changes or by wrapping lines).</p>

<p><em>For Thunderbird users:</em> Before submitting a patch, please open 
   <em>Preferences &#8594; Advanced &#8594; General &#8594; Config Editor</em>,
   find the key <tt>mail.content_disposition_type</tt>, and set its value to
   <tt>1</tt>. Without this setting, Thunderbird sends your attachment using
   <tt>Content-Disposition: inline</tt> rather than <tt>Content-Disposition:
   attachment</tt>. Apple Mail gamely displays such a file inline, making it
   difficult to work with for reviewers using that program.</p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="reviews">Code Reviews</a></h3>
<div class="doc_text">
<p>LLVM has a code review policy. Code review is one way to increase the quality
   of software. We generally follow these policies:</p>

<ol>
  <li>All developers are required to have significant changes reviewed before
      they are committed to the repository.</li>

  <li>Code reviews are conducted by email, usually on the llvm-commits
      list.</li>

  <li>Code can be reviewed either before it is committed or after.  We expect
      major changes to be reviewed before being committed, but smaller changes
      (or changes where the developer owns the component) can be reviewed after
      commit.</li>

  <li>The developer responsible for a code change is also responsible for making
      all necessary review-related changes.</li>

  <li>Code review can be an iterative process, which continues until the patch
      is ready to be committed.</li>
</ol>
  
<p>Developers should participate in code reviews as both reviewers and
   reviewees. If someone is kind enough to review your code, you should return
   the favor for someone else.  Note that anyone is welcome to review and give
   feedback on a patch, but only people with Subversion write access can approve
   it.</p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="owners">Code Owners</a></h3>
<div class="doc_text">

<p>The LLVM Project relies on two features of its process to maintain rapid
   development in addition to the high quality of its source base: the
   combination of code review plus post-commit review for trusted maintainers.
   Having both is a great way for the project to take advantage of the fact that
   most people do the right thing most of the time, and only commit patches
   without pre-commit review when they are confident they are right.</p>
     
<p>The trick to this is that the project has to guarantee that all patches that
   are committed are reviewed after they go in: you don't want everyone to
   assume someone else will review it, allowing the patch to go unreviewed.  To
   solve this problem, we have a notion of an 'owner' for a piece of the code.
   The sole responsibility of a code owner is to ensure that a commit to their
   area of the code is appropriately reviewed, either by themself or by someone
   else.  The current code owners are:</p>
  
<ol>
  <li><b>Evan Cheng</b>: Code generator and all targets.</li>

  <li><b>Greg Clayton</b>: LLDB.</li>

  <li><b>Doug Gregor</b>: Clang Frontend Libraries.</li>

  <li><b>Howard Hinnant</b>: libc++.</li>

  <li><b>Anton Korobeynikov</b>: Exception handling, debug information, and
      Windows codegen.</li>

  <li><b>Ted Kremenek</b>: Clang Static Analyzer.</li>

  <li><b>Chris Lattner</b>: Everything not covered by someone else.</li>
  
  <li><b>Duncan Sands</b>: llvm-gcc 4.2.</li>
</ol>
  
<p>Note that code ownership is completely different than reviewers: anyone can
   review a piece of code, and we welcome code review from anyone who is
   interested.  Code owners are the "last line of defense" to guarantee that all
   patches that are committed are actually reviewed.</p>

<p>Being a code owner is a somewhat unglamorous position, but it is incredibly
   important for the ongoing success of the project.  Because people get busy,
   interests change, and unexpected things happen, code ownership is purely
   opt-in, and anyone can choose to resign their "title" at any time. For now,
   we do not have an official policy on how one gets elected to be a code
   owner.</p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="testcases">Test Cases</a></h3>
<div class="doc_text">
<p>Developers are required to create test cases for any bugs fixed and any new
   features added.  Some tips for getting your testcase approved:</p>

<ol>
  <li>All feature and regression test cases are added to the 
      <tt>llvm/test</tt> directory. The appropriate sub-directory should be
      selected (see the <a href="TestingGuide.html">Testing Guide</a> for
      details).</li>

  <li>Test cases should be written in <a href="LangRef.html">LLVM assembly
      language</a> unless the feature or regression being tested requires
      another language (e.g. the bug being fixed or feature being implemented is
      in the llvm-gcc C++ front-end, in which case it must be written in
      C++).</li>

  <li>Test cases, especially for regressions, should be reduced as much as
      possible, by <a href="Bugpoint.html">bugpoint</a> or manually. It is
      unacceptable to place an entire failing program into <tt>llvm/test</tt> as
      this creates a <i>time-to-test</i> burden on all developers. Please keep
      them short.</li>
</ol>
  
<p>Note that llvm/test and clang/test are designed for regression and small
   feature tests only. More extensive test cases (e.g., entire applications,
   benchmarks, etc)
   should be added to the <tt>llvm-test</tt> test suite.  The llvm-test suite is
   for coverage (correctness, performance, etc) testing, not feature or
   regression testing.</p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="quality">Quality</a></h3>
<div class="doc_text">
<p>The minimum quality standards that any change must satisfy before being
   committed to the main development branch are:</p>

<ol>
  <li>Code must adhere to the <a href="CodingStandards.html">LLVM Coding
      Standards</a>.</li>

  <li>Code must compile cleanly (no errors, no warnings) on at least one
      platform.</li>

  <li>Bug fixes and new features should <a href="#testcases">include a
      testcase</a> so we know if the fix/feature ever regresses in the
      future.</li>

  <li>Code must pass the <tt>llvm/test</tt> test suite.</li>

  <li>The code must not cause regressions on a reasonable subset of llvm-test,
      where "reasonable" depends on the contributor's judgement and the scope of
      the change (more invasive changes require more testing). A reasonable
      subset might be something like
      "<tt>llvm-test/MultiSource/Benchmarks</tt>".</li>
</ol>

<p>Additionally, the committer is responsible for addressing any problems found
   in the future that the change is responsible for.  For example:</p>

<ul>
  <li>The code should compile cleanly on all supported platforms.</li>

  <li>The changes should not cause any correctness regressions in the
      <tt>llvm-test</tt> suite and must not cause any major performance
      regressions.</li>

  <li>The change set should not cause performance or correctness regressions for
      the LLVM tools.</li>

  <li>The changes should not cause performance or correctness regressions in
      code compiled by LLVM on all applicable targets.</li>

  <li>You are expected to address any <a href="http://llvm.org/bugs/">bugzilla
      bugs</a> that result from your change.</li>
</ul>
  
<p>We prefer for this to be handled before submission but understand that it
   isn't possible to test all of this for every submission.  Our build bots and
   nightly testing infrastructure normally finds these problems.  A good rule of
   thumb is to check the nightly testers for regressions the day after your
   change.  Build bots will directly email you if a group of commits that
   included yours caused a failure.  You are expected to check the build bot
   messages to see if they are your fault and, if so, fix the breakage.</p>

<p>Commits that violate these quality standards (e.g. are very broken) may be
   reverted. This is necessary when the change blocks other developers from
   making progress. The developer is welcome to re-commit the change after the
   problem has been fixed.</p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="commitaccess">Obtaining Commit Access</a></h3>
<div class="doc_text">

<p>We grant commit access to contributors with a track record of submitting high
   quality patches.  If you would like commit access, please send an email to
   <a href="mailto:sabre@nondot.org">Chris</a> with the following
   information:</p>

<ol>
  <li>The user name you want to commit with, e.g. "hacker".</li>

  <li>The full name and email address you want message to llvm-commits to come
      from, e.g. "J. Random Hacker &lt;hacker@yoyodyne.com&gt;".</li>

  <li>A "password hash" of the password you want to use, e.g. "2ACR96qjUqsyM".  
      Note that you don't ever tell us what your password is, you just give it
      to us in an encrypted form.  To get this, run "htpasswd" (a utility that
      comes with apache) in crypt mode (often enabled with "-d"), or find a web
      page that will do it for you.</li>
</ol>

<p>Once you've been granted commit access, you should be able to check out an
   LLVM tree with an SVN URL of "https://username@llvm.org/..." instead of the
   normal anonymous URL of "http://llvm.org/...".  The first time you commit
   you'll have to type in your password.  Note that you may get a warning from
   SVN about an untrusted key, you can ignore this.  To verify that your commit
   access works, please do a test commit (e.g. change a comment or add a blank
   line).  Your first commit to a repository may require the autogenerated email
   to be approved by a mailing list.  This is normal, and will be done when
   the mailing list owner has time.</p>

<p>If you have recently been granted commit access, these policies apply:</p>

<ol>
  <li>You are granted <i>commit-after-approval</i> to all parts of LLVM.  To get
      approval, submit a <a href="#patches">patch</a> to
      <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">llvm-commits</a>.
      When approved you may commit it yourself.</li>

  <li>You are allowed to commit patches without approval which you think are
      obvious. This is clearly a subjective decision &mdash; we simply expect
      you to use good judgement.  Examples include: fixing build breakage,
      reverting obviously broken patches, documentation/comment changes, any
      other minor changes.</li>

  <li>You are allowed to commit patches without approval to those portions of
      LLVM that you have contributed or maintain (i.e., have been assigned
      responsibility for), with the proviso that such commits must not break the
      build.  This is a "trust but verify" policy and commits of this nature are
      reviewed after they are committed.</li>

  <li>Multiple violations of these policies or a single egregious violation may
      cause commit access to be revoked.</li>
</ol>

<p>In any case, your changes are still subject to <a href="#reviews">code
   review</a> (either before or after they are committed, depending on the
   nature of the change).  You are encouraged to review other peoples' patches
   as well, but you aren't required to.</p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="newwork">Making a Major Change</a></h3>
<div class="doc_text">
<p>When a developer begins a major new project with the aim of contributing it
   back to LLVM, s/he should inform the community with an email to
   the <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">llvmdev</a>
   email list, to the extent possible. The reason for this is to:

<ol>
  <li>keep the community informed about future changes to LLVM, </li>

  <li>avoid duplication of effort by preventing multiple parties working on the
      same thing and not knowing about it, and</li>

  <li>ensure that any technical issues around the proposed work are discussed
      and resolved before any significant work is done.</li>
</ol>
  
<p>The design of LLVM is carefully controlled to ensure that all the pieces fit
   together well and are as consistent as possible. If you plan to make a major
   change to the way LLVM works or want to add a major new extension, it is a
   good idea to get consensus with the development community before you start
   working on it.</p>
  
<p>Once the design of the new feature is finalized, the work itself should be
   done as a series of <a href="#incremental">incremental changes</a>, not as a
   long-term development branch.</p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="incremental">Incremental Development</a></h3>
<div class="doc_text">
<p>In the LLVM project, we do all significant changes as a series of incremental
   patches.  We have a strong dislike for huge changes or long-term development
   branches.  Long-term development branches have a number of drawbacks:</p>

<ol>
  <li>Branches must have mainline merged into them periodically.  If the branch
      development and mainline development occur in the same pieces of code,
      resolving merge conflicts can take a lot of time.</li>

  <li>Other people in the community tend to ignore work on branches.</li>

  <li>Huge changes (produced when a branch is merged back onto mainline) are
      extremely difficult to <a href="#reviews">code review</a>.</li>

  <li>Branches are not routinely tested by our nightly tester
      infrastructure.</li>

  <li>Changes developed as monolithic large changes often don't work until the
      entire set of changes is done.  Breaking it down into a set of smaller
      changes increases the odds that any of the work will be committed to the
      main repository.</li>
</ol>    
  
<p>To address these problems, LLVM uses an incremental development style and we
   require contributors to follow this practice when making a large/invasive
   change.  Some tips:</p>

<ul>
  <li>Large/invasive changes usually have a number of secondary changes that are
      required before the big change can be made (e.g. API cleanup, etc).  These
      sorts of changes can often be done before the major change is done,
      independently of that work.</li>

  <li>The remaining inter-related work should be decomposed into unrelated sets
      of changes if possible.  Once this is done, define the first increment and
      get consensus on what the end goal of the change is.</li>

  <li>Each change in the set can be stand alone (e.g. to fix a bug), or part of
      a planned series of changes that works towards the development goal.</li>
    
  <li>Each change should be kept as small as possible. This simplifies your work
      (into a logical progression), simplifies code review and reduces the
      chance that you will get negative feedback on the change. Small increments
      also facilitate the maintenance of a high quality code base.</li>

  <li>Often, an independent precursor to a big change is to add a new API and
      slowly migrate clients to use the new API.  Each change to use the new API
      is often "obvious" and can be committed without review.  Once the new API
      is in place and used, it is much easier to replace the underlying
      implementation of the API.  This implementation change is logically
      separate from the API change.</li>
</ul>
  
<p>If you are interested in making a large change, and this scares you, please
   make sure to first <a href="#newwork">discuss the change/gather consensus</a>
   then ask about the best way to go about making the change.</p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="attribution">Attribution of Changes</a></h3>
<div class="doc_text">
<p>We believe in correct attribution of contributions to their contributors.
   However, we do not want the source code to be littered with random
   attributions "this code written by J. Random Hacker" (this is noisy and
   distracting).  In practice, the revision control system keeps a perfect
   history of who changed what, and the CREDITS.txt file describes higher-level
   contributions.  If you commit a patch for someone else, please say "patch
   contributed by J. Random Hacker!" in the commit message.</p>

<p>Overall, please do not add contributor names to the source code.</p>
</div>

<!--=========================================================================-->
<h2>
  <a name="clp">Copyright, License, and Patents</a>
</h2>
<!--=========================================================================-->

<div class="doc_text">
<p>This section addresses the issues of copyright, license and patents for the
   LLVM project.  Currently, the University of Illinois is the LLVM copyright
   holder and the terms of its license to LLVM users and developers is the
   <a href="http://www.opensource.org/licenses/UoI-NCSA.php">University of 
   Illinois/NCSA Open Source License</a>.</p>

<div class="doc_notes">
<p style="text-align:center;font-weight:bold">NOTE: This section deals with
   legal matters but does not provide legal advice.  We are not lawyers, please
   seek legal counsel from an attorney.</p>
</div>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="copyright">Copyright</a></h3>
<div class="doc_text">

<p>The LLVM project does not require copyright assignments, which means that the
   copyright for the code in the project is held by its respective contributors
   who have each agreed to release their contributed code under the terms of the
   <a href="#license">LLVM License</a>.</p>
   
<p>An implication of this is that the LLVM license is unlikely to ever change:
   changing it would require tracking down all the contributors to LLVM and
   getting them to agree that a license change is acceptable for their
   contribution.  Since there are no plans to change the license, this is not a
   cause for concern.</p>
   
<p>As a contributor to the project, this means that you (or your company) retain
   ownership of the code you contribute, that it cannot be used in a way that
   contradicts the license (which is a liberal BSD-style license), and that the
   license for your contributions won't change without your approval in the
   future.</p>
   
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="license">License</a></h3>
<div class="doc_text">
<p>We intend to keep LLVM perpetually open source and to use a liberal open
   source license. All of the code in LLVM is available under the
   <a href="http://www.opensource.org/licenses/UoI-NCSA.php">University of
   Illinois/NCSA Open Source License</a>, which boils down to this:</p>

<ul>
  <li>You can freely distribute LLVM.</li>
  <li>You must retain the copyright notice if you redistribute LLVM.</li>
  <li>Binaries derived from LLVM must reproduce the copyright notice (e.g. in an
      included readme file).</li>
  <li>You can't use our names to promote your LLVM derived products.</li>
  <li>There's no warranty on LLVM at all.</li>
</ul>
  
<p>We believe this fosters the widest adoption of LLVM because it <b>allows
   commercial products to be derived from LLVM</b> with few restrictions and
   without a requirement for making any derived works also open source (i.e.
   LLVM's license is not a "copyleft" license like the GPL). We suggest that you
   read the <a href="http://www.opensource.org/licenses/UoI-NCSA.php">License</a>
   if further clarification is needed.</p>
   
<p>In addition to the UIUC license, the runtime library components of LLVM
   (<b>compiler_rt and libc++</b>) are also licensed under the <a
   href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>,
   which does not contain the binary redistribution clause.  As a user of these
   runtime libraries, it means that you can choose to use the code under either
   license (and thus don't need the binary redistribution clause), and as a
   contributor to the code that you agree that any contributions to these
   libraries be licensed under both licenses.  We feel that this is important
   for runtime libraries, because they are implicitly linked into applications
   and therefore should not subject those applications to the binary
   redistribution clause. This also means that it is ok to move code from (e.g.)
   libc++ to the LLVM core without concern, but that code cannot be moved from
   the LLVM core to libc++ without the copyright owner's permission.
</p>

<p>Note that the LLVM Project does distribute llvm-gcc, <b>which is GPL.</b>
   This means that anything "linked" into llvm-gcc must itself be compatible
   with the GPL, and must be releasable under the terms of the GPL.  This
   implies that <b>any code linked into llvm-gcc and distributed to others may
   be subject to the viral aspects of the GPL</b> (for example, a proprietary
   code generator linked into llvm-gcc must be made available under the GPL).
   This is not a problem for code already distributed under a more liberal
   license (like the UIUC license), and does not affect code generated by
   llvm-gcc.  It may be a problem if you intend to base commercial development
   on llvm-gcc without redistributing your source code.</p>
  
<p>We have no plans to change the license of LLVM.  If you have questions or
   comments about the license, please contact the
   <a href="mailto:llvmdev@cs.uiuc.edu">LLVM Developer's Mailing List</a>.</p>
</div>

<!-- _______________________________________________________________________ -->
<h3><a name="patents">Patents</a></h3>
<div class="doc_text">
<p>To the best of our knowledge, LLVM does not infringe on any patents (we have
   actually removed code from LLVM in the past that was found to infringe).
   Having code in LLVM that infringes on patents would violate an important goal
   of the project by making it hard or impossible to reuse the code for
   arbitrary purposes (including commercial use).</p>
   
<p>When contributing code, we expect contributors to notify us of any potential
   for patent-related trouble with their changes.  If you or your employer own
   the rights to a patent and would like to contribute code to LLVM that relies
   on it, we require that the copyright owner sign an agreement that allows any
   other user of LLVM to freely use your patent.  Please contact
   the <a href="mailto:llvm-oversight@cs.uiuc.edu">oversight group</a> for more
   details.</p>
</div>

<!-- *********************************************************************** -->
<hr>
<address>
  <a href="http://jigsaw.w3.org/css-validator/check/referer"><img
  src="http://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Valid CSS"></a>
  <a href="http://validator.w3.org/check/referer"><img
  src="http://www.w3.org/Icons/valid-html401-blue" alt="Valid HTML 4.01"></a>
  Written by the 
  <a href="mailto:llvm-oversight@cs.uiuc.edu">LLVM Oversight Group</a><br>
  <a href="http://llvm.org/">The LLVM Compiler Infrastructure</a><br>
  Last modified: $Date$
</address>
</body>
</html>
