</head>
<body>
-<div class="doc_title">
+<h1>
LLVM Alias Analysis Infrastructure
-</div>
+</h1>
<ol>
<li><a href="#introduction">Introduction</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="introduction">Introduction</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="overview"><tt>AliasAnalysis</tt> Class Overview</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="pointers">Representation of Pointers</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="alias">The <tt>alias</tt> method</a>
-</div>
+</h3>
<div class="doc_text">
<p>The <tt>alias</tt> method is the primary interface used to determine whether
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="MustMayNo">Must, May, and No Alias Responses</a>
-</div>
+</h4>
<div class="doc_text">
<p>The NoAlias response may be used when there is never an immediate dependence
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ModRefInfo">The <tt>getModRefInfo</tt> methods</a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="OtherItfs">Other useful <tt>AliasAnalysis</tt> methods</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
The <tt>pointsToConstantMemory</tt> method
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="simplemodref">The <tt>doesNotAccessMemory</tt> and
<tt>onlyReadsMemory</tt> methods</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="writingnew">Writing a new <tt>AliasAnalysis</tt> Implementation</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="passsubclasses">Different Pass styles</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="requiredcalls">Required initialization calls</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="interfaces">Interfaces which may be specified</a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="chaining"><tt>AliasAnalysis</tt> chaining behavior</a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="updating">Updating analysis results for transformations</a>
-</div>
+</h3>
<div class="doc_text">
<p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">The <tt>deleteValue</tt> method</div>
+<h4>The <tt>deleteValue</tt> method</h4>
<div class="doc_text">
The <tt>deleteValue</tt> method is called by transformations when they remove an
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">The <tt>copyValue</tt> method</div>
+<h4>The <tt>copyValue</tt> method</h4>
<div class="doc_text">
The <tt>copyValue</tt> method is used when a new value is introduced into the
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">The <tt>replaceWithNewValue</tt> method</div>
+<h4>The <tt>replaceWithNewValue</tt> method</h4>
<div class="doc_text">
This method is a simple helper method that is provided to make clients easier to
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">The <tt>addEscapingUse</tt> method</div>
+<h4>The <tt>addEscapingUse</tt> method</h4>
<div class="doc_text">
<p>The <tt>addEscapingUse</tt> method is used when the uses of a pointer
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="implefficiency">Efficiency Issues</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="limitations">Limitations</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="using">Using alias analysis results</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="memdep">Using the <tt>MemoryDependenceAnalysis</tt> Pass</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ast">Using the <tt>AliasSetTracker</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
The AliasSetTracker implementation
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="direct">Using the <tt>AliasAnalysis</tt> interface directly</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="exist">Existing alias analysis implementations and clients</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="impls">Available <tt>AliasAnalysis</tt> implementations</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="no-aa">The <tt>-no-aa</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="basic-aa">The <tt>-basicaa</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="globalsmodref">The <tt>-globalsmodref-aa</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="steens-aa">The <tt>-steens-aa</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ds-aa">The <tt>-ds-aa</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="scev-aa">The <tt>-scev-aa</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="aliasanalysis-xforms">Alias analysis driven transformations</a>
-</div>
+</h3>
<div class="doc_text">
LLVM includes several alias-analysis driven transformations which can be used
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="adce">The <tt>-adce</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="licm">The <tt>-licm</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="argpromotion">The <tt>-argpromotion</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
<p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="gvn">The <tt>-gvn</tt>, <tt>-memcpyopt</tt>, and <tt>-dse</tt>
passes</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="aliasanalysis-debug">Clients for debugging and evaluation of
implementations</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="print-alias-sets">The <tt>-print-alias-sets</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="count-aa">The <tt>-count-aa</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="aa-eval">The <tt>-aa-eval</tt> pass</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="memdep">Memory Dependence Analysis</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>
-<div class="doc_title"> LLVM Bitcode File Format </div>
+<h1> LLVM Bitcode File Format</h1>
<ol>
<li><a href="#abstract">Abstract</a></li>
<li><a href="#overview">Overview</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="abstract">Abstract</a></div>
+<h2><a name="abstract">Abstract</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="overview">Overview</a></div>
+<h2><a name="overview">Overview</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="bitstream">Bitstream Format</a></div>
+<h2><a name="bitstream">Bitstream Format</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="magic">Magic Numbers</a>
-</div>
+<h3>
+ <a name="magic">Magic Numbers</a>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="primitives">Primitives</a>
-</div>
+<h3>
+ <a name="primitives">Primitives</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="fixedwidth">Fixed Width Integers</a>
-</div>
+<h4>
+ <a name="fixedwidth">Fixed Width Integers</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="variablewidth">Variable Width
-Integers</a></div>
+<h4>
+ <a name="variablewidth">Variable Width Integers</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="char6">6-bit characters</a></div>
+<h4><a name="char6">6-bit characters</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="wordalign">Word Alignment</a></div>
+<h4><a name="wordalign">Word Alignment</a></h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="abbrevid">Abbreviation IDs</a>
-</div>
+<h3>
+ <a name="abbrevid">Abbreviation IDs</a>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="blocks">Blocks</a>
-</div>
+<h3>
+ <a name="blocks">Blocks</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="ENTER_SUBBLOCK">ENTER_SUBBLOCK
-Encoding</a></div>
+<h4><a name="ENTER_SUBBLOCK">ENTER_SUBBLOCK Encoding</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="END_BLOCK">END_BLOCK
-Encoding</a></div>
+<h4><a name="END_BLOCK">END_BLOCK Encoding</a></h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="datarecord">Data Records</a>
-</div>
+<h3>
+ <a name="datarecord">Data Records</a>
+</h3>
<div class="doc_text">
<p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="UNABBREV_RECORD">UNABBREV_RECORD
-Encoding</a></div>
+<h4><a name="UNABBREV_RECORD">UNABBREV_RECORD Encoding</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="abbrev_records">Abbreviated Record
-Encoding</a></div>
+<h4><a name="abbrev_records">Abbreviated Record Encoding</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="abbreviations">Abbreviations</a>
-</div>
+<h3>
+ <a name="abbreviations">Abbreviations</a>
+</h3>
<div class="doc_text">
<p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="DEFINE_ABBREV">DEFINE_ABBREV
- Encoding</a></div>
+<h4><a name="DEFINE_ABBREV">DEFINE_ABBREV Encoding</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="stdblocks">Standard Blocks</a>
-</div>
+<h3>
+ <a name="stdblocks">Standard Blocks</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="BLOCKINFO">#0 - BLOCKINFO
-Block</a></div>
+<h4><a name="BLOCKINFO">#0 - BLOCKINFO Block</a></h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="wrapper">Bitcode Wrapper Format</a></div>
+<h2><a name="wrapper">Bitcode Wrapper Format</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="llvmir">LLVM IR Encoding</a></div>
+<h2><a name="llvmir">LLVM IR Encoding</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="basics">Basics</a>
-</div>
+<h3>
+ <a name="basics">Basics</a>
+</h3>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="ir_magic">LLVM IR Magic Number</a></div>
+<h4><a name="ir_magic">LLVM IR Magic Number</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="ir_signed_vbr">Signed VBRs</a></div>
+<h4><a name="ir_signed_vbr">Signed VBRs</a></h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="ir_blocks">LLVM IR Blocks</a></div>
+<h4><a name="ir_blocks">LLVM IR Blocks</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="MODULE_BLOCK">MODULE_BLOCK Contents</a>
-</div>
+<h3>
+ <a name="MODULE_BLOCK">MODULE_BLOCK Contents</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_VERSION">MODULE_CODE_VERSION Record</a>
-</div>
+<h4><a name="MODULE_CODE_VERSION">MODULE_CODE_VERSION Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_TRIPLE">MODULE_CODE_TRIPLE Record</a>
-</div>
+<h4><a name="MODULE_CODE_TRIPLE">MODULE_CODE_TRIPLE Record</a></h4>
<div class="doc_text">
<p><tt>[TRIPLE, ...string...]</tt></p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_DATALAYOUT">MODULE_CODE_DATALAYOUT Record</a>
-</div>
+<h4><a name="MODULE_CODE_DATALAYOUT">MODULE_CODE_DATALAYOUT Record</a></h4>
<div class="doc_text">
<p><tt>[DATALAYOUT, ...string...]</tt></p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_ASM">MODULE_CODE_ASM Record</a>
-</div>
+<h4><a name="MODULE_CODE_ASM">MODULE_CODE_ASM Record</a></h4>
<div class="doc_text">
<p><tt>[ASM, ...string...]</tt></p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_SECTIONNAME">MODULE_CODE_SECTIONNAME Record</a>
-</div>
+<h4><a name="MODULE_CODE_SECTIONNAME">MODULE_CODE_SECTIONNAME Record</a></h4>
<div class="doc_text">
<p><tt>[SECTIONNAME, ...string...]</tt></p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_DEPLIB">MODULE_CODE_DEPLIB Record</a>
-</div>
+<h4><a name="MODULE_CODE_DEPLIB">MODULE_CODE_DEPLIB Record</a></h4>
<div class="doc_text">
<p><tt>[DEPLIB, ...string...]</tt></p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_GLOBALVAR">MODULE_CODE_GLOBALVAR Record</a>
-</div>
+<h4><a name="MODULE_CODE_GLOBALVAR">MODULE_CODE_GLOBALVAR Record</a></h4>
<div class="doc_text">
<p><tt>[GLOBALVAR, pointer type, isconst, initid, linkage, alignment, section, visibility, threadlocal]</tt></p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_FUNCTION">MODULE_CODE_FUNCTION Record</a>
-</div>
+<h4><a name="MODULE_CODE_FUNCTION">MODULE_CODE_FUNCTION Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_ALIAS">MODULE_CODE_ALIAS Record</a>
-</div>
+<h4><a name="MODULE_CODE_ALIAS">MODULE_CODE_ALIAS Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_PURGEVALS">MODULE_CODE_PURGEVALS Record</a>
-</div>
+<h4><a name="MODULE_CODE_PURGEVALS">MODULE_CODE_PURGEVALS Record</a></h4>
<div class="doc_text">
<p><tt>[PURGEVALS, numvals]</tt></p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="MODULE_CODE_GCNAME">MODULE_CODE_GCNAME Record</a>
-</div>
+<h4><a name="MODULE_CODE_GCNAME">MODULE_CODE_GCNAME Record</a></h4>
<div class="doc_text">
<p><tt>[GCNAME, ...string...]</tt></p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="PARAMATTR_BLOCK">PARAMATTR_BLOCK Contents</a>
-</div>
+<h3>
+ <a name="PARAMATTR_BLOCK">PARAMATTR_BLOCK Contents</a>
+</h3>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="PARAMATTR_CODE_ENTRY">PARAMATTR_CODE_ENTRY Record</a>
-</div>
+<h4><a name="PARAMATTR_CODE_ENTRY">PARAMATTR_CODE_ENTRY Record</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="TYPE_BLOCK">TYPE_BLOCK Contents</a>
-</div>
+<h3>
+ <a name="TYPE_BLOCK">TYPE_BLOCK Contents</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_NUMENTRY">TYPE_CODE_NUMENTRY Record</a>
-</div>
+<h4><a name="TYPE_CODE_NUMENTRY">TYPE_CODE_NUMENTRY Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_VOID">TYPE_CODE_VOID Record</a>
-</div>
+<h4><a name="TYPE_CODE_VOID">TYPE_CODE_VOID Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_FLOAT">TYPE_CODE_FLOAT Record</a>
-</div>
+<h4><a name="TYPE_CODE_FLOAT">TYPE_CODE_FLOAT Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_DOUBLE">TYPE_CODE_DOUBLE Record</a>
-</div>
+<h4><a name="TYPE_CODE_DOUBLE">TYPE_CODE_DOUBLE Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_LABEL">TYPE_CODE_LABEL Record</a>
-</div>
+<h4><a name="TYPE_CODE_LABEL">TYPE_CODE_LABEL Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_OPAQUE">TYPE_CODE_OPAQUE Record</a>
-</div>
+<h4><a name="TYPE_CODE_OPAQUE">TYPE_CODE_OPAQUE Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_INTEGER">TYPE_CODE_INTEGER Record</a>
-</div>
+<h4><a name="TYPE_CODE_INTEGER">TYPE_CODE_INTEGER Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_POINTER">TYPE_CODE_POINTER Record</a>
-</div>
+<h4><a name="TYPE_CODE_POINTER">TYPE_CODE_POINTER Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_FUNCTION">TYPE_CODE_FUNCTION Record</a>
-</div>
+<h4><a name="TYPE_CODE_FUNCTION">TYPE_CODE_FUNCTION Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_STRUCT">TYPE_CODE_STRUCT Record</a>
-</div>
+<h4><a name="TYPE_CODE_STRUCT">TYPE_CODE_STRUCT Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_ARRAY">TYPE_CODE_ARRAY Record</a>
-</div>
+<h4><a name="TYPE_CODE_ARRAY">TYPE_CODE_ARRAY Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_VECTOR">TYPE_CODE_VECTOR Record</a>
-</div>
+<h4><a name="TYPE_CODE_VECTOR">TYPE_CODE_VECTOR Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_X86_FP80">TYPE_CODE_X86_FP80 Record</a>
-</div>
+<h4><a name="TYPE_CODE_X86_FP80">TYPE_CODE_X86_FP80 Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_FP128">TYPE_CODE_FP128 Record</a>
-</div>
+<h4><a name="TYPE_CODE_FP128">TYPE_CODE_FP128 Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_PPC_FP128">TYPE_CODE_PPC_FP128 Record</a>
-</div>
+<h4><a name="TYPE_CODE_PPC_FP128">TYPE_CODE_PPC_FP128 Record</a></h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TYPE_CODE_METADATA">TYPE_CODE_METADATA Record</a>
-</div>
+<h4><a name="TYPE_CODE_METADATA">TYPE_CODE_METADATA Record</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="CONSTANTS_BLOCK">CONSTANTS_BLOCK Contents</a>
-</div>
+<h3>
+ <a name="CONSTANTS_BLOCK">CONSTANTS_BLOCK Contents</a>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="FUNCTION_BLOCK">FUNCTION_BLOCK Contents</a>
-</div>
+<h3>
+ <a name="FUNCTION_BLOCK">FUNCTION_BLOCK Contents</a>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="TYPE_SYMTAB_BLOCK">TYPE_SYMTAB_BLOCK Contents</a>
-</div>
+<h3>
+ <a name="TYPE_SYMTAB_BLOCK">TYPE_SYMTAB_BLOCK Contents</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="TST_CODE_ENTRY">TST_CODE_ENTRY Record</a>
-</div>
+<h4><a name="TST_CODE_ENTRY">TST_CODE_ENTRY Record</a></h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="VALUE_SYMTAB_BLOCK">VALUE_SYMTAB_BLOCK Contents</a>
-</div>
+<h3>
+ <a name="VALUE_SYMTAB_BLOCK">VALUE_SYMTAB_BLOCK Contents</a>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="METADATA_BLOCK">METADATA_BLOCK Contents</a>
-</div>
+<h3>
+ <a name="METADATA_BLOCK">METADATA_BLOCK Contents</a>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="METADATA_ATTACHMENT">METADATA_ATTACHMENT Contents</a>
-</div>
+<h3>
+ <a name="METADATA_ATTACHMENT">METADATA_ATTACHMENT Contents</a>
+</h3>
<div class="doc_text">
<link rel="stylesheet" href="llvm.css" type="text/css">
</head>
-<div class="doc_title">
+<h1>
LLVM bugpoint tool: design and usage
-</div>
+</h1>
<ul>
<li><a href="#desc">Description</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="desc">Description</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="design">Design Philosophy</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="autoselect">Automatic Debugger Selection</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="crashdebug">Crash debugger</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="codegendebug">Code generator debugger</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="miscompilationdebug">Miscompilation debugger</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="advice">Advice for using bugpoint</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<link rel="stylesheet" href="llvm.css" type="text/css">
</head>
-<div class="doc_title">
+<h1>
Building LLVM with CMake
-</div>
+</h1>
<ul>
<li><a href="#intro">Introduction</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="intro">Introduction</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="quickstart">Quick start</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="usage">Basic CMake usage</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="options">Options and variables</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="freccmake">Frequently-used CMake variables</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="llvmvars">LLVM-specific variables</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="testing">Executing the test suite</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="cross">Cross compiling</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="embedding">Embedding LLVM in your project</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="passdev">Developing LLVM pass out of source</a>
-</div>
+</h3>
<div class="doc_text">
<!-- *********************************************************************** -->
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="specifics">Compiler/Platform specific topics</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
-<div class="doc_subsection">
+<h3>
<a name="msvc">Microsoft Visual C++</a>
-</div>
+</h3>
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
The LLVM Target-Independent Code Generator
-</div>
+</h1>
<ol>
<li><a href="#introduction">Introduction</a>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="introduction">Introduction</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="required">Required components in the code generator</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="high-level-design">The high-level design of the code generator</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="tablegen">Using TableGen for target description</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="targetdesc">Target description classes</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="targetmachine">The <tt>TargetMachine</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="targetdata">The <tt>TargetData</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="targetlowering">The <tt>TargetLowering</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="targetregisterinfo">The <tt>TargetRegisterInfo</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="targetinstrinfo">The <tt>TargetInstrInfo</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="targetframeinfo">The <tt>TargetFrameInfo</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="targetsubtarget">The <tt>TargetSubtarget</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="targetjitinfo">The <tt>TargetJITInfo</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="codegendesc">Machine code description classes</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="machineinstr">The <tt>MachineInstr</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="buildmi">Using the <tt>MachineInstrBuilder.h</tt> functions</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="fixedregs">Fixed (preassigned) registers</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ssa">Machine code in SSA form</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="machinebasicblock">The <tt>MachineBasicBlock</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="machinefunction">The <tt>MachineFunction</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="mc">The "MC" Layer</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="mcstreamer">The <tt>MCStreamer</tt> API</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="mccontext">The <tt>MCContext</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="mcsymbol">The <tt>MCSymbol</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="mcsection">The <tt>MCSection</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="mcinst">The <tt>MCInst</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="codegenalgs">Target-independent code generation algorithms</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="instselect">Instruction Selection</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="selectiondag_intro">Introduction to SelectionDAGs</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="selectiondag_process">SelectionDAG Instruction Selection Process</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="selectiondag_build">Initial SelectionDAG Construction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="selectiondag_legalize_types">SelectionDAG LegalizeTypes Phase</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="selectiondag_legalize">SelectionDAG Legalize Phase</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="selectiondag_optimize">SelectionDAG Optimization Phase: the DAG
- Combiner</a>
-</div>
+<h4>
+ <a name="selectiondag_optimize">
+ SelectionDAG Optimization Phase: the DAG Combiner
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="selectiondag_select">SelectionDAG Select Phase</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="selectiondag_sched">SelectionDAG Scheduling and Formation Phase</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="selectiondag_future">Future directions for the SelectionDAG</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ssamco">SSA-based Machine Code Optimizations</a>
-</div>
+</h3>
<div class="doc_text"><p>To Be Written</p></div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="liveintervals">Live Intervals</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="livevariable_analysis">Live Variable Analysis</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="liveintervals_analysis">Live Intervals Analysis</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="regalloc">Register Allocation</a>
-</div>
+</h3>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="regAlloc_represent">How registers are represented in LLVM</a>
-</div>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="regAlloc_howTo">Mapping virtual registers to physical registers</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="regAlloc_twoAddr">Handling two address instructions</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="regAlloc_ssaDecon">The SSA deconstruction phase</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="regAlloc_fold">Instruction folding</a>
-</div>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="regAlloc_builtIn">Built in register allocators</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="proepicode">Prolog/Epilog Code Insertion</a>
-</div>
+</h3>
<div class="doc_text"><p>To Be Written</p></div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="latemco">Late Machine Code Optimizations</a>
-</div>
+</h3>
<div class="doc_text"><p>To Be Written</p></div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="codeemit">Code Emission</a>
-</div>
+</h3>
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="nativeassembler">Implementing a Native Assembler</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection" id="na_instparsing">Instruction Parsing</div>
+<h3 id="na_instparsing">Instruction Parsing</h3>
<div class="doc_text"><p>To Be Written</p></div>
<!-- ======================================================================= -->
-<div class="doc_subsection" id="na_instaliases">
+<h3 id="na_instaliases">
Instruction Alias Processing
-</div>
+</h3>
<div class="doc_text">
<p>Once the instruction is parsed, it enters the MatchInstructionImpl function.
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">Mnemonic Aliases</div>
+<h4>Mnemonic Aliases</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">Instruction Aliases</div>
+<h4>Instruction Aliases</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection" id="na_matching">Instruction Matching</div>
+<h3 id="na_matching">Instruction Matching</h3>
<div class="doc_text"><p>To Be Written</p></div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="targetimpls">Target-specific Implementation Notes</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="targetfeatures">Target Feature Matrix</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection" id="feat_reliable">Is Generally Reliable</div>
+<h4 id="feat_reliable">Is Generally Reliable</h4>
<div class="doc_text">
<p>This box indicates whether the target is considered to be production quality.
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection" id="feat_asmparser">Assembly Parser</div>
+<h4 id="feat_asmparser">Assembly Parser</h4>
<div class="doc_text">
<p>This box indicates whether the target supports parsing target specific .s
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection" id="feat_disassembler">Disassembler</div>
+<h4 id="feat_disassembler">Disassembler</h4>
<div class="doc_text">
<p>This box indicates whether the target supports the MCDisassembler API for
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection" id="feat_inlineasm">Inline Asm</div>
+<h4 id="feat_inlineasm">Inline Asm</h4>
<div class="doc_text">
<p>This box indicates whether the target supports most popular inline assembly
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection" id="feat_jit">JIT Support</div>
+<h4 id="feat_jit">JIT Support</h4>
<div class="doc_text">
<p>This box indicates whether the target supports the JIT compiler through
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection" id="feat_objectwrite">.o File Writing</div>
+<h4 id="feat_objectwrite">.o File Writing</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection" id="feat_tailcall">Tail Calls</div>
+<h4 id="feat_tailcall">Tail Calls</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="tailcallopt">Tail call optimization</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="sibcallopt">Sibling call optimization</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="x86">The X86 backend</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="x86_tt">X86 Target Triples supported</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="x86_cc">X86 Calling Conventions supported</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="x86_memory">Representing X86 addressing modes in MachineInstrs</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="x86_memory">X86 address spaces supported</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="x86_names">Instruction naming</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ppc">The PowerPC backend</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ppc_abi">LLVM PowerPC ABI</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ppc_frame">Frame Layout</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ppc_prolog">Prolog/Epilog</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ppc_dynamic">Dynamic Allocation</a>
-</div>
+</h4>
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
LLVM Coding Standards
-</div>
+</h1>
<ol>
<li><a href="#introduction">Introduction</a></li>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="introduction">Introduction</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="mechanicalissues">Mechanical Source Issues</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="sourceformating">Source Code Formatting</a>
-</div>
+</h3>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="scf_commenting">Commenting</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="scf_commentformat">Comment Formatting</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="scf_includes"><tt>#include</tt> Style</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="scf_codewidth">Source Code Width</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="scf_spacestabs">Use Spaces Instead of Tabs</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="scf_indentation">Indent Code Consistently</a>
-</div>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="compilerissues">Compiler Issues</a>
-</div>
+</h3>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ci_warningerrors">Treat Compiler Warnings Like Errors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ci_portable_code">Write Portable Code</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ci_rtti_exceptions">Do not use RTTI or Exceptions</a>
-</div>
+</h4>
<div class="doc_text">
<p>In an effort to reduce code and executable size, LLVM does not use RTTI
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ci_class_struct">Use of <tt>class</tt> and <tt>struct</tt> Keywords</a>
-</div>
+</h4>
<div class="doc_text">
<p>In C++, the <tt>class</tt> and <tt>struct</tt> keywords can be used almost
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="styleissues">Style Issues</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="macro">The High-Level Issues</a>
-</div>
+</h3>
<!-- ======================================================================= -->
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="hl_module">A Public Header File <b>is</b> a Module</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="hl_dontinclude"><tt>#include</tt> as Little as Possible</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="hl_privateheaders">Keep "Internal" Headers Private</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="hl_earlyexit">Use Early Exits and <tt>continue</tt> to Simplify Code</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="hl_else_after_return">Don't use <tt>else</tt> after a <tt>return</tt></a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="hl_predicateloops">Turn Predicate Loops into Predicate Functions</a>
-</div>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="micro">The Low-Level Issues</a>
-</div>
+</h3>
<!-- ======================================================================= -->
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="ll_naming">Name Types, Functions, Variables, and Enumerators Properly</a>
-</div>
+<h4>
+ <a name="ll_naming">
+ Name Types, Functions, Variables, and Enumerators Properly
+ </a>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ll_assert">Assert Liberally</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ll_ns_std">Do Not Use '<tt>using namespace std</tt>'</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="ll_virtual_anch">Provide a Virtual Method Anchor for Classes
- in Headers</a>
-</div>
+<h4>
+ <a name="ll_virtual_anch">
+ Provide a Virtual Method Anchor for Classes in Headers
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ll_end">Don't evaluate <tt>end()</tt> every time through a loop</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ll_iostream"><tt>#include <iostream></tt> is Forbidden</a>
-</div>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ll_raw_ostream">Use <tt>raw_ostream</tt></a>
-</div>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ll_avoidendl">Avoid <tt>std::endl</tt></a>
-</div>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="nano">Microscopic Details</a>
-</div>
+</h3>
<!-- ======================================================================= -->
<p>This section describes preferred low-level formatting guidelines along with
reasoning on why we prefer them.</p>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="micro_spaceparen">Spaces Before Parentheses</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="micro_preincrement">Prefer Preincrement</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="micro_namespaceindent">Namespace Indentation</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="micro_anonns">Anonymous Namespaces</a>
-</div>
+</h4>
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="seealso">See Also</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
LLVM Command Guide
-</div>
+</h1>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="basic">Basic Commands</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="frontend">C and C++ Front-end Commands</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="debug">Debugging Tools</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="internal">Internal Tools</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
CommandLine 2.0 Library Manual
-</div>
+</h1>
<ol>
<li><a href="#introduction">Introduction</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="introduction">Introduction</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="quickstart">Quick Start Guide</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="bool">Boolean Arguments</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="alias">Argument Aliases</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="onealternative">Selecting an alternative from a set of
possibilities</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="namedalternatives">Named Alternatives</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="list">Parsing a list of options</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="bits">Collecting options as a set of flags</a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="description">Adding freeform text to help output</a>
-</div>
+</h3>
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="referenceguide">Reference Guide</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="positional">Positional Arguments</a>
-</div>
+</h3>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="--">Specifying positional options with hyphens</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="getPosition">Determining absolute position with getPosition()</a>
-</div>
+</h4>
<div class="doc_text">
<p>Sometimes an option can affect or modify the meaning of another option. For
example, consider <tt>gcc</tt>'s <tt>-x LANG</tt> option. This tells
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="cl::ConsumeAfter">The <tt>cl::ConsumeAfter</tt> modifier</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="storage">Internal vs External Storage</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="attributes">Option Attributes</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="modifiers">Option Modifiers</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="hiding">Hiding an option from <tt>-help</tt> output</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="numoccurrences">Controlling the number of occurrences required and
allowed</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="valrequired">Controlling whether or not a value must be specified</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="formatting">Controlling other formatting options</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="misc">Miscellaneous option modifiers</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="response">Response files</a>
-</div>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="toplevel">Top-Level Classes and Functions</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="cl::ParseCommandLineOptions">The <tt>cl::ParseCommandLineOptions</tt>
function</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="cl::ParseEnvironmentOptions">The <tt>cl::ParseEnvironmentOptions</tt>
function</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="cl::SetVersionPrinter">The <tt>cl::SetVersionPrinter</tt>
function</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="cl::opt">The <tt>cl::opt</tt> class</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="cl::list">The <tt>cl::list</tt> class</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="cl::bits">The <tt>cl::bits</tt> class</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="cl::alias">The <tt>cl::alias</tt> class</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="cl::extrahelp">The <tt>cl::extrahelp</tt> class</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="builtinparsers">Builtin parsers</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="extensionguide">Extension Guide</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="customparser">Writing a custom parser</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="explotingexternal">Exploiting external storage</a>
-</div>
+</h3>
<div class="doc_text">
<p>Several of the LLVM libraries define static <tt>cl::opt</tt> instances that
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="dynamicopts">Dynamically adding command line options</a>
-</div>
+</h3>
<div class="doc_text">
<body>
-<div class="doc_title">
+<h1>
Architecture/platform information for compiler writers
-</div>
+</h1>
<div class="doc_warning">
<p>Note: This document is a work-in-progress. Additions and clarifications
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="hw">Hardware</a></div>
+<h2><a name="hw">Hardware</a></h2>
<!-- *********************************************************************** -->
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="alpha">Alpha</a></div>
+<h3><a name="alpha">Alpha</a></h3>
<div class="doc_text">
<ul>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="arm">ARM</a></div>
+<h3><a name="arm">ARM</a></h3>
<div class="doc_text">
<ul>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="ia64">Itanium (ia64)</a></div>
+<h3><a name="ia64">Itanium (ia64)</a></h3>
<div class="doc_text">
<ul>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="mips">MIPS</a></div>
+<h3><a name="mips">MIPS</a></h3>
<div class="doc_text">
<ul>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="ppc">PowerPC</a></div>
+<h3><a name="ppc">PowerPC</a></h3>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">IBM - Official manuals and docs</div>
+<h4>IBM - Official manuals and docs</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">Other documents, collections, notes</div>
+<h4>Other documents, collections, notes</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="sparc">SPARC</a></div>
+<h3><a name="sparc">SPARC</a></h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="x86">X86</a></div>
+<h3><a name="x86">X86</a></h3>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">AMD - Official manuals and docs</div>
+<h4>AMD - Official manuals and docs</h4>
<div class="doc_text">
<ul>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">Intel - Official manuals and docs</div>
+<h4>Intel - Official manuals and docs</h4>
<div class="doc_text">
<ul>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">Other x86-specific information</div>
+<h4>Other x86-specific information</h4>
<div class="doc_text">
<ul>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="other">Other relevant lists</a></div>
+<h3><a name="other">Other relevant lists</a></h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="abi">ABI</a></div>
+<h2><a name="abi">ABI</a></h2>
<!-- *********************************************************************** -->
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="linux">Linux</a></div>
+<h3><a name="linux">Linux</a></h3>
<div class="doc_text">
<ol>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="osx">OS X</a></div>
+<h3><a name="osx">OS X</a></h3>
<div class="doc_text">
<ol>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="misc">Miscellaneous resources</a></div>
+<h2><a name="misc">Miscellaneous resources</a></h2>
<!-- *********************************************************************** -->
<ul>
</head>
<body>
-<div class="doc_title">Debugging JITed Code With GDB</div>
+<h1>Debugging JITed Code With GDB</h1>
<ol>
<li><a href="#example">Example usage</a></li>
<li><a href="#background">Background</a></li>
<div class="doc_author">Written by Reid Kleckner</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="example">Example usage</a></div>
+<h2><a name="example">Example usage</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="background">Background</a></div>
+<h2><a name="background">Background</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</head>
<body>
-<div class="doc_title">LLVM Developer Policy</div>
+<h1>LLVM Developer Policy</h1>
<ol>
<li><a href="#introduction">Introduction</a></li>
<li><a href="#policies">Developer Policies</a>
<div class="doc_author">Written by the LLVM Oversight Team</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="introduction">Introduction</a></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
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="policies">Developer Policies</a></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
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"> <a name="informed">Stay Informed</a> </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
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"> <a name="patches">Making a Patch</a></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
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"> <a name="reviews">Code Reviews</a></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>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"> <a name="owners">Code Owners</a></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
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"> <a name="testcases">Test Cases</a></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>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"> <a name="quality">Quality</a></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>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection">
- <a name="commitaccess">Obtaining Commit Access</a></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
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"> <a name="newwork">Making a Major Change</a></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
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"> <a name="incremental">Incremental Development</a>
-</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
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="attribution">Attribution of
-Changes</a></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
</div>
<!--=========================================================================-->
-<div class="doc_section">
+<h2>
<a name="clp">Copyright, License, and Patents</a>
-</div>
+</h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="copyright">Copyright</a></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
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="license">License</a></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
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="patents">Patents</a></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).
<body>
-<div class="doc_title">Exception Handling in LLVM</div>
+<h1>Exception Handling in LLVM</h1>
<table class="layout" style="width:100%">
<tr class="layout">
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="introduction">Introduction</a></div>
+<h2><a name="introduction">Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="itanium">Itanium ABI Zero-cost Exception Handling</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="sjlj">Setjmp/Longjmp Exception Handling</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="overview">Overview</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_section">
+<h2>
<a name="codegen">LLVM Code Generation</a>
-</div>
+</h2>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="throw">Throw</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="try_catch">Try/Catch</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="cleanups">Cleanups</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="throw_filters">Throw Filters</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="restrictions">Restrictions</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_section">
+<h2>
<a name="format_common_intrinsics">Exception Handling Intrinsics</a>
-</div>
+</h2>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="llvm_eh_exception">llvm.eh.exception</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="llvm_eh_selector">llvm.eh.selector</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="llvm_eh_typeid_for">llvm.eh.typeid.for</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="llvm_eh_sjlj_setjmp">llvm.eh.sjlj.setjmp</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="llvm_eh_sjlj_longjmp">llvm.eh.sjlj.longjmp</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="llvm_eh_sjlj_lsda">llvm.eh.sjlj.lsda</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="llvm_eh_sjlj_callsite">llvm.eh.sjlj.callsite</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="llvm_eh_sjlj_dispatchsetup">llvm.eh.sjlj.dispatchsetup</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_section">
+<h2>
<a name="asm">Asm Table Formats</a>
-</div>
+</h2>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="unwind_tables">Exception Handling Frame</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="exception_tables">Exception Tables</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_section">
+<h2>
<a name="todo">ToDo</a>
-</div>
+</h2>
<div class="doc_text">
<body>
-<div class="doc_title">
+<h1>
Extending LLVM: Adding instructions, intrinsics, types, etc.
-</div>
+</h1>
<ol>
<li><a href="#introduction">Introduction and Warning</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="introduction">Introduction and Warning</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="intrinsic">Adding a new intrinsic function</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="sdnode">Adding a new SelectionDAG node</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="instruction">Adding a new instruction</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="type">Adding a new type</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="fund_type">Adding a fundamental type</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="derived_type">Adding a derived type</a>
-</div>
+</h3>
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
LLVM: Frequently Asked Questions
-</div>
+</h1>
<ol>
<li><a href="#license">License</a>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="license">License</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="question">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="source">Source Code</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="question">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="build">Build Problems</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="question">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="felangs">Source Languages</a></div>
+<h2>
+ <a name="felangs">Source Languages</a>
+</h2>
<div class="question">
<p><a name="langs">What source languages are supported?</a></p>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="cfe">Using the GCC Front End</a>
-</div>
+</h2>
<div class="question">
<p>When I compile software that uses a configure script, the configure script
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="cfe_code">Questions about code generated by the GCC front-end</a>
-</div>
+</h2>
<div class="question">
<p><a name="iosinit">What is this <tt>llvm.global_ctors</tt> and
</head>
<body>
-<div class="doc_title">
+<h1>
Building the LLVM GCC Front-End
-</div>
+</h1>
<ol>
<li><a href="#instructions">Building llvm-gcc from Source</a></li>
</head>
<body>
-<div class="doc_title">
+<h1>
Accurate Garbage Collection with LLVM
-</div>
+</h1>
<ol>
<li><a href="#introduction">Introduction</a>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="introduction">Introduction</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="feature">Goals and non-goals</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="quickstart">Getting started</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="quickstart-compiler">In your compiler</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="quickstart-runtime">In your runtime</a>
-</div>
+</h3>
<div class="doc_text">
}</pre></div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="shadow-stack">About the shadow stack</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="core">IR features</a><a name="intrinsics"></a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="gcattr">Specifying GC code generation: <tt>gc "..."</tt></a>
-</div>
+</h3>
<div class="doc_code"><tt>
define <i>ty</i> @<i>name</i>(...) <span style="text-decoration: underline">gc "<i>name</i>"</span> { ...
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="gcroot">Identifying GC roots on the stack: <tt>llvm.gcroot</tt></a>
-</div>
+</h3>
<div class="doc_code"><tt>
void @llvm.gcroot(i8** %ptrloc, i8* %metadata)
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="barriers">Reading and writing references in the heap</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="gcwrite">Write barrier: <tt>llvm.gcwrite</tt></a>
-</div>
+</h4>
<div class="doc_code"><tt>
void @llvm.gcwrite(i8* %value, i8* %object, i8** %derived)
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="gcread">Read barrier: <tt>llvm.gcread</tt></a>
-</div>
+</h4>
<div class="doc_code"><tt>
i8* @llvm.gcread(i8* %object, i8** %derived)<br>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="plugin">Implementing a collector plugin</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="collector-algos">Overview of available features</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="stack-map">Computing stack maps</a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="init-roots">Initializing roots to null: <tt>InitRoots</tt></a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="custom">Custom lowering of intrinsics: <tt>CustomRoots</tt>,
<tt>CustomReadBarriers</tt>, and <tt>CustomWriteBarriers</tt></a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="safe-points">Generating safe points: <tt>NeededSafePoints</tt></a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="assembly">Emitting assembly code: <tt>GCMetadataPrinter</tt></a>
-</div>
+</h3>
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="references">References</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
The Often Misunderstood GEP Instruction
-</div>
+</h1>
<ol>
<li><a href="#intro">Introduction</a></li>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro"><b>Introduction</b></a></div>
+<h2><a name="intro">Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="addresses"><b>Address Computation</b></a></div>
+<h2><a name="addresses">Address Computation</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<p>When people are first confronted with the GEP instruction, they tend to
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="firstptr"><b>What is the first index of the GEP instruction?</b></a>
-</div>
+<h3>
+ <a name="firstptr">What is the first index of the GEP instruction?</a>
+</h3>
<div class="doc_text">
<p>Quick answer: The index stepping through the first operand.</p>
<p>The confusion with the first index usually arises from thinking about
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="extra_index"><b>Why is the extra 0 index required?</b></a>
-</div>
+<h3>
+ <a name="extra_index">Why is the extra 0 index required?</a>
+</h3>
<!-- *********************************************************************** -->
<div class="doc_text">
<p>Quick answer: there are no superfluous indices.</p>
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="deref"><b>What is dereferenced by GEP?</b></a>
-</div>
+<h3>
+ <a name="deref">What is dereferenced by GEP?</a>
+</h3>
<div class="doc_text">
<p>Quick answer: nothing.</p>
<p>The GetElementPtr instruction dereferences nothing. That is, it doesn't
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="lead0"><b>Why don't GEP x,0,0,1 and GEP x,1 alias?</b></a>
-</div>
+<h3>
+ <a name="lead0">Why don't GEP x,0,0,1 and GEP x,1 alias?</a>
+</h3>
<div class="doc_text">
<p>Quick Answer: They compute different address locations.</p>
<p>If you look at the first indices in these GEP
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="trail0"><b>Why do GEP x,1,0,0 and GEP x,1 alias?</b></a>
-</div>
+<h3>
+ <a name="trail0">Why do GEP x,1,0,0 and GEP x,1 alias?</a>
+</h3>
<div class="doc_text">
<p>Quick Answer: They compute the same address location.</p>
<p>These two GEP instructions will compute the same address because indexing
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="vectors"><b>Can GEP index into vector elements?</b></a>
-</div>
+<h3>
+ <a name="vectors">Can GEP index into vector elements?</a>
+</h3>
<div class="doc_text">
<p>This hasn't always been forcefully disallowed, though it's not recommended.
It leads to awkward special cases in the optimizers, and fundamental
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="addrspace"><b>What effect do address spaces have on GEPs?</b></a>
-</div>
+<h3>
+ <a name="addrspace">What effect do address spaces have on GEPs?</a>
+</h3>
<div class="doc_text">
<p>None, except that the address space qualifier on the first operand pointer
type always matches the address space qualifier on the result type.</p>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="int"><b>How is GEP different from ptrtoint, arithmetic,
- and inttoptr?</b></a>
-</div>
+<h3>
+ <a name="int">
+ How is GEP different from ptrtoint, arithmetic, and inttoptr?
+ </a>
+</h3>
<div class="doc_text">
<p>It's very similar; there are only subtle differences.</p>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="be"><b>I'm writing a backend for a target which needs custom
- lowering for GEP. How do I do this?</b></a>
-</div>
+<h3>
+ <a name="be">
+ I'm writing a backend for a target which needs custom lowering for GEP.
+ How do I do this?
+ </a>
+</h3>
<div class="doc_text">
<p>You don't. The integer computation implied by a GEP is target-independent.
Typically what you'll need to do is make your backend pattern-match
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="vla"><b>How does VLA addressing work with GEPs?</b></a>
-</div>
+<h3>
+ <a name="vla">How does VLA addressing work with GEPs?</a>
+</h3>
<div class="doc_text">
<p>GEPs don't natively support VLAs. LLVM's type system is entirely static,
and GEP address computations are guided by an LLVM type.</p>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="rules"><b>Rules</b></a></div>
+<h2><a name="rules">Rules</a></h2>
<!-- *********************************************************************** -->
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="bounds"><b>What happens if an array index is out of bounds?</b></a>
-</div>
+<h3>
+ <a name="bounds">What happens if an array index is out of bounds?</a>
+</h3>
<div class="doc_text">
<p>There are two senses in which an array index can be out of bounds.</p>
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="negative"><b>Can array indices be negative?</b></a>
-</div>
+<h3>
+ <a name="negative">Can array indices be negative?</a>
+</h3>
<div class="doc_text">
<p>Yes. This is basically a special case of array indices being out
of bounds.</p>
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="compare"><b>Can I compare two values computed with GEPs?</b></a>
-</div>
+<h3>
+ <a name="compare">Can I compare two values computed with GEPs?</a>
+</h3>
<div class="doc_text">
<p>Yes. If both addresses are within the same allocated object, or
one-past-the-end, you'll get the comparison result you expect. If either
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="types"><b>Can I do GEP with a different pointer type than the type of
- the underlying object?</b></a>
-</div>
+<h3>
+ <a name="types">
+ Can I do GEP with a different pointer type than the type of
+ the underlying object?
+ </a>
+</h3>
<div class="doc_text">
<p>Yes. There are no restrictions on bitcasting a pointer value to an arbitrary
pointer type. The types in a GEP serve only to define the parameters for the
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="null"><b>Can I cast an object's address to integer and add it
- to null?</b></a>
-</div>
+<h3>
+ <a name="null">
+ Can I cast an object's address to integer and add it to null?
+ </a>
+</h3>
<div class="doc_text">
<p>You can compute an address that way, but if you use GEP to do the add,
you can't use that pointer to actually access the object, unless the
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="ptrdiff"><b>Can I compute the distance between two objects, and add
- that value to one address to compute the other address?</b></a>
-</div>
+<h3>
+ <a name="ptrdiff">
+ Can I compute the distance between two objects, and add
+ that value to one address to compute the other address?
+ </a>
+</h3>
<div class="doc_text">
<p>As with arithmetic on null, You can use GEP to compute an address that
way, but you can't use that pointer to actually access the object if you
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="tbaa"><b>Can I do type-based alias analysis on LLVM IR?</b></a>
-</div>
+<h3>
+ <a name="tbaa">Can I do type-based alias analysis on LLVM IR?</a>
+</h3>
<div class="doc_text">
<p>You can't do type-based alias analysis using LLVM's built-in type system,
because LLVM has no restrictions on mixing types in addressing, loads or
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="overflow"><b>What happens if a GEP computation overflows?</b></a>
-</div>
+<h3>
+ <a name="overflow">What happens if a GEP computation overflows?</a>
+</h3>
<div class="doc_text">
<p>If the GEP lacks the <tt>inbounds</tt> keyword, the value is the result
from evaluating the implied two's complement integer computation. However,
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="check"><b>How can I tell if my front-end is following the
- rules?</b></a>
-</div>
+<h3>
+ <a name="check">
+ How can I tell if my front-end is following the rules?
+ </a>
+</h3>
<div class="doc_text">
<p>There is currently no checker for the getelementptr rules. Currently,
the only way to do this is to manually check each place in your front-end
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="rationale"><b>Rationale</b></a></div>
+<h2><a name="rationale">Rationale</a></h2>
<!-- *********************************************************************** -->
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="goals"><b>Why is GEP designed this way?</b></a>
-</div>
+<h3>
+ <a name="goals">Why is GEP designed this way?</a>
+</h3>
<div class="doc_text">
<p>The design of GEP has the following goals, in rough unofficial
order of priority:</p>
</div>
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="i32"><b>Why do struct member indices always use i32?</b></a>
-</div>
+<h3>
+ <a name="i32">Why do struct member indices always use i32?</a>
+</h3>
<div class="doc_text">
<p>The specific type i32 is probably just a historical artifact, however it's
wide enough for all practical purposes, so there's been no need to change it.
<!-- *********************************************************************** -->
-<div class="doc_subsection">
- <a name="uglygep"><b>What's an uglygep?</b></a>
-</div>
+<h3>
+ <a name="uglygep">What's an uglygep?</a>
+</h3>
<div class="doc_text">
<p>Some LLVM optimizers operate on GEPs by internally lowering them into
more primitive integer expressions, which allows them to be combined
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="summary"><b>Summary</b></a></div>
+<h2><a name="summary">Summary</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
Getting Started with the LLVM System
-</div>
+</h1>
<ul>
<li><a href="#overview">Overview</a>
<!-- *********************************************************************** -->
-<div class="doc_section">
- <a name="overview"><b>Overview</b></a>
-</div>
+<h2>
+ <a name="overview">Overview</a>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
- <a name="quickstart"><b>Getting Started Quickly (A Summary)</b></a>
-</div>
+<h2>
+ <a name="quickstart">Getting Started Quickly (A Summary)</a>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
- <a name="requirements"><b>Requirements</b></a>
-</div>
+<h2>
+ <a name="requirements">Requirements</a>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
- <a name="hardware"><b>Hardware</b></a>
-</div>
+<h3>
+ <a name="hardware">Hardware</a>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="software"><b>Software</b></a></div>
+<h3>
+ <a name="software">Software</a>
+</h3>
<div class="doc_text">
<p>Compiling LLVM requires that you have several software packages
installed. The table below lists those required packages. The Package column
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="brokengcc">Broken versions of GCC and other tools</a>
-</div>
+</h3>
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
- <a name="starting"><b>Getting Started with LLVM</b></a>
-</div>
+<h2>
+ <a name="starting">Getting Started with LLVM</a>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="terminology">Terminology and Notation</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="environment">Setting Up Your Environment</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="unpack">Unpacking the LLVM Archives</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="checkout">Checkout LLVM from Subversion</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="git_mirror">GIT mirror</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="installcf">Install the GCC Front End</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="config">Local LLVM Configuration</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="compile">Compiling the LLVM Suite Source Code</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="cross-compile">Cross-Compiling LLVM</a>
-</div>
+</h3>
<div class="doc_text">
<p>It is possible to cross-compile LLVM itself. That is, you can create LLVM
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="objfiles">The Location of LLVM Object Files</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="optionalconfig">Optional Configuration Items</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
- <a name="layout"><b>Program Layout</b></a>
-</div>
+<h2>
+ <a name="layout">Program Layout</a>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="examples"><tt>llvm/examples</tt></a></div>
+<h3>
+ <a name="examples"><tt>llvm/examples</tt></a>
+</h3>
+
<div class="doc_text">
<p>This directory contains some simple examples of how to use the LLVM IR and
JIT.</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="include"><tt>llvm/include</tt></a></div>
+<h3>
+ <a name="include"><tt>llvm/include</tt></a>
+</h3>
+
<div class="doc_text">
<p>This directory contains public header files exported from the LLVM
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="lib"><tt>llvm/lib</tt></a></div>
+<h3>
+ <a name="lib"><tt>llvm/lib</tt></a>
+</h3>
+
<div class="doc_text">
<p>This directory contains most of the source files of the LLVM system. In LLVM,
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="projects"><tt>llvm/projects</tt></a></div>
+<h3>
+ <a name="projects"><tt>llvm/projects</tt></a>
+</h3>
+
<div class="doc_text">
<p>This directory contains projects that are not strictly part of LLVM but are
shipped with LLVM. This is also the directory where you should create your own
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="runtime"><tt>llvm/runtime</tt></a></div>
+<h3>
+ <a name="runtime"><tt>llvm/runtime</tt></a>
+</h3>
+
<div class="doc_text">
<p>This directory contains libraries which are compiled into LLVM bitcode and
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="test"><tt>llvm/test</tt></a></div>
+<h3>
+ <a name="test"><tt>llvm/test</tt></a>
+</h3>
+
<div class="doc_text">
<p>This directory contains feature and regression tests and other basic sanity
checks on the LLVM infrastructure. These are intended to run quickly and cover
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="test-suite"><tt>test-suite</tt></a></div>
+<h3>
+ <a name="test-suite"><tt>test-suite</tt></a>
+</h3>
+
<div class="doc_text">
<p>This is not a directory in the normal llvm module; it is a separate
Subversion
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="tools"><tt>llvm/tools</tt></a></div>
+<h3>
+ <a name="tools"><tt>llvm/tools</tt></a>
+</h3>
+
<div class="doc_text">
<p>The <b>tools</b> directory contains the executables built out of the
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="utils"><tt>llvm/utils</tt></a></div>
+<h3>
+ <a name="utils"><tt>llvm/utils</tt></a>
+</h3>
+
<div class="doc_text">
<p>This directory contains utilities for working with LLVM source code, and some
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="tutorial">An Example Using the LLVM Tool Chain</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="tutorial4">Example with llvm-gcc4</a></div>
+<h3>
+ <a name="tutorial4">Example with llvm-gcc4</a>
+</h3>
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="problems">Common Problems</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="links">Links</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
Getting Started with the LLVM System using Microsoft Visual Studio
-</div>
+</h1>
<ul>
<li><a href="#overview">Overview</a>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="overview"><b>Overview</b></a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="requirements"><b>Requirements</b></a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="hardware"><b>Hardware</b></a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="software"><b>Software</b></a></div>
+<h3><a name="software"><b>Software</b></a></h3>
<div class="doc_text">
<p>You will need Visual Studio .NET 2005 SP1 or higher. The VS2005 SP1
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="quickstart"><b>Getting Started</b></a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="tutorial">An Example Using the LLVM Tool Chain</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="problems">Common Problems</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="links">Links</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</head>
<body>
-<div class="doc_title">LLVM gold plugin</div>
+<h1>LLVM gold plugin</h1>
<ol>
<li><a href="#introduction">Introduction</a></li>
<li><a href="#build">How to build it</a></li>
<div class="doc_author">Written by Nick Lewycky</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="introduction">Introduction</a></div>
+<h2><a name="introduction">Introduction</a></h2>
<!--=========================================================================-->
<div class="doc_text">
<p>Building with link time optimization requires cooperation from the
<tt>nm</tt>.
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="build">How to build it</a></div>
+<h2><a name="build">How to build it</a></h2>
<!--=========================================================================-->
<div class="doc_text">
<p>You need to have gold with plugin support and build the LLVMgold
</ul>
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="usage">Usage</a></div>
+<h2><a name="usage">Usage</a></h2>
<!--=========================================================================-->
<div class="doc_text">
<p>The linker takes a <tt>-plugin</tt> option that points to the path of
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="example1">Example of link time optimization</a>
-</div>
+</h3>
<div class="doc_text">
<p>The following example shows a worked example of the gold plugin mixing
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="lto_autotools">Quickstart for using LTO with autotooled projects</a></div>
+<h2>
+ <a name="lto_autotools">
+ Quickstart for using LTO with autotooled projects
+ </a>
+</h2>
<!--=========================================================================-->
<div class="doc_text">
<p>Once your system <tt>ld</tt>, <tt>ar</tt> and <tt>nm</tt> all support LLVM
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="licensing">Licensing</a></div>
+<h2><a name="licensing">Licensing</a></h2>
<!--=========================================================================-->
<div class="doc_text">
<p>Gold is licensed under the GPLv3. LLVMgold uses the interface file
</head>
<body>
-<div class="doc_title">How To Release LLVM To The Public</div>
+<h1>How To Release LLVM To The Public</h1>
<ol>
<li><a href="#introduction">Introduction</a></li>
<li><a href="#criteria">Qualification Criteria</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="introduction">Introduction</a></div>
+<h2><a name="introduction">Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="process">Release Timeline</a></div>
+<h2><a name="process">Release Timeline</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="process">Release Process</a></div>
+<h2><a name="process">Release Process</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="release-admin">Release Administrative Tasks</a></div>
+<h3><a name="release-admin">Release Administrative Tasks</a></h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="branch">Create Release Branch</a></div>
+<h4><a name="branch">Create Release Branch</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="verchanges">Update LLVM Version</a></div>
+<h4><a name="verchanges">Update LLVM Version</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="dist">Build the LLVM Release Candidates</a></div>
+<h4><a name="dist">Build the LLVM Release Candidates</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="release-build">Building the Release</a></div>
+<h3><a name="release-build">Building the Release</a></h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="build">Build LLVM</a></div>
+<h4><a name="build">Build LLVM</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="llvmgccbin">Build the LLVM GCC Binary Distribution</a></div>
+<h4><a name="llvmgccbin">Build the LLVM GCC Binary Distribution</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="clangbin">Build Clang Binary Distribution</a></div>
+<h4><a name="clangbin">Build Clang Binary Distribution</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="target-build">Target Specific Build Details</a></div>
+<h4><a name="target-build">Target Specific Build Details</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="release-qualify">
-Building the Release</a></div>
+<h3><a name="release-qualify">Building the Release</a></h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="llvm-qualify">Qualify LLVM</a></div>
+<h4><a name="llvm-qualify">Qualify LLVM</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="llvmgcc-qualify">Qualify LLVM-GCC</a></div>
+<h4><a name="llvmgcc-qualify">Qualify LLVM-GCC</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="clang-qualify">Qualify Clang</a></div>
+<h4><a name="clang-qualify">Qualify Clang</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="targets">Specific Target
-Qualification Details</a></div>
+<h4><a name="targets">Specific Target Qualification Details</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="commTest">Community Testing</a></div>
+<h3><a name="commTest">Community Testing</a></h3>
<div class="doc_text">
<p>Once all testing has been completed and appropriate bugs filed, the release
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="release-patch">Release Patch Rules</a></div>
+<h3><a name="release-patch">Release Patch Rules</a></h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="release-final">Release Final Tasks
-</a></div>
+<h3><a name="release-final">Release Final Tasks</a></h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="updocs">Update Documentation</a></div>
+<h4><a name="updocs">Update Documentation</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="tag">Tag the LLVM Final Release</a></div>
+<h4><a name="tag">Tag the LLVM Final Release</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="updemo">Update the LLVM Demo Page</a></div>
+<h3><a name="updemo">Update the LLVM Demo Page</a></h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="webupdates">Update the LLVM Website</a></div>
+<h4><a name="webupdates">Update the LLVM Website</a></h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="announce">Announce the Release</a></div>
+<h4><a name="announce">Announce the Release</a></h4>
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
How to submit an LLVM bug report
-</div>
+</h1>
<table class="layout" style="width: 90%" >
<tr class="layout">
</table>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="introduction">Introduction - Got bugs?</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="crashers">Crashing Bugs</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="front-end">Front-end bugs</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ct_optimizer">Compile-time optimization bugs</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ct_codegen">Code generator bugs</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="miscompilations">Miscompilations</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="codegen">Incorrect code generation</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title"> LLVM Language Reference Manual </div>
+<h1>LLVM Language Reference Manual</h1>
<ol>
<li><a href="#abstract">Abstract</a></li>
<li><a href="#introduction">Introduction</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="abstract">Abstract </a></div>
+<h2><a name="abstract">Abstract</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="introduction">Introduction</a> </div>
+<h2><a name="introduction">Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="wellformed">Well-Formedness</a> </div>
+<h4>
+ <a name="wellformed">Well-Formedness</a>
+</h4>
<div class="doc_text">
<!-- Describe the typesetting conventions here. -->
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="identifiers">Identifiers</a> </div>
+<h2><a name="identifiers">Identifiers</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="highlevel">High Level Structure</a> </div>
+<h2><a name="highlevel">High Level Structure</a></h2>
<!-- *********************************************************************** -->
<!-- ======================================================================= -->
-<div class="doc_subsection"> <a name="modulestructure">Module Structure</a>
-</div>
+<h3>
+ <a name="modulestructure">Module Structure</a>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="linkage">Linkage Types</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="callingconv">Calling Conventions</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="visibility">Visibility Styles</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="namedtypes">Named Types</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="globalvars">Global Variables</a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="functionstructure">Functions</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="aliasstructure">Aliases</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="namedmetadatastructure">Named Metadata</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="paramattrs">Parameter Attributes</a></div>
+<h3>
+ <a name="paramattrs">Parameter Attributes</a>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="gc">Garbage Collector Names</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="fnattrs">Function Attributes</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="moduleasm">Module-Level Inline Assembly</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="datalayout">Data Layout</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="pointeraliasing">Pointer Aliasing Rules</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="volatile">Volatile Memory Accesses</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="typesystem">Type System</a> </div>
+<h2><a name="typesystem">Type System</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"> <a name="t_classifications">Type
-Classifications</a> </div>
+<h3>
+ <a name="t_classifications">Type Classifications</a>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"> <a name="t_primitive">Primitive Types</a> </div>
+<h3>
+ <a name="t_primitive">Primitive Types</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_integer">Integer Type</a> </div>
+<h4>
+ <a name="t_integer">Integer Type</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_floating">Floating Point Types</a> </div>
+<h4>
+ <a name="t_floating">Floating Point Types</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_x86mmx">X86mmx Type</a> </div>
+<h4>
+ <a name="t_x86mmx">X86mmx Type</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_void">Void Type</a> </div>
+<h4>
+ <a name="t_void">Void Type</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_label">Label Type</a> </div>
+<h4>
+ <a name="t_label">Label Type</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_metadata">Metadata Type</a> </div>
+<h4>
+ <a name="t_metadata">Metadata Type</a>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection"> <a name="t_derived">Derived Types</a> </div>
+<h3>
+ <a name="t_derived">Derived Types</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_aggregate">Aggregate Types</a> </div>
+<h4>
+ <a name="t_aggregate">Aggregate Types</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_array">Array Type</a> </div>
+<h4>
+ <a name="t_array">Array Type</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_function">Function Type</a> </div>
+<h4>
+ <a name="t_function">Function Type</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_struct">Structure Type</a> </div>
+<h4>
+ <a name="t_struct">Structure Type</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_pstruct">Packed Structure Type</a>
-</div>
+<h4>
+ <a name="t_pstruct">Packed Structure Type</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_pointer">Pointer Type</a> </div>
+<h4>
+ <a name="t_pointer">Pointer Type</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_vector">Vector Type</a> </div>
+<h4>
+ <a name="t_vector">Vector Type</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="t_opaque">Opaque Type</a> </div>
+<h4>
+ <a name="t_opaque">Opaque Type</a>
+</h4>
+
<div class="doc_text">
<h5>Overview:</h5>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="t_uprefs">Type Up-references</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="constants">Constants</a> </div>
+<h2><a name="constants">Constants</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="simpleconstants">Simple Constants</a></div>
+<h3>
+ <a name="simpleconstants">Simple Constants</a>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="aggregateconstants"></a> <!-- old anchor -->
<a name="complexconstants">Complex Constants</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="globalconstants">Global Variable and Function Addresses</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="undefvalues">Undefined Values</a></div>
+<h3>
+ <a name="undefvalues">Undefined Values</a>
+</h3>
+
<div class="doc_text">
<p>The string '<tt>undef</tt>' can be used anywhere a constant is expected, and
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="trapvalues">Trap Values</a></div>
+<h3>
+ <a name="trapvalues">Trap Values</a>
+</h3>
+
<div class="doc_text">
<p>Trap values are similar to <a href="#undefvalues">undef values</a>, however
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="blockaddress">Addresses of Basic
- Blocks</a></div>
+<h3>
+ <a name="blockaddress">Addresses of Basic Blocks</a>
+</h3>
+
<div class="doc_text">
<p><b><tt>blockaddress(@function, %block)</tt></b></p>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="constantexprs">Constant Expressions</a>
-</div>
+<h3>
+ <a name="constantexprs">Constant Expressions</a>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="othervalues">Other Values</a> </div>
+<h2><a name="othervalues">Other Values</a></h2>
<!-- *********************************************************************** -->
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="inlineasm">Inline Assembler Expressions</a>
-</div>
+</h3>
<div class="doc_text">
another document that covers inline asm from a holistic perspective.</p>
</div>
-<div class="doc_subsubsection">
+<h4>
<a name="inlineasm_md">Inline Asm Metadata</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="metadata">Metadata Nodes and Metadata
- Strings</a>
-</div>
+<h3>
+ <a name="metadata">Metadata Nodes and Metadata Strings</a>
+</h3>
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="intrinsic_globals">Intrinsic Global Variables</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<p>LLVM has a number of "magic" global variables that contain data that affect
by LLVM.</p>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="intg_used">The '<tt>llvm.used</tt>' Global Variable</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
-<a name="intg_compiler_used">The '<tt>llvm.compiler.used</tt>' Global Variable</a>
-</div>
+<h3>
+ <a name="intg_compiler_used">
+ The '<tt>llvm.compiler.used</tt>' Global Variable
+ </a>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="intg_global_ctors">The '<tt>llvm.global_ctors</tt>' Global Variable</a>
-</div>
+</h3>
<div class="doc_text">
<pre>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="intg_global_dtors">The '<tt>llvm.global_dtors</tt>' Global Variable</a>
-</div>
+</h3>
<div class="doc_text">
<pre>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="instref">Instruction Reference</a> </div>
+<h2><a name="instref">Instruction Reference</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"> <a name="terminators">Terminator
-Instructions</a> </div>
+<h3>
+ <a name="terminators">Terminator Instructions</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_ret">'<tt>ret</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_ret">'<tt>ret</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_br">'<tt>br</tt>' Instruction</a> </div>
+<h4>
+ <a name="i_br">'<tt>br</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_switch">'<tt>switch</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_indirectbr">'<tt>indirectbr</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_invoke">'<tt>invoke</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_unwind">'<tt>unwind</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_unwind">'<tt>unwind</tt>' Instruction</a>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_unreachable">'<tt>unreachable</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_unreachable">'<tt>unreachable</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"> <a name="binaryops">Binary Operations</a> </div>
+<h3>
+ <a name="binaryops">Binary Operations</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_add">'<tt>add</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_fadd">'<tt>fadd</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_sub">'<tt>sub</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_fsub">'<tt>fsub</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_mul">'<tt>mul</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_fmul">'<tt>fmul</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_udiv">'<tt>udiv</tt>' Instruction
-</a></div>
+<h4>
+ <a name="i_udiv">'<tt>udiv</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_sdiv">'<tt>sdiv</tt>' Instruction
-</a> </div>
+<h4>
+ <a name="i_sdiv">'<tt>sdiv</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_fdiv">'<tt>fdiv</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_fdiv">'<tt>fdiv</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_urem">'<tt>urem</tt>' Instruction</a>
-</div>
+<h4>
+ <a name="i_urem">'<tt>urem</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_srem">'<tt>srem</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="i_frem">'<tt>frem</tt>' Instruction</a> </div>
+<h4>
+ <a name="i_frem">'<tt>frem</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"> <a name="bitwiseops">Bitwise Binary
-Operations</a> </div>
+<h3>
+ <a name="bitwiseops">Bitwise Binary Operations</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_shl">'<tt>shl</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_shl">'<tt>shl</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_lshr">'<tt>lshr</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_lshr">'<tt>lshr</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_ashr">'<tt>ashr</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_ashr">'<tt>ashr</tt>' Instruction</a>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_and">'<tt>and</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_and">'<tt>and</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</pre>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_or">'<tt>or</tt>' Instruction</a> </div>
+<h4>
+ <a name="i_or">'<tt>or</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_xor">'<tt>xor</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_xor">'<tt>xor</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="vectorops">Vector Operations</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_extractelement">'<tt>extractelement</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_insertelement">'<tt>insertelement</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_shufflevector">'<tt>shufflevector</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="aggregateops">Aggregate Operations</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_extractvalue">'<tt>extractvalue</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_insertvalue">'<tt>insertvalue</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="memoryops">Memory Access and Addressing Operations</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_alloca">'<tt>alloca</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_load">'<tt>load</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_load">'<tt>load</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_store">'<tt>store</tt>'
-Instruction</a> </div>
+<h4>
+ <a name="i_store">'<tt>store</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_getelementptr">'<tt>getelementptr</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"> <a name="convertops">Conversion Operations</a>
-</div>
+<h3>
+ <a name="convertops">Conversion Operations</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_trunc">'<tt>trunc .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_zext">'<tt>zext .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_sext">'<tt>sext .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_fptrunc">'<tt>fptrunc .. to</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_fpext">'<tt>fpext .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_fptoui">'<tt>fptoui .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_fptosi">'<tt>fptosi .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_uitofp">'<tt>uitofp .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_sitofp">'<tt>sitofp .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_ptrtoint">'<tt>ptrtoint .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_inttoptr">'<tt>inttoptr .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_bitcast">'<tt>bitcast .. to</tt>' Instruction</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"> <a name="otherops">Other Operations</a> </div>
+<h3>
+ <a name="otherops">Other Operations</a>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="i_icmp">'<tt>icmp</tt>' Instruction</a>
-</div>
+<h4>
+ <a name="i_icmp">'<tt>icmp</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a name="i_fcmp">'<tt>fcmp</tt>' Instruction</a>
-</div>
+<h4>
+ <a name="i_fcmp">'<tt>fcmp</tt>' Instruction</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_phi">'<tt>phi</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_select">'<tt>select</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_call">'<tt>call</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="i_va_arg">'<tt>va_arg</tt>' Instruction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"> <a name="intrinsics">Intrinsic Functions</a> </div>
+<h2><a name="intrinsics">Intrinsic Functions</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_varargs">Variable Argument Handling Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_va_start">'<tt>llvm.va_start</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_va_end">'<tt>llvm.va_end</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_va_copy">'<tt>llvm.va_copy</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_gc">Accurate Garbage Collection Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_gcroot">'<tt>llvm.gcroot</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_gcread">'<tt>llvm.gcread</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_gcwrite">'<tt>llvm.gcwrite</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_codegen">Code Generator Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_returnaddress">'<tt>llvm.returnaddress</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_frameaddress">'<tt>llvm.frameaddress</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_stacksave">'<tt>llvm.stacksave</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_stackrestore">'<tt>llvm.stackrestore</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_prefetch">'<tt>llvm.prefetch</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_pcmarker">'<tt>llvm.pcmarker</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_readcyclecounter">'<tt>llvm.readcyclecounter</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_libc">Standard C Library Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_memcpy">'<tt>llvm.memcpy</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_memmove">'<tt>llvm.memmove</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_memset">'<tt>llvm.memset.*</tt>' Intrinsics</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_sqrt">'<tt>llvm.sqrt.*</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_powi">'<tt>llvm.powi.*</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_sin">'<tt>llvm.sin.*</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_cos">'<tt>llvm.cos.*</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_pow">'<tt>llvm.pow.*</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_manip">Bit Manipulation Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_bswap">'<tt>llvm.bswap.*</tt>' Intrinsics</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_ctpop">'<tt>llvm.ctpop.*</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_ctlz">'<tt>llvm.ctlz.*</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_cttz">'<tt>llvm.cttz.*</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_overflow">Arithmetic with Overflow Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_sadd_overflow">'<tt>llvm.sadd.with.overflow.*</tt>' Intrinsics</a>
-</div>
+<h4>
+ <a name="int_sadd_overflow">
+ '<tt>llvm.sadd.with.overflow.*</tt>' Intrinsics
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_uadd_overflow">'<tt>llvm.uadd.with.overflow.*</tt>' Intrinsics</a>
-</div>
+<h4>
+ <a name="int_uadd_overflow">
+ '<tt>llvm.uadd.with.overflow.*</tt>' Intrinsics
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_ssub_overflow">'<tt>llvm.ssub.with.overflow.*</tt>' Intrinsics</a>
-</div>
+<h4>
+ <a name="int_ssub_overflow">
+ '<tt>llvm.ssub.with.overflow.*</tt>' Intrinsics
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_usub_overflow">'<tt>llvm.usub.with.overflow.*</tt>' Intrinsics</a>
-</div>
+<h4>
+ <a name="int_usub_overflow">
+ '<tt>llvm.usub.with.overflow.*</tt>' Intrinsics
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_smul_overflow">'<tt>llvm.smul.with.overflow.*</tt>' Intrinsics</a>
-</div>
+<h4>
+ <a name="int_smul_overflow">
+ '<tt>llvm.smul.with.overflow.*</tt>' Intrinsics
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_umul_overflow">'<tt>llvm.umul.with.overflow.*</tt>' Intrinsics</a>
-</div>
+<h4>
+ <a name="int_umul_overflow">
+ '<tt>llvm.umul.with.overflow.*</tt>' Intrinsics
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_fp16">Half Precision Floating Point Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_convert_to_fp16">'<tt>llvm.convert.to.fp16</tt>' Intrinsic</a>
-</div>
+<h4>
+ <a name="int_convert_to_fp16">
+ '<tt>llvm.convert.to.fp16</tt>' Intrinsic
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_convert_from_fp16">'<tt>llvm.convert.from.fp16</tt>' Intrinsic</a>
-</div>
+<h4>
+ <a name="int_convert_from_fp16">
+ '<tt>llvm.convert.from.fp16</tt>' Intrinsic
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_debugger">Debugger Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_eh">Exception Handling Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_trampoline">Trampoline Intrinsic</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_it">'<tt>llvm.init.trampoline</tt>' Intrinsic</a>
-</div>
+<h4>
+ <a name="int_it">
+ '<tt>llvm.init.trampoline</tt>' Intrinsic
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_atomics">Atomic Operations and Synchronization Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_memory_barrier">'<tt>llvm.memory.barrier</tt>' Intrinsic</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
<pre>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_atomic_cmp_swap">'<tt>llvm.atomic.cmp.swap.*</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_atomic_swap">'<tt>llvm.atomic.swap.*</tt>' Intrinsic</a>
-</div>
+</h4>
+
<div class="doc_text">
<h5>Syntax:</h5>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_atomic_load_add">'<tt>llvm.atomic.load.add.*</tt>' Intrinsic</a>
-
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_atomic_load_sub">'<tt>llvm.atomic.load.sub.*</tt>' Intrinsic</a>
-
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_atomic_load_and">'<tt>llvm.atomic.load.and.*</tt>' Intrinsic</a><br>
- <a name="int_atomic_load_nand">'<tt>llvm.atomic.load.nand.*</tt>' Intrinsic</a><br>
- <a name="int_atomic_load_or">'<tt>llvm.atomic.load.or.*</tt>' Intrinsic</a><br>
- <a name="int_atomic_load_xor">'<tt>llvm.atomic.load.xor.*</tt>' Intrinsic</a><br>
-</div>
+<h4>
+ <a name="int_atomic_load_and">
+ '<tt>llvm.atomic.load.and.*</tt>' Intrinsic
+ </a>
+ <br>
+ <a name="int_atomic_load_nand">
+ '<tt>llvm.atomic.load.nand.*</tt>' Intrinsic
+ </a>
+ <br>
+ <a name="int_atomic_load_or">
+ '<tt>llvm.atomic.load.or.*</tt>' Intrinsic
+ </a>
+ <br>
+ <a name="int_atomic_load_xor">
+ '<tt>llvm.atomic.load.xor.*</tt>' Intrinsic
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="int_atomic_load_max">'<tt>llvm.atomic.load.max.*</tt>' Intrinsic</a><br>
- <a name="int_atomic_load_min">'<tt>llvm.atomic.load.min.*</tt>' Intrinsic</a><br>
- <a name="int_atomic_load_umax">'<tt>llvm.atomic.load.umax.*</tt>' Intrinsic</a><br>
- <a name="int_atomic_load_umin">'<tt>llvm.atomic.load.umin.*</tt>' Intrinsic</a><br>
-</div>
+<h4>
+ <a name="int_atomic_load_max">
+ '<tt>llvm.atomic.load.max.*</tt>' Intrinsic
+ </a>
+ <br>
+ <a name="int_atomic_load_min">
+ '<tt>llvm.atomic.load.min.*</tt>' Intrinsic
+ </a>
+ <br>
+ <a name="int_atomic_load_umax">
+ '<tt>llvm.atomic.load.umax.*</tt>' Intrinsic
+ </a>
+ <br>
+ <a name="int_atomic_load_umin">
+ '<tt>llvm.atomic.load.umin.*</tt>' Intrinsic
+ </a>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_memorymarkers">Memory Use Markers</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_lifetime_start">'<tt>llvm.lifetime.start</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_lifetime_end">'<tt>llvm.lifetime.end</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_invariant_start">'<tt>llvm.invariant.start</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_invariant_end">'<tt>llvm.invariant.end</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="int_general">General Intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_var_annotation">'<tt>llvm.var.annotation</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_annotation">'<tt>llvm.annotation.*</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_trap">'<tt>llvm.trap</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_stackprotector">'<tt>llvm.stackprotector</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="int_objectsize">'<tt>llvm.objectsize</tt>' Intrinsic</a>
-</div>
+</h4>
<div class="doc_text">
content="A glossary of terms used with the LLVM project.">
</head>
<body>
-<div class="doc_title">The LLVM Lexicon</div>
+<h1>The LLVM Lexicon</h1>
<p class="doc_warning">NOTE: This document is a work in progress!</p>
<!-- *********************************************************************** -->
-<div class="doc_section">Table Of Contents</div>
+<h2>Table Of Contents</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<table>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">Definitions</div>
+<h2>Definitions</h2>
<!-- *********************************************************************** -->
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="A">- A -</a></div>
+<h3><a name="A">- A -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="ADCE"><b>ADCE</b></a></dt>
</dl>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="B">- B -</a></div>
+<h3><a name="B">- B -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="BURS"><b>BURS</b></a></dt>
</dl>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="C">- C -</a></div>
+<h3><a name="C">- C -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="CSE"><b>CSE</b></a></dt>
</dl>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="D">- D -</a></div>
+<h3><a name="D">- D -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="DAG"><b>DAG</b></a></dt>
</dl>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="G">- G -</a></div>
+<h3><a name="G">- G -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="GC"><b>GC</b></a></dt>
</dl>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="H">- H -</a></div>
+<h3><a name="H">- H -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="Heap"><b>Heap</b></a></dt>
</dl>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="I">- I -</a></div>
+<h3><a name="I">- I -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="IPA"><b>IPA</b></a></dt>
</dl>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="L">- L -</a></div>
+<h3><a name="L">- L -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="LCSSA"><b>LCSSA</b></a></dt>
</dl>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="M">- M -</a></div>
+<h3><a name="M">- M -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="MC"><b>MC</b></a></dt>
</dl>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="O">- O -</a></div>
+<h3><a name="O">- O -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="Object_Pointer"><b>Object Pointer</b></a></dt>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="P">- P -</a></div>
+<h3><a name="P">- P -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="PRE"><b>PRE</b></a></dt>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="R">- R -</a></div>
+<h3><a name="R">- R -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="RAUW"><b>RAUW</b></a></dt> <dd>An abbreviation for Replace
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="S">- S -</a></div>
+<h3><a name="S">- S -</a></h3>
<div class="doc_text">
<dl>
<dt><a name="Safe_Point"><b>Safe Point</b></a></dt>
<link rel="stylesheet" href="llvm.css" type="text/css">
</head>
-<div class="doc_title">
+<h1>
LLVM Link Time Optimization: Design and Implementation
-</div>
+</h1>
<ul>
<li><a href="#desc">Description</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="desc">Description</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="design">Design Philosophy</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="example1">Example of link time optimization</a>
-</div>
+</h3>
<div class="doc_text">
<p>The following example illustrates the advantages of LTO's integrated
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="alternative_approaches">Alternative Approaches</a>
-</div>
+</h3>
<div class="doc_text">
<dl>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="multiphase">Multi-phase communication between libLTO and linker</a>
-</div>
+</h2>
<div class="doc_text">
<p>The linker collects information about symbol defininitions and uses in
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="phase1">Phase 1 : Read LLVM Bitcode Files</a>
-</div>
+</h3>
<div class="doc_text">
<p>The linker first reads all object files in natural order and collects
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="phase2">Phase 2 : Symbol Resolution</a>
-</div>
+</h3>
<div class="doc_text">
<p>In this stage, the linker resolves symbols using global symbol table.
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="phase3">Phase 3 : Optimize Bitcode Files</a>
-</div>
+</h3>
<div class="doc_text">
<p>After symbol resolution, the linker tells the LTO shared object which
symbols are needed by native object files. In the example above, the linker
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="phase4">Phase 4 : Symbol Resolution after optimization</a>
-</div>
+</h3>
<div class="doc_text">
<p>In this phase, the linker reads optimized a native object file and
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="lto">libLTO</a>
-</div>
+</h2>
<div class="doc_text">
<p><tt>libLTO</tt> is a shared object that is part of the LLVM tools, and
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="lto_module_t">lto_module_t</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="lto_code_gen_t">lto_code_gen_t</a>
-</div>
+</h3>
<div class="doc_text">
</head>
<body>
-<div class="doc_title">LLVM Makefile Guide</div>
+<h1>LLVM Makefile Guide</h1>
<ol>
<li><a href="#introduction">Introduction</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="introduction">Introduction </a></div>
+<h2><a name="introduction">Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="general">General Concepts</a></div>
+<h2><a name="general">General Concepts</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="projects">Projects</a></div>
+<h3><a name="projects">Projects</a></h3>
<div class="doc_text">
<p>The LLVM Makefile System is quite generous. It not only builds its own
software, but it can build yours too. Built into the system is knowledge of
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="varvalues">Variable Values</a></div>
+<h3><a name="varvalues">Variable Values</a></h3>
<div class="doc_text">
<p>To use the makefile system, you simply create a file named
<tt>Makefile</tt> in your directory and declare values for certain variables.
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="including">Including Makefiles</a></div>
+<h3><a name="including">Including Makefiles</a></h3>
<div class="doc_text">
<p>Setting variables alone is not enough. You must include into your Makefile
additional files that provide the rules of the LLVM Makefile system. The
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="Makefile">Makefile</a></div>
+<h4><a name="Makefile">Makefile</a></h4>
<div class="doc_text">
<p>Each directory to participate in the build needs to have a file named
<tt>Makefile</tt>. This is the file first read by <tt>make</tt>. It has three
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="Makefile.common">Makefile.common</a>
-</div>
+<h4><a name="Makefile.common">Makefile.common</a></h4>
<div class="doc_text">
<p>Every project must have a <tt>Makefile.common</tt> file at its top source
directory. This file serves three purposes:</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="Makefile.config">Makefile.config</a>
-</div>
+<h4><a name="Makefile.config">Makefile.config</a></h4>
<div class="doc_text">
<p>Every project must have a <tt>Makefile.config</tt> at the top of its
<em>build</em> directory. This file is <b>generated</b> by the
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="Makefile.rules">Makefile.rules</a></div>
+<h4><a name="Makefile.rules">Makefile.rules</a></h4>
<div class="doc_text">
<p>This file, located at <tt>$(LLVM_SRC_ROOT)/Makefile.rules</tt> is the heart
of the LLVM Makefile System. It provides all the logic, dependencies, and
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="Comments">Comments</a></div>
+<h3><a name="Comments">Comments</a></h3>
<div class="doc_text">
<p>User Makefiles need not have comments in them unless the construction is
unusual or it does not strictly follow the rules and patterns of the LLVM
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="tutorial">Tutorial</a></div>
+<h2><a name="tutorial">Tutorial</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<p>This section provides some examples of the different kinds of modules you
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="libraries">Libraries</a></div>
+<h3><a name="libraries">Libraries</a></h3>
<div class="doc_text">
<p>Only a few variable definitions are needed to build a regular library.
Normally, the makefile system will build all the software into a single
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="BCModules">Bitcode Modules</a></div>
+<h4><a name="BCModules">Bitcode Modules</a></h4>
<div class="doc_text">
<p>In some situations, it is desirable to build a single bitcode module from
a variety of sources, instead of an archive, shared library, or bitcode
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="LoadableModules">Loadable Modules</a>
-</div>
+</h4>
<div class="doc_text">
<p>In some situations, you need to create a loadable module. Loadable modules
can be loaded into programs like <tt>opt</tt> or <tt>llc</tt> to specify
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="tools">Tools</a></div>
+<h3><a name="tools">Tools</a></h3>
<div class="doc_text">
<p>For building executable programs (tools), you must provide the name of the
tool and the names of the libraries you wish to link with the tool. For
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="JIT">JIT Tools</a></div>
+<h4><a name="JIT">JIT Tools</a></h4>
<div class="doc_text">
<p>Many tools will want to use the JIT features of LLVM. To do this, you
simply specify that you want an execution 'engine', and the makefiles will
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="targets">Targets Supported</a></div>
+<h2><a name="targets">Targets Supported</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="all">all (default)</a></div>
+<h3><a name="all">all (default)</a></h3>
<div class="doc_text">
<p>When you invoke <tt>make</tt> with no arguments, you are implicitly
instructing it to seek the "all" target (goal). This target is used for
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="all-local">all-local</a></div>
+<h3><a name="all-local">all-local</a></h3>
<div class="doc_text">
<p>This target is the same as <a href="#all">all</a> but it operates only on
the current directory instead of recursively.</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="check">check</a></div>
+<h3><a name="check">check</a></h3>
<div class="doc_text">
<p>This target can be invoked from anywhere within a project's directories
but always invokes the <a href="#check-local"><tt>check-local</tt></a> target
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="check-local">check-local</a></div>
+<h3><a name="check-local">check-local</a></h3>
<div class="doc_text">
<p>This target should be implemented by the <tt>Makefile</tt> in the project's
<tt>test</tt> directory. It is invoked by the <tt>check</tt> target elsewhere.
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="clean">clean</a></div>
+<h3><a name="clean">clean</a></h3>
<div class="doc_text">
<p>This target cleans the build directory, recursively removing all things
that the Makefile builds. The cleaning rules have been made guarded so they
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="clean-local">clean-local</a></div>
+<h3><a name="clean-local">clean-local</a></h3>
<div class="doc_text">
<p>This target does the same thing as <tt>clean</tt> but only for the current
(local) directory.</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="dist">dist</a></div>
+<h3><a name="dist">dist</a></h3>
<div class="doc_text">
<p>This target builds a distribution tarball. It first builds the entire
project using the <tt>all</tt> target and then tars up the necessary files and
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="dist-check">dist-check</a></div>
+<h3><a name="dist-check">dist-check</a></h3>
<div class="doc_text">
<p>This target does the same thing as the <tt>dist</tt> target but also checks
the distribution tarball. The check is made by unpacking the tarball to a new
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="dist-clean">dist-clean</a></div>
+<h3><a name="dist-clean">dist-clean</a></h3>
<div class="doc_text">
<p>This is a special form of the <tt>clean</tt> clean target. It performs a
normal <tt>clean</tt> but also removes things pertaining to building the
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="install">install</a></div>
+<h3><a name="install">install</a></h3>
<div class="doc_text">
<p>This target finalizes shared objects and executables and copies all
libraries, headers, executables and documentation to the directory given
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="preconditions">preconditions</a></div>
+<h3><a name="preconditions">preconditions</a></h3>
<div class="doc_text">
<p>This utility target checks to see if the <tt>Makefile</tt> in the object
directory is older than the <tt>Makefile</tt> in the source directory and
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="printvars">printvars</a></div>
+<h3><a name="printvars">printvars</a></h3>
<div class="doc_text">
<p>This utility target just causes the LLVM makefiles to print out some of
the makefile variables so that you can double check how things are set. </p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="reconfigure">reconfigure</a></div>
+<h3><a name="reconfigure">reconfigure</a></h3>
<div class="doc_text">
<p>This utility target will force a reconfigure of LLVM or your project. It
simply runs <tt>$(PROJ_OBJ_ROOT)/config.status --recheck</tt> to rerun the
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="spotless">spotless</a></div>
+<h3><a name="spotless">spotless</a></h3>
<div class="doc_text">
<p>This utility target, only available when <tt>$(PROJ_OBJ_ROOT)</tt> is not
the same as <tt>$(PROJ_SRC_ROOT)</tt>, will completely clean the
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="tags">tags</a></div>
+<h3><a name="tags">tags</a></h3>
<div class="doc_text">
<p>This target will generate a <tt>TAGS</tt> file in the top-level source
directory. It is meant for use with emacs, XEmacs, or ViM. The TAGS file
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="uninstall">uninstall</a></div>
+<h3><a name="uninstall">uninstall</a></h3>
<div class="doc_text">
<p>This target is the opposite of the <tt>install</tt> target. It removes the
header, library and executable files from the installation directories. Note
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="variables">Variables</a></div>
+<h2><a name="variables">Variables</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<p>Variables are used to tell the LLVM Makefile System what to do and to
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="setvars">Control Variables</a></div>
+<h3><a name="setvars">Control Variables</a></h3>
<div class="doc_text">
<p>Variables listed in the table below should be set <em>before</em> the
inclusion of <a href="#Makefile.common"><tt>$(LEVEL)/Makefile.common</tt></a>.
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="overvars">Override Variables</a></div>
+<h3><a name="overvars">Override Variables</a></h3>
<div class="doc_text">
<p>Override variables can be used to override the default
values provided by the LLVM makefile system. These variables can be set in
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="getvars">Readable Variables</a></div>
+<h3><a name="getvars">Readable Variables</a></h3>
<div class="doc_text">
<p>Variables listed in the table below can be used by the user's Makefile but
should not be changed. Changing the value will generally cause the build to go
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="intvars">Internal Variables</a></div>
+<h3><a name="intvars">Internal Variables</a></h3>
<div class="doc_text">
<p>Variables listed below are used by the LLVM Makefile System
and considered internal. You should not use these variables under any
</head>
<body>
-<div class="doc_title">Advice on Packaging LLVM</div>
+<h1>Advice on Packaging LLVM</h1>
<ol>
<li><a href="#overview">Overview</a></li>
<li><a href="#compilation">Compile Flags</a></li>
</ol>
<!--=========================================================================-->
-<div class="doc_section"><a name="overview">Overview</a></div>
+<h2><a name="overview">Overview</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="compilation">Compile Flags</a></div>
+<h2><a name="compilation">Compile Flags</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="cxx-features">C++ Features</a></div>
+<h2><a name="cxx-features">C++ Features</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="shared-library">Shared Library</a></div>
+<h2><a name="shared-library">Shared Library</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="deps">Dependencies</a></div>
+<h2><a name="deps">Dependencies</a></h2>
<!--=========================================================================-->
<div class="doc_text">
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
+32;10;2c<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
-->
-<div class="doc_title">LLVM's Analysis and Transform Passes</div>
+<h1>LLVM's Analysis and Transform Passes</h1>
<ol>
<li><a href="#intro">Introduction</a></li>
</div>
<!-- ======================================================================= -->
-<div class="doc_section"> <a name="intro">Introduction</a> </div>
+<h2><a name="intro">Introduction</a></h2>
<div class="doc_text">
<p>This document serves as a high level summary of the optimization features
that LLVM provides. Optimizations are implemented as Passes that traverse some
</div>
<!-- ======================================================================= -->
-<div class="doc_section"> <a name="analyses">Analysis Passes</a></div>
+<h2><a name="analyses">Analysis Passes</a></h2>
<div class="doc_text">
<p>This section describes the LLVM Analysis Passes.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="aa-eval">-aa-eval: Exhaustive Alias Analysis Precision Evaluator</a>
-</div>
+</h3>
<div class="doc_text">
<p>This is a simple N^2 alias analysis accuracy evaluator.
Basically, for each function in the program, it simply queries to see how the
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="basicaa">-basicaa: Basic Alias Analysis (stateless AA impl)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This is the default implementation of the Alias Analysis interface
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="basiccg">-basiccg: Basic CallGraph Construction</a>
-</div>
+</h3>
<div class="doc_text">
<p>Yet to be written.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="count-aa">-count-aa: Count Alias Analysis Query Responses</a>
-</div>
+</h3>
<div class="doc_text">
<p>
A pass which can be used to count how many alias queries
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="debug-aa">-debug-aa: AA use debugger</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This simple pass checks alias analysis users to ensure that if they
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="domfrontier">-domfrontier: Dominance Frontier Construction</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass is a simple dominator construction algorithm for finding forward
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="domtree">-domtree: Dominator Tree Construction</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass is a simple dominator construction algorithm for finding forward
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="dot-callgraph">-dot-callgraph: Print Call Graph to 'dot' file</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the call graph into a
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="dot-cfg">-dot-cfg: Print CFG of function to 'dot' file</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the control flow graph
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="dot-cfg-only">-dot-cfg-only: Print CFG of function to 'dot' file (with no function bodies)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the control flow graph
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="dot-dom">-dot-dom: Print dominance tree of function to 'dot' file</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the dominator tree
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="dot-dom-only">-dot-dom-only: Print dominance tree of function to 'dot' file (with no function bodies)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the dominator tree
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="dot-postdom">-dot-postdom: Print postdominance tree of function to 'dot' file</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the post dominator tree
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="dot-postdom-only">-dot-postdom-only: Print postdominance tree of function to 'dot' file (with no function bodies)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the post dominator tree
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="globalsmodref-aa">-globalsmodref-aa: Simple mod/ref analysis for globals</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This simple pass provides alias and mod/ref information for global values
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="instcount">-instcount: Counts the various types of Instructions</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass collects the count of all instructions and reports them
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="intervals">-intervals: Interval Partition Construction</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This analysis calculates and represents the interval partition of a function,
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="iv-users">-iv-users: Induction Variable Users</a>
-</div>
+</h3>
<div class="doc_text">
<p>Bookkeeping for "interesting" users of expressions computed from
induction variables.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="lazy-value-info">-lazy-value-info: Lazy Value Information Analysis</a>
-</div>
+</h3>
<div class="doc_text">
<p>Interface for lazy computation of value constraint information.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="lda">-lda: Loop Dependence Analysis</a>
-</div>
+</h3>
<div class="doc_text">
<p>Loop dependence analysis framework, which is used to detect dependences in
memory accesses in loops.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="libcall-aa">-libcall-aa: LibCall Alias Analysis</a>
-</div>
+</h3>
<div class="doc_text">
<p>LibCall Alias Analysis.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="lint">-lint: Statically lint-checks LLVM IR</a>
-</div>
+</h3>
<div class="doc_text">
<p>This pass statically checks for common and easily-identified constructs
which produce undefined or likely unintended behavior in LLVM IR.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="loops">-loops: Natural Loop Information</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This analysis is used to identify natural loops and determine the loop depth
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="memdep">-memdep: Memory Dependence Analysis</a>
-</div>
+</h3>
<div class="doc_text">
<p>
An analysis that determines, for a given memory operation, what preceding
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="module-debuginfo">-module-debuginfo: Decodes module-level debug info</a>
-</div>
+</h3>
<div class="doc_text">
<p>This pass decodes the debug info metadata in a module and prints in a
(sufficiently-prepared-) human-readable form.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="no-aa">-no-aa: No Alias Analysis (always returns 'may' alias)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Always returns "I don't know" for alias queries. NoAA is unlike other alias
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="no-profile">-no-profile: No Profile Information</a>
-</div>
+</h3>
<div class="doc_text">
<p>
The default "no profile" implementation of the abstract
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="postdomfrontier">-postdomfrontier: Post-Dominance Frontier Construction</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass is a simple post-dominator construction algorithm for finding
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="postdomtree">-postdomtree: Post-Dominator Tree Construction</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass is a simple post-dominator construction algorithm for finding
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="print-alias-sets">-print-alias-sets: Alias Set Printer</a>
-</div>
+</h3>
<div class="doc_text">
<p>Yet to be written.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="print-callgraph">-print-callgraph: Print a call graph</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the call graph to
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="print-callgraph-sccs">-print-callgraph-sccs: Print SCCs of the Call Graph</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the SCCs of the call
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="print-cfg-sccs">-print-cfg-sccs: Print SCCs of each function CFG</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints the SCCs of each
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="print-dbginfo">-print-dbginfo: Print debug info in human readable form</a>
-</div>
+</h3>
<div class="doc_text">
<p>Pass that prints instructions, and associated debug info:</p>
<ul>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="print-dom-info">-print-dom-info: Dominator Info Printer</a>
-</div>
+</h3>
<div class="doc_text">
<p>Dominator Info Printer.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="print-externalfnconstants">-print-externalfnconstants: Print external fn callsites passed constants</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass, only available in <code>opt</code>, prints out call sites to
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="print-function">-print-function: Print function to stderr</a>
-</div>
+</h3>
<div class="doc_text">
<p>
The <code>PrintFunctionPass</code> class is designed to be pipelined with
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="print-module">-print-module: Print module to stderr</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass simply prints out the entire module when it is executed.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="print-used-types">-print-used-types: Find Used Types</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass is used to seek out all of the types in use by the program. Note
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="profile-estimator">-profile-estimator: Estimate profiling information</a>
-</div>
+</h3>
<div class="doc_text">
<p>Profiling information that estimates the profiling information
in a very crude and unimaginative way.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="profile-loader">-profile-loader: Load profile information from llvmprof.out</a>
-</div>
+</h3>
<div class="doc_text">
<p>
A concrete implementation of profiling information that loads the information
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="profile-verifier">-profile-verifier: Verify profiling information</a>
-</div>
+</h3>
<div class="doc_text">
<p>Pass that checks profiling information for plausibility.</p>
</div>
-<div class="doc_subsection">
+<h3>
<a name="regions">-regions: Detect single entry single exit regions</a>
-</div>
+</h3>
<div class="doc_text">
<p>
The <code>RegionInfo</code> pass detects single entry single exit regions in a
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="scalar-evolution">-scalar-evolution: Scalar Evolution Analysis</a>
-</div>
+</h3>
<div class="doc_text">
<p>
The <code>ScalarEvolution</code> analysis can be used to analyze and
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="scev-aa">-scev-aa: ScalarEvolution-based Alias Analysis</a>
-</div>
+</h3>
<div class="doc_text">
<p>Simple alias analysis implemented in terms of ScalarEvolution queries.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="targetdata">-targetdata: Target Data Layout</a>
-</div>
+</h3>
<div class="doc_text">
<p>Provides other passes access to information on how the size and alignment
required by the the target ABI for various data types.</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_section"> <a name="transforms">Transform Passes</a></div>
+<h2><a name="transforms">Transform Passes</a></h2>
<div class="doc_text">
<p>This section describes the LLVM Transform Passes.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="adce">-adce: Aggressive Dead Code Elimination</a>
-</div>
+</h3>
<div class="doc_text">
<p>ADCE aggressively tries to eliminate code. This pass is similar to
<a href="#dce">DCE</a> but it assumes that values are dead until proven
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="always-inline">-always-inline: Inliner for always_inline functions</a>
-</div>
+</h3>
<div class="doc_text">
<p>A custom inliner that handles only functions that are marked as
"always inline".</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="argpromotion">-argpromotion: Promote 'by reference' arguments to scalars</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass promotes "by reference" arguments to be "by value" arguments. In
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="block-placement">-block-placement: Profile Guided Basic Block Placement</a>
-</div>
+</h3>
<div class="doc_text">
<p>This pass is a very simple profile guided basic block placement algorithm.
The idea is to put frequently executed blocks together at the start of the
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="break-crit-edges">-break-crit-edges: Break critical edges in CFG</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Break all of the critical edges in the CFG by inserting a dummy basic block.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="codegenprepare">-codegenprepare: Optimize for code generation</a>
-</div>
+</h3>
<div class="doc_text">
This pass munges the code in the input function to better prepare it for
SelectionDAG-based code generation. This works around limitations in it's
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="constmerge">-constmerge: Merge Duplicate Global Constants</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Merges duplicate global constants together into a single constant that is
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="constprop">-constprop: Simple constant propagation</a>
-</div>
+</h3>
<div class="doc_text">
<p>This file implements constant propagation and merging. It looks for
instructions involving only constant operands and replaces them with a
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="dce">-dce: Dead Code Elimination</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Dead code elimination is similar to <a href="#die">dead instruction
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="deadargelim">-deadargelim: Dead Argument Elimination</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass deletes dead arguments from internal functions. Dead argument
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="deadtypeelim">-deadtypeelim: Dead Type Elimination</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass is used to cleanup the output of GCC. It eliminate names for types
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="die">-die: Dead Instruction Elimination</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Dead instruction elimination performs a single pass over the function,
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="dse">-dse: Dead Store Elimination</a>
-</div>
+</h3>
<div class="doc_text">
<p>
A trivial dead store elimination that only considers basic-block local
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="functionattrs">-functionattrs: Deduce function attributes</a>
-</div>
+</h3>
<div class="doc_text">
<p>A simple interprocedural pass which walks the call-graph, looking for
functions which do not access or only read non-local memory, and marking them
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="globaldce">-globaldce: Dead Global Elimination</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This transform is designed to eliminate unreachable internal globals from the
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="globalopt">-globalopt: Global Variable Optimizer</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass transforms simple global variables that never have their address
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="gvn">-gvn: Global Value Numbering</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass performs global value numbering to eliminate fully and partially
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="indvars">-indvars: Canonicalize Induction Variables</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This transformation analyzes and transforms the induction variables (and
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="inline">-inline: Function Integration/Inlining</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Bottom-up inlining of functions into callees.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="insert-edge-profiling">-insert-edge-profiling: Insert instrumentation for edge profiling</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass instruments the specified program with counters for edge profiling.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="insert-optimal-edge-profiling">-insert-optimal-edge-profiling: Insert optimal instrumentation for edge profiling</a>
-</div>
+</h3>
<div class="doc_text">
<p>This pass instruments the specified program with counters for edge profiling.
Edge profiling can give a reasonable approximation of the hot paths through a
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="instcombine">-instcombine: Combine redundant instructions</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Combine instructions to form fewer, simple
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="internalize">-internalize: Internalize Global Symbols</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass loops over all of the functions in the input module, looking for a
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="ipconstprop">-ipconstprop: Interprocedural constant propagation</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass implements an <em>extremely</em> simple interprocedural constant
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="ipsccp">-ipsccp: Interprocedural Sparse Conditional Constant Propagation</a>
-</div>
+</h3>
<div class="doc_text">
<p>
An interprocedural variant of <a href="#sccp">Sparse Conditional Constant
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="jump-threading">-jump-threading: Jump Threading</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Jump threading tries to find distinct threads of control flow running through
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="lcssa">-lcssa: Loop-Closed SSA Form Pass</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass transforms loops by placing phi nodes at the end of the loops for
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="licm">-licm: Loop Invariant Code Motion</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass performs loop invariant code motion, attempting to remove as much
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="loop-deletion">-loop-deletion: Delete dead loops</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This file implements the Dead Loop Deletion Pass. This pass is responsible
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="loop-extract">-loop-extract: Extract loops into new functions</a>
-</div>
+</h3>
<div class="doc_text">
<p>
A pass wrapper around the <code>ExtractLoop()</code> scalar transformation to
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="loop-extract-single">-loop-extract-single: Extract at most one loop into a new function</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Similar to <a href="#loop-extract">Extract loops into new functions</a>,
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="loop-reduce">-loop-reduce: Loop Strength Reduction</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass performs a strength reduction on array references inside loops that
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="loop-rotate">-loop-rotate: Rotate Loops</a>
-</div>
+</h3>
<div class="doc_text">
<p>A simple loop rotation transformation.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="loop-simplify">-loop-simplify: Canonicalize natural loops</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass performs several transformations to transform natural loops into a
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="loop-unroll">-loop-unroll: Unroll loops</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass implements a simple loop unroller. It works best when loops have
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="loop-unswitch">-loop-unswitch: Unswitch loops</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass transforms loops that contain branches on loop-invariant conditions
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="loweratomic">-loweratomic: Lower atomic intrinsics to non-atomic form</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass lowers atomic intrinsics to non-atomic form for use in a known
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="lowerinvoke">-lowerinvoke: Lower invoke and unwind, for unwindless code generators</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This transformation is designed for use by code generators which do not yet
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="lowersetjmp">-lowersetjmp: Lower Set Jump</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Lowers <tt>setjmp</tt> and <tt>longjmp</tt> to use the LLVM invoke and unwind
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="lowerswitch">-lowerswitch: Lower SwitchInst's to branches</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Rewrites <tt>switch</tt> instructions with a sequence of branches, which
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="mem2reg">-mem2reg: Promote Memory to Register</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This file promotes memory references to be register references. It promotes
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="memcpyopt">-memcpyopt: MemCpy Optimization</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass performs various transformations related to eliminating memcpy
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="mergefunc">-mergefunc: Merge Functions</a>
-</div>
+</h3>
<div class="doc_text">
<p>This pass looks for equivalent functions that are mergable and folds them.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="mergereturn">-mergereturn: Unify function exit nodes</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Ensure that functions have at most one <tt>ret</tt> instruction in them.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="partial-inliner">-partial-inliner: Partial Inliner</a>
-</div>
+</h3>
<div class="doc_text">
<p>This pass performs partial inlining, typically by inlining an if
statement that surrounds the body of the function.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="prune-eh">-prune-eh: Remove unused exception handling info</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This file implements a simple interprocedural pass which walks the call-graph,
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="reassociate">-reassociate: Reassociate expressions</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass reassociates commutative expressions in an order that is designed
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="reg2mem">-reg2mem: Demote all values to stack slots</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This file demotes all registers to memory references. It is intented to be
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="scalarrepl">-scalarrepl: Scalar Replacement of Aggregates (DT)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
The well-known scalar replacement of aggregates transformation. This
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="sccp">-sccp: Sparse Conditional Constant Propagation</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Sparse conditional constant propagation and merging, which can be summarized
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="simplify-libcalls">-simplify-libcalls: Simplify well-known library calls</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Applies a variety of small optimizations for calls to specific well-known
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="simplifycfg">-simplifycfg: Simplify the CFG</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Performs dead code elimination and basic block merging. Specifically:
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="sink">-sink: Code sinking</a>
-</div>
+</h3>
<div class="doc_text">
<p>This pass moves instructions into successor blocks, when possible, so that
they aren't executed on paths where their results aren't needed.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="sretpromotion">-sretpromotion: Promote sret arguments to multiple ret values</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass finds functions that return a struct (using a pointer to the struct
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="strip">-strip: Strip all symbols from a module</a>
-</div>
+</h3>
<div class="doc_text">
<p>
performs code stripping. this transformation can delete:
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="strip-dead-debug-info">-strip-dead-debug-info: Strip debug info for unused symbols</a>
-</div>
+</h3>
<div class="doc_text">
<p>
performs code stripping. this transformation can delete:
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="strip-dead-prototypes">-strip-dead-prototypes: Strip Unused Function Prototypes</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass loops over all of the functions in the input module, looking for
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="strip-debug-declare">-strip-debug-declare: Strip all llvm.dbg.declare intrinsics</a>
-</div>
+</h3>
<div class="doc_text">
<p>This pass implements code stripping. Specifically, it can delete:</p>
<ul>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="strip-nondebug">-strip-nondebug: Strip all symbols, except dbg symbols, from a module</a>
-</div>
+</h3>
<div class="doc_text">
<p>This pass implements code stripping. Specifically, it can delete:</p>
<ul>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="tailcallelim">-tailcallelim: Tail Call Elimination</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This file transforms calls of the current function (self recursion) followed
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="tailduplicate">-tailduplicate: Tail Duplication</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass performs a limited form of tail duplication, intended to simplify
</div>
<!-- ======================================================================= -->
-<div class="doc_section"> <a name="utilities">Utility Passes</a></div>
+<h2><a name="utilities">Utility Passes</a></h2>
<div class="doc_text">
<p>This section describes the LLVM Utility Passes.</p>
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="deadarghaX0r">-deadarghaX0r: Dead Argument Hacking (BUGPOINT USE ONLY; DO NOT USE)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Same as dead argument elimination, but deletes arguments to functions which
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="extract-blocks">-extract-blocks: Extract Basic Blocks From Module (for bugpoint use)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
This pass is used by bugpoint to extract all blocks from the module into their
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="instnamer">-instnamer: Assign names to anonymous instructions</a>
-</div>
+</h3>
<div class="doc_text">
<p>This is a little utility pass that gives instructions names, this is mostly
useful when diffing the effect of an optimization because deleting an
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="preverify">-preverify: Preliminary module verification</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Ensures that the module is in the form required by the <a
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="verify">-verify: Module Verifier</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Verifies an LLVM IR code. This is useful to run after an optimization which is
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="view-cfg">-view-cfg: View CFG of function</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Displays the control flow graph using the GraphViz tool.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="view-cfg-only">-view-cfg-only: View CFG of function (with no function bodies)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Displays the control flow graph using the GraphViz tool, but omitting function
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="view-dom">-view-dom: View dominance tree of function</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Displays the dominator tree using the GraphViz tool.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="view-dom-only">-view-dom-only: View dominance tree of function (with no function bodies)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Displays the dominator tree using the GraphViz tool, but omitting function
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="view-postdom">-view-postdom: View postdominance tree of function</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Displays the post dominator tree using the GraphViz tool.
</div>
<!-------------------------------------------------------------------------- -->
-<div class="doc_subsection">
+<h3>
<a name="view-postdom-only">-view-postdom-only: View postdominance tree of function (with no function bodies)</a>
-</div>
+</h3>
<div class="doc_text">
<p>
Displays the post dominator tree using the GraphViz tool, but omitting
</head>
<body>
-<div class="doc_title">
+<h1>
LLVM Programmer's Manual
-</div>
+</h1>
<ol>
<li><a href="#introduction">Introduction</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="introduction">Introduction </a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="general">General Information</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="stl">The C++ Standard Template Library</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="stl">Other useful references</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="apis">Important and useful LLVM APIs</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="isa">The <tt>isa<></tt>, <tt>cast<></tt> and
<tt>dyn_cast<></tt> templates</a>
-</div>
+</h3>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="string_apis">Passing strings (the <tt>StringRef</tt>
and <tt>Twine</tt> classes)</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="StringRef">The <tt>StringRef</tt> class</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="Twine">The <tt>Twine</tt> class</a>
-</div>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="DEBUG">The <tt>DEBUG()</tt> macro and <tt>-debug</tt> option</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="DEBUG_TYPE">Fine grained debug info with <tt>DEBUG_TYPE</tt> and
the <tt>-debug-only</tt> option</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="Statistic">The <tt>Statistic</tt> class & <tt>-stats</tt>
option</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ViewGraph">Viewing graphs while debugging code</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="datastructure">Picking the Right Data Structure for a Task</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ds_sequential">Sequential Containers (std::vector, std::list, etc)</a>
-</div>
+</h3>
<div class="doc_text">
There are a variety of sequential containers available for you, based on your
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_arrayref">llvm/ADT/ArrayRef.h</a>
-</div>
+</h4>
<div class="doc_text">
<p>The llvm::ArrayRef class is the preferred class to use in an interface that
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_fixedarrays">Fixed Size Arrays</a>
-</div>
+</h4>
<div class="doc_text">
<p>Fixed size arrays are very simple and very fast. They are good if you know
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_heaparrays">Heap Allocated Arrays</a>
-</div>
+</h4>
<div class="doc_text">
<p>Heap allocated arrays (new[] + delete[]) are also simple. They are good if
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_smallvector">"llvm/ADT/SmallVector.h"</a>
-</div>
+</h4>
<div class="doc_text">
<p><tt>SmallVector<Type, N></tt> is a simple class that looks and smells
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_vector"><vector></a>
-</div>
+</h4>
<div class="doc_text">
<p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_deque"><deque></a>
-</div>
+</h4>
<div class="doc_text">
<p>std::deque is, in some senses, a generalized version of std::vector. Like
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_list"><list></a>
-</div>
+</h4>
<div class="doc_text">
<p>std::list is an extremely inefficient class that is rarely useful.
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_ilist">llvm/ADT/ilist.h</a>
-</div>
+</h4>
<div class="doc_text">
<p><tt>ilist<T></tt> implements an 'intrusive' doubly-linked list. It is
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_ilist_traits">ilist_traits</a>
-</div>
+</h4>
<div class="doc_text">
<p><tt>ilist_traits<T></tt> is <tt>ilist<T></tt>'s customization
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_iplist">iplist</a>
-</div>
+</h4>
<div class="doc_text">
<p><tt>iplist<T></tt> is <tt>ilist<T></tt>'s base and as such
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_ilist_node">llvm/ADT/ilist_node.h</a>
-</div>
+</h4>
<div class="doc_text">
<p><tt>ilist_node<T></tt> implements a the forward and backward links
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_ilist_sentinel">Sentinels</a>
-</div>
+</h4>
<div class="doc_text">
<p><tt>ilist</tt>s have another specialty that must be considered. To be a good
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_other">Other Sequential Container options</a>
-</div>
+</h4>
<div class="doc_text">
<p>Other STL containers are available, such as std::string.</p>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ds_set">Set-Like Containers (std::set, SmallSet, SetVector, etc)</a>
-</div>
+</h3>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_sortedvectorset">A sorted 'vector'</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_smallset">"llvm/ADT/SmallSet.h"</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_smallptrset">"llvm/ADT/SmallPtrSet.h"</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_denseset">"llvm/ADT/DenseSet.h"</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_FoldingSet">"llvm/ADT/FoldingSet.h"</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_set"><set></a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_setvector">"llvm/ADT/SetVector.h"</a>
-</div>
+</h4>
<div class="doc_text">
<p>LLVM's SetVector<Type> is an adapter class that combines your choice of
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_uniquevector">"llvm/ADT/UniqueVector.h"</a>
-</div>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_otherset">Other Set-Like Container Options</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ds_map">Map-Like Containers (std::map, DenseMap, etc)</a>
-</div>
+</h3>
<div class="doc_text">
Map-like containers are useful when you want to associate data to a key. As
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_sortedvectormap">A sorted 'vector'</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_stringmap">"llvm/ADT/StringMap.h"</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_indexedmap">"llvm/ADT/IndexedMap.h"</a>
-</div>
+</h4>
<div class="doc_text">
<p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_densemap">"llvm/ADT/DenseMap.h"</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_valuemap">"llvm/ADT/ValueMap.h"</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_intervalmap">"llvm/ADT/IntervalMap.h"</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_map"><map></a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_inteqclasses">"llvm/ADT/IntEqClasses.h"</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_othermap">Other Map-Like Container Options</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ds_string">String-like containers</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ds_bit">Bit storage containers (BitVector, SparseBitVector)</a>
-</div>
+</h3>
<div class="doc_text">
<p>Unlike the other containers, there are only two bit storage containers, and
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_bitvector">BitVector</a>
-</div>
+</h4>
<div class="doc_text">
<p> The BitVector container provides a dynamic size set of bits for manipulation.
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_smallbitvector">SmallBitVector</a>
-</div>
+</h4>
<div class="doc_text">
<p> The SmallBitVector container provides the same interface as BitVector, but
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="dss_sparsebitvector">SparseBitVector</a>
-</div>
+</h4>
<div class="doc_text">
<p> The SparseBitVector container is much like BitVector, with one major
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="common">Helpful Hints for Common Operations</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<!-- NOTE: this section should be heavy on example code -->
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="inspection">Basic Inspection and Traversal Routines</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="iterate_function">Iterating over the </a><a
href="#BasicBlock"><tt>BasicBlock</tt></a>s in a <a
href="#Function"><tt>Function</tt></a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="iterate_basicblock">Iterating over the </a><a
href="#Instruction"><tt>Instruction</tt></a>s in a <a
href="#BasicBlock"><tt>BasicBlock</tt></a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="iterate_institer">Iterating over the </a><a
href="#Instruction"><tt>Instruction</tt></a>s in a <a
href="#Function"><tt>Function</tt></a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="iterate_convert">Turning an iterator into a class pointer (and
vice-versa)</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!--_______________________________________________________________________-->
-<div class="doc_subsubsection">
+<h4>
<a name="iterate_complex">Finding call sites: a slightly more complex
example</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!--_______________________________________________________________________-->
-<div class="doc_subsubsection">
+<h4>
<a name="calls_and_invokes">Treating calls and invokes the same way</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!--_______________________________________________________________________-->
-<div class="doc_subsubsection">
+<h4>
<a name="iterate_chains">Iterating over def-use & use-def chains</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!--_______________________________________________________________________-->
-<div class="doc_subsubsection">
+<h4>
<a name="iterate_preds">Iterating over predecessors &
successors of blocks</a>
-</div>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="simplechanges">Making simple changes</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!--_______________________________________________________________________-->
-<div class="doc_subsubsection">
+<h4>
<a name="schanges_creating">Creating and inserting new
<tt>Instruction</tt>s</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!--_______________________________________________________________________-->
-<div class="doc_subsubsection">
+<h4>
<a name="schanges_deleting">Deleting <tt>Instruction</tt>s</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!--_______________________________________________________________________-->
-<div class="doc_subsubsection">
+<h4>
<a name="schanges_replacing">Replacing an <tt>Instruction</tt> with another
<tt>Value</tt></a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!--_______________________________________________________________________-->
-<div class="doc_subsubsection">
+<h4>
<a name="schanges_deletingGV">Deleting <tt>GlobalVariable</tt>s</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="create_types">How to Create Types</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="threading">Threads and LLVM</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="startmultithreaded">Entering and Exiting Multithreaded Mode</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="shutdown">Ending Execution with <tt>llvm_shutdown()</tt></a>
-</div>
+</h3>
<div class="doc_text">
<p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="managedstatic">Lazy Initialization with <tt>ManagedStatic</tt></a>
-</div>
+</h3>
<div class="doc_text">
<p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="llvmcontext">Achieving Isolation with <tt>LLVMContext</tt></a>
-</div>
+</h3>
<div class="doc_text">
<p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="jitthreading">Threads and the JIT</a>
-</div>
+</h3>
<div class="doc_text">
<p>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="advanced">Advanced Topics</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="TypeResolve">LLVM Type Resolution</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="BuildRecType">Basic Recursive Type Construction</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="refineAbstractTypeTo">The <tt>refineAbstractTypeTo</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
<p>
</div>
<!-- ______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="PATypeHolder">The PATypeHolder Class</a>
-</div>
+</h4>
<div class="doc_text">
<p>
</div>
<!-- ______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="AbstractTypeUser">The AbstractTypeUser Class</a>
-</div>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="SymbolTable">The <tt>ValueSymbolTable</tt> and
<tt>TypeSymbolTable</tt> classes</a>
-</div>
+</h3>
<div class="doc_text">
<p>The <tt><a href="http://llvm.org/doxygen/classllvm_1_1ValueSymbolTable.html">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="UserLayout">The <tt>User</tt> and owned <tt>Use</tt> classes' memory layout</a>
-</div>
+</h3>
<div class="doc_text">
<p>The <tt><a href="http://llvm.org/doxygen/classllvm_1_1User.html">
addition and removal.</p>
<!-- ______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="Use2User">Interaction and relationship between <tt>User</tt> and <tt>Use</tt> objects</a>
-</div>
+<h4>
+ <a name="Use2User">
+ Interaction and relationship between <tt>User</tt> and <tt>Use</tt> objects
+ </a>
+</h4>
<div class="doc_text">
<p>
is stored in each <tt>Use</tt> object in the member <tt>Use::Prev</tt>)</i>
<!-- ______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="Waymarking">The waymarking algorithm</a>
-</div>
+</h4>
<div class="doc_text">
<p>
1000 <tt>Use</tt> objects associated with a <tt>User</tt>.</p>
<!-- ______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="ReferenceImpl">Reference implementation</a>
-</div>
+</h4>
<div class="doc_text">
<p>
</pre>
<!-- ______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="Tagging">Tagging considerations</a>
-</div>
+</h4>
<p>
To maintain the invariant that the 2 LSBits of each <tt>Use**</tt> in <tt>Use</tt>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="coreclasses">The Core LLVM Class Hierarchy Reference </a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="Type">The <tt>Type</tt> class and Derived Types</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="m_Type">Important Public Methods</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="derivedtypes">Important Derived Types</a>
-</div>
+</h4>
<div class="doc_text">
<dl>
<dt><tt>IntegerType</tt></dt>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="Module">The <tt>Module</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="m_Module">Important Public Members of the <tt>Module</tt> class</a>
-</div>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="Value">The <tt>Value</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="m_Value">Important Public Members of the <tt>Value</tt> class</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="User">The <tt>User</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="m_User">Important Public Members of the <tt>User</tt> class</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="Instruction">The <tt>Instruction</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="s_Instruction">Important Subclasses of the <tt>Instruction</tt>
- class</a>
-</div>
+<h4>
+ <a name="s_Instruction">
+ Important Subclasses of the <tt>Instruction</tt> class
+ </a>
+</h4>
<div class="doc_text">
<ul>
<li><tt><a name="BinaryOperator">BinaryOperator</a></tt>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="m_Instruction">Important Public Members of the <tt>Instruction</tt>
- class</a>
-</div>
+<h4>
+ <a name="m_Instruction">
+ Important Public Members of the <tt>Instruction</tt> class
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="Constant">The <tt>Constant</tt> class and subclasses</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">Important Subclasses of Constant </div>
+<h4>Important Subclasses of Constant</h4>
<div class="doc_text">
<ul>
<li>ConstantInt : This subclass of Constant represents an integer constant of
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="GlobalValue">The <tt>GlobalValue</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="m_GlobalValue">Important Public Members of the <tt>GlobalValue</tt>
- class</a>
-</div>
+<h4>
+ <a name="m_GlobalValue">
+ Important Public Members of the <tt>GlobalValue</tt> class
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="Function">The <tt>Function</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="m_Function">Important Public Members of the <tt>Function</tt>
- class</a>
-</div>
+<h4>
+ <a name="m_Function">
+ Important Public Members of the <tt>Function</tt> class
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="GlobalVariable">The <tt>GlobalVariable</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="m_GlobalVariable">Important Public Members of the
- <tt>GlobalVariable</tt> class</a>
-</div>
+<h4>
+ <a name="m_GlobalVariable">
+ Important Public Members of the <tt>GlobalVariable</tt> class
+ </a>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="BasicBlock">The <tt>BasicBlock</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="m_BasicBlock">Important Public Members of the <tt>BasicBlock</tt>
- class</a>
-</div>
+<h4>
+ <a name="m_BasicBlock">
+ Important Public Members of the <tt>BasicBlock</tt> class
+ </a>
+</h4>
<div class="doc_text">
<ul>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="Argument">The <tt>Argument</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</head>
<body>
-<div class="doc_title">Creating an LLVM Project</div>
+<h1>Creating an LLVM Project</h1>
<ol>
<li><a href="#overview">Overview</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="overview">Overview</a></div>
+<h2><a name="overview">Overview</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="create">Create a Project from the Sample Project</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="source">Source Tree Layout</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="makefiles">Writing LLVM Style Makefiles</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="reqVars">Required Variables</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="varsBuildDir">Variables for Building Subdirectories</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="varsBuildLib">Variables for Building Libraries</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="varsBuildProg">Variables for Building Programs</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="miscVars">Miscellaneous Variables</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="objcode">Placement of Object Code</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="help">Further Help</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</head>
<body>
-<div class="doc_title">Source Level Debugging with LLVM</div>
+<h1>Source Level Debugging with LLVM</h1>
<table class="layout" style="width:100%">
<tr class="layout">
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="introduction">Introduction</a></div>
+<h2><a name="introduction">Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="phil">Philosophy behind LLVM debugging information</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="consumers">Debug information consumers</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="debugopt">Debugging optimized code</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="format">Debugging information format</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="debug_info_descriptors">Debug information descriptors</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_compile_units">Compile unit descriptors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_files">File descriptors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_global_variables">Global variable descriptors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_subprograms">Subprogram descriptors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_blocks">Block descriptors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_basic_type">Basic type descriptors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_derived_type">Derived type descriptors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_composite_type">Composite type descriptors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_subrange">Subrange descriptors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_enumeration">Enumerator descriptors</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_variables">Local variables</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="format_common_intrinsics">Debugger intrinsic functions</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_common_declare">llvm.dbg.declare</a>
-</div>
+</h4>
<div class="doc_text">
<pre>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="format_common_value">llvm.dbg.value</a>
-</div>
+</h4>
<div class="doc_text">
<pre>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="format_common_lifetime">Object lifetimes and scoping</a>
-</div>
+</h3>
<div class="doc_text">
<p>In many languages, the local variables in functions can have their lifetimes
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="ccxx_frontend">C/C++ front-end specific debug information</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_compile_units">C/C++ source file information</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_global_variable">C/C++ global variable information</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_subprogram">C/C++ function information</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_basic_types">C/C++ basic types</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_type_bool">bool</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_char">char</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_unsigned_char">unsigned char</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_short">short</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_unsigned_short">unsigned short</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_int">int</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_unsigned_int">unsigned int</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_long_long">long long</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_unsigned_long_long">unsigned long long</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_float">float</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection">
+<h4>
<a name="ccxx_basic_double">double</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_derived_types">C/C++ derived types</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_composite_types">C/C++ struct/union types</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ccxx_enumeration_types">C/C++ enumeration types</a>
-</div>
+</h3>
<div class="doc_text">
</head>
<body>
-<div class="doc_title">System Library</div>
+<h1>System Library</h1>
<ul>
<li><a href="#abstract">Abstract</a></li>
<li><a href="#requirements">Keeping LLVM Portable</a>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="abstract">Abstract</a></div>
+<h2><a name="abstract">Abstract</a></h2>
<div class="doc_text">
<p>This document provides some details on LLVM's System Library, located in
the source at <tt>lib/System</tt> and <tt>include/llvm/System</tt>. The
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="requirements">Keeping LLVM Portable</a>
-</div>
+</h2>
<div class="doc_text">
<p>In order to keep LLVM portable, LLVM developers should adhere to a set of
portability rules associated with the System Library. Adherence to these rules
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="headers">Don't Include System Headers</a>
-</div>
+<h3><a name="headers">Don't Include System Headers</a></h3>
<div class="doc_text">
<p>Except in <tt>lib/System</tt>, no LLVM source code should directly
<tt>#include</tt> a system header. Care has been taken to remove all such
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="expose">Don't Expose System Headers</a>
-</div>
+<h3><a name="expose">Don't Expose System Headers</a></h3>
<div class="doc_text">
<p>The System Library must shield LLVM from <em>all</em> system headers. To
obtain system level functionality, LLVM source must
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="c_headers">Use Standard C Headers</a></div>
+<h3><a name="c_headers">Use Standard C Headers</a></h3>
<div class="doc_text">
<p>The <em>standard</em> C headers (the ones beginning with "c") are allowed
to be exposed through the <tt>lib/System</tt> interface. These headers and
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="cpp_headers">Use Standard C++ Headers</a>
-</div>
+<h3><a name="cpp_headers">Use Standard C++ Headers</a></h3>
<div class="doc_text">
<p>The <em>standard</em> C++ headers from the standard C++ library and
standard template library may be exposed through the <tt>lib/System</tt>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="highlev">High Level Interface</a></div>
+<h3><a name="highlev">High Level Interface</a></h3>
<div class="doc_text">
<p>The entry points specified in the interface of lib/System must be aimed at
completing some reasonably high level task needed by LLVM. We do not want to
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="nounused">No Unused Functionality</a></div>
+<h3><a name="nounused">No Unused Functionality</a></h3>
<div class="doc_text">
<p>There must be no functionality specified in the interface of lib/System
that isn't actually used by LLVM. We're not writing a general purpose
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="nodupl">No Duplicate Implementations</a>
-</div>
+<h3><a name="nodupl">No Duplicate Implementations</a></h3>
<div class="doc_text">
<p>The implementation of a function for a given platform must be written
exactly once. This implies that it must be possible to apply a function's
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="virtuals">No Virtual Methods</a></div>
+<h3><a name="virtuals">No Virtual Methods</a></h3>
<div class="doc_text">
<p>The System Library interfaces can be called quite frequently by LLVM. In
order to make those calls as efficient as possible, we discourage the use of
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="nofunc">No Exposed Functions</a></div>
+<h3><a name="nofunc">No Exposed Functions</a></h3>
<div class="doc_text">
<p>Any functions defined by system libraries (i.e. not defined by lib/System)
must not be exposed through the lib/System interface, even if the header file
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="nodata">No Exposed Data</a></div>
+<h3><a name="nodata">No Exposed Data</a></h3>
<div class="doc_text">
<p>Any data defined by system libraries (i.e. not defined by lib/System) must
not be exposed through the lib/System interface, even if the header file for
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="softerrors">Minimize Soft Errors</a></div>
+<h3><a name="softerrors">Minimize Soft Errors</a></h3>
<div class="doc_text">
<p>Operating system interfaces will generally provide error results for every
little thing that could go wrong. In almost all cases, you can divide these
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="throw_spec">No throw Specifications</a>
-</div>
+<h3><a name="throw_spec">No throw Specifications</a></h3>
<div class="doc_text">
<p>None of the lib/System interface functions may be declared with C++
<tt>throw()</tt> specifications on them. This requirement makes sure that the
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="organization">Code Organization</a></div>
+<h3><a name="organization">Code Organization</a></h3>
<div class="doc_text">
<p>Implementations of the System Library interface are separated by their
general class of operating system. Currently only Unix and Win32 classes are
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="semantics">Consistent Semantics</a></div>
+<h3><a name="semantics">Consistent Semantics</a></h3>
<div class="doc_text">
<p>The implementation of a lib/System interface can vary drastically between
platforms. That's okay as long as the end result of the interface function
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="bug">Bug 351</a></div>
+<h3><a name="bug">Bug 351</a></h3>
<div class="doc_text">
<p>See <a href="http://llvm.org/PR351">bug 351</a>
for further details on the progress of this work</p>
</head>
<body>
-<div class="doc_title">TableGen Fundamentals</div>
+<h1>TableGen Fundamentals</h1>
<div class="doc_text">
<ul>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="introduction">Introduction</a></div>
+<h2><a name="introduction">Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="concepts">Basic concepts</a></div>
+<h3><a name="concepts">Basic concepts</a></h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="example">An example record</a></div>
+<h3><a name="example">An example record</a></h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="running">Running TableGen</a></div>
+<h3><a name="running">Running TableGen</a></h3>
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="syntax">TableGen syntax</a></div>
+<h2><a name="syntax">TableGen syntax</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="primitives">TableGen primitives</a></div>
+<h3><a name="primitives">TableGen primitives</a></h3>
<!-- -------------------------------------------------------------------------->
-<div class="doc_subsubsection"><a name="comments">TableGen comments</a></div>
+<h4><a name="comments">TableGen comments</a></h4>
<div class="doc_text">
</div>
<!-- -------------------------------------------------------------------------->
-<div class="doc_subsubsection">
+<h4>
<a name="types">The TableGen type system</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- -------------------------------------------------------------------------->
-<div class="doc_subsubsection">
+<h4>
<a name="values">TableGen values and expressions</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="classesdefs">Classes and definitions</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!---------------------------------------------------------------------------->
-<div class="doc_subsubsection">
+<h4>
<a name="valuedef">Value definitions</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- -------------------------------------------------------------------------->
-<div class="doc_subsubsection">
+<h4>
<a name="recordlet">'let' expressions</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- -------------------------------------------------------------------------->
-<div class="doc_subsubsection">
+<h4>
<a name="templateargs">Class template arguments</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- -------------------------------------------------------------------------->
-<div class="doc_subsubsection">
+<h4>
<a name="multiclass">Multiclass definitions and instances</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="filescope">File scope entities</a>
-</div>
+</h3>
<!-- -------------------------------------------------------------------------->
-<div class="doc_subsubsection">
+<h4>
<a name="include">File inclusion</a>
-</div>
+</h4>
<div class="doc_text">
<p>TableGen supports the '<tt>include</tt>' token, which textually substitutes
</div>
<!-- -------------------------------------------------------------------------->
-<div class="doc_subsubsection">
+<h4>
<a name="globallet">'let' expressions</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="codegen">Code Generator backend info</a></div>
+<h2><a name="codegen">Code Generator backend info</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="backends">TableGen backends</a></div>
+<h2><a name="backends">TableGen backends</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
LLVM Testing Infrastructure Guide
-</div>
+</h1>
<ol>
<li><a href="#overview">Overview</a></li>
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="overview">Overview</a></div>
+<h2><a name="overview">Overview</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="requirements">Requirements</a></div>
+<h2><a name="requirements">Requirements</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="org">LLVM testing infrastructure organization</a></div>
+<h2><a name="org">LLVM testing infrastructure organization</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="regressiontests">Regression tests</a></div>
+<h3><a name="regressiontests">Regression tests</a></h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="testsuite">Test suite</a></div>
+<h3><a name="testsuite">Test suite</a></h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="debuginfotests">Debugging Information
-tests</a></div>
+<h3><a name="debuginfotests">Debugging Information tests</a></h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="quick">Quick start</a></div>
+<h2><a name="quick">Quick start</a></h2>
<!--=========================================================================-->
<div class="doc_text">
Alternatively, you can configure the <tt>test-suite</tt> module manually.</p>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="quickregressiontests">Regression tests</a></div>
+<h3><a name="quickregressiontests">Regression tests</a></h3>
<!-- _______________________________________________________________________ -->
<p>To run all of the LLVM regression tests, use master Makefile in
the <tt>llvm/test</tt> directory:</p>
'lit' man page.</p>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="quicktestsuite">Test suite</a></div>
+<h3><a name="quicktestsuite">Test suite</a></h3>
<!-- _______________________________________________________________________ -->
<p>To run the comprehensive test suite (tests that compile and execute whole
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="quickdebuginfotests">Debugging Information
-tests</a></div>
+<h3><a name="quickdebuginfotests">Debugging Information tests</a></h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="rtstructure">Regression test structure</a></div>
+<h2><a name="rtstructure">Regression test structure</a></h2>
<!--=========================================================================-->
<div class="doc_text">
<p>The LLVM regression tests are driven by 'lit' and are located in
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="rtcustom">Writing new regression tests</a></div>
+<h3><a name="rtcustom">Writing new regression tests</a></h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
<p>The regression test structure is very simple, but does require some
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="FileCheck">The FileCheck utility</a></div>
+<h3><a name="FileCheck">The FileCheck utility</a></h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a
-name="FileCheck-check-prefix">The FileCheck -check-prefix option</a></div>
+<h4>
+ <a name="FileCheck-check-prefix">The FileCheck -check-prefix option</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a
-name="FileCheck-CHECK-NEXT">The "CHECK-NEXT:" directive</a></div>
+<h4>
+ <a name="FileCheck-CHECK-NEXT">The "CHECK-NEXT:" directive</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a
-name="FileCheck-CHECK-NOT">The "CHECK-NOT:" directive</a></div>
+<h4>
+ <a name="FileCheck-CHECK-NOT">The "CHECK-NOT:" directive</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a
-name="FileCheck-Matching">FileCheck Pattern Matching Syntax</a></div>
+<h4>
+ <a name="FileCheck-Matching">FileCheck Pattern Matching Syntax</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"><a
-name="FileCheck-Variables">FileCheck Variables</a></div>
+<h4>
+ <a name="FileCheck-Variables">FileCheck Variables</a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="rtvars">Variables and
-substitutions</a></div>
+<h3><a name="rtvars">Variables and substitutions</a></h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
<p>With a RUN line there are a number of substitutions that are permitted. In
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection"><a name="rtfeatures">Other Features</a></div>
+<h3><a name="rtfeatures">Other Features</a></h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
<p>To make RUN line writing easier, there are several shell scripts located
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="testsuitestructure">Test suite
-Structure</a></div>
+<h2><a name="testsuitestructure">Test suite Structure</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!--=========================================================================-->
-<div class="doc_section"><a name="testsuiterun">Running the test suite</a></div>
+<h2><a name="testsuiterun">Running the test suite</a></h2>
<!--=========================================================================-->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection">
-<a name="testsuiteexternal">Configuring External Tests</a></div>
+<h3>
+ <a name="testsuiteexternal">Configuring External Tests</a>
+</h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection">
-<a name="testsuitetests">Running different tests</a></div>
+<h3>
+ <a name="testsuitetests">Running different tests</a>
+</h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
<p>In addition to the regular "whole program" tests, the <tt>test-suite</tt>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection">
-<a name="testsuiteoutput">Generating test output</a></div>
+<h3>
+ <a name="testsuiteoutput">Generating test output</a>
+</h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
<p>There are a number of ways to run the tests and generate output. The most
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection">
-<a name="testsuitecustom">Writing custom tests for the test suite</a></div>
+<h3>
+ <a name="testsuitecustom">Writing custom tests for the test suite</a>
+</h3>
<!-- _______________________________________________________________________ -->
<div class="doc_text">
<link rel="stylesheet" href="llvm.css" type="text/css">
</head>
<body>
-<div class="doc_title">Using The LLVM Libraries</div>
+<h1>Using The LLVM Libraries</h1>
<ol>
<li><a href="#abstract">Abstract</a></li>
<li><a href="#introduction">Introduction</a></li>
guide</a>.</p>
<!-- ======================================================================= -->
-<div class="doc_section"><a name="abstract">Abstract</a></div>
+<h2><a name="abstract">Abstract</a></h2>
<div class="doc_text">
<p>Amongst other things, LLVM is a toolkit for building compilers, linkers,
runtime executives, virtual machines, and other program execution related
</div>
<!-- ======================================================================= -->
-<div class="doc_section"> <a name="introduction">Introduction</a></div>
+<h2><a name="introduction">Introduction</a></h2>
<div class="doc_text">
<p>If you're writing a compiler, virtual machine, or any other utility based
on LLVM, you'll need to figure out which of the many libraries files you will
correct for your tool can sometimes be challenging.
</div>
<!-- ======================================================================= -->
-<div class="doc_section"><a name="descriptions"></a>Library Descriptions</div>
+<h2><a name="descriptions">Library Descriptions</a></h2>
<div class="doc_text">
<p>The table below categorizes each library
<table style="text-align:left">
</div>
<!-- ======================================================================= -->
-<div class="doc_section"><a name="dependencies"></a>Using llvm-config</div>
+<h2><a name="dependencies">Using llvm-config</a></h2>
<div class="doc_text">
<p>The <tt>llvm-config</tt> tool is a perl script that produces on its output
various kinds of information. For example, the source or object directories
</div>
<!-- ======================================================================= -->
-<div class="doc_section"><a name="rot">Linkage Rules Of Thumb</a></div>
+<h2><a name="rot">Linkage Rules Of Thumb</a></h2>
<div class="doc_text">
<p>This section contains various "rules of thumb" about what files you
should link into your programs.</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="always">Always Link LLVMCore, LLVMSupport,
- and LLVMSystem</a></div>
+<h3>
+ <a name="always">Always Link LLVMCore, LLVMSupport, and LLVMSystem</a>
+</h3>
<div class="doc_text">
<p>No matter what you do with LLVM, the last three entries in the value of
your LLVMLIBS make variable should always be:
programs that don't depend on these three.</p>
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection"><a name="onlyone">Never link both archive and
- re-linked library</a></div>
+<h3>
+ <a name="onlyone">Never link both archive and re-linked library</a>
+</h3>
<div class="doc_text">
<p>There is never any point to linking both the re-linked (<tt>.o</tt>) and
the archive (<tt>.a</tt>) versions of a library. Since the re-linked version
<body>
-<div class="doc_title">
+<h1>
Writing an LLVM Compiler Backend
-</div>
+</h1>
<ol>
<li><a href="#intro">Introduction</a>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="intro">Introduction</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
-<div class="doc_subsection">
+<h3>
<a name="Audience">Audience</a>
-</div>
+</h3>
<div class="doc_text">
</div>
-<div class="doc_subsection">
+<h3>
<a name="Prerequisite">Prerequisite Reading</a>
-</div>
+</h3>
<div class="doc_text">
</div>
-<div class="doc_subsection">
+<h3>
<a name="Basic">Basic Steps</a>
-</div>
+</h3>
<div class="doc_text">
</div>
-<div class="doc_subsection">
+<h3>
<a name="Preliminaries">Preliminaries</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="TargetMachine">Target Machine</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="TargetRegistration">Target Registration</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="RegisterSet">Register Set and Register Classes</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="RegisterDef">Defining a Register</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="RegisterClassDef">Defining a Register Class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="implementRegister">Implement a subclass of</a>
<a href="CodeGenerator.html#targetregisterinfo">TargetRegisterInfo</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="InstructionSet">Instruction Set</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="operandMapping">Instruction Operand Mapping</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="implementInstr">Implement a subclass of </a>
<a href="CodeGenerator.html#targetinstrinfo">TargetInstrInfo</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="branchFolding">Branch Folding and If Conversion</a>
-</div>
+</h3>
<div class="doc_text">
<p>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="InstructionSelector">Instruction Selector</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="LegalizePhase">The SelectionDAG Legalize Phase</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="promote">Promote</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="expand">Expand</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="custom">Custom</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="legal">Legal</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="callingConventions">Calling Conventions</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="assemblyPrinter">Assembly Printer</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="subtargetSupport">Subtarget Support</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="jitSupport">JIT Support</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="mce">Machine Code Emitter</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="targetJITInfo">Target JIT Info</a>
-</div>
+</h3>
<div class="doc_text">
</head>
<body>
-<div class="doc_title">
+<h1>
Writing an LLVM Pass
-</div>
+</h1>
<ol>
<li><a href="#introduction">Introduction - What is a pass?</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="introduction">Introduction - What is a pass?</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="quickstart">Quick Start - Writing hello world</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="makefile">Setting up the build environment</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="basiccode">Basic code required</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="running">Running a pass with <tt>opt</tt></a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="passtype">Pass classes and requirements</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ImmutablePass">The <tt>ImmutablePass</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="ModulePass">The <tt>ModulePass</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="runOnModule">The <tt>runOnModule</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="CallGraphSCCPass">The <tt>CallGraphSCCPass</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="doInitialization_scc">The <tt>doInitialization(CallGraph &)</tt>
- method</a>
-</div>
+<h4>
+ <a name="doInitialization_scc">
+ The <tt>doInitialization(CallGraph &)</tt> method
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="runOnSCC">The <tt>runOnSCC</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="doFinalization_scc">The <tt>doFinalization(CallGraph
- &)</tt> method</a>
-</div>
+<h4>
+ <a name="doFinalization_scc">
+ The <tt>doFinalization(CallGraph &)</tt> method
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="FunctionPass">The <tt>FunctionPass</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="doInitialization_mod">The <tt>doInitialization(Module &)</tt>
- method</a>
-</div>
+<h4>
+ <a name="doInitialization_mod">
+ The <tt>doInitialization(Module &)</tt> method
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="runOnFunction">The <tt>runOnFunction</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="doFinalization_mod">The <tt>doFinalization(Module
- &)</tt> method</a>
-</div>
+<h4>
+ <a name="doFinalization_mod">
+ The <tt>doFinalization(Module &)</tt> method
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="LoopPass">The <tt>LoopPass</tt> class </a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="doInitialization_loop">The <tt>doInitialization(Loop *,
- LPPassManager &)</tt>
- method</a>
-</div>
+<h4>
+ <a name="doInitialization_loop">
+ The <tt>doInitialization(Loop *,LPPassManager &)</tt> method
+ </a>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="runOnLoop">The <tt>runOnLoop</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="doFinalization_loop">The <tt>doFinalization()</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="RegionPass">The <tt>RegionPass</tt> class </a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="doInitialization_region">The <tt>doInitialization(Region *,
- RGPassManager &)</tt>
- method</a>
-</div>
+<h4>
+ <a name="doInitialization_region">
+ The <tt>doInitialization(Region *, RGPassManager &)</tt> method
+ </a>
+</h4>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="runOnRegion">The <tt>runOnRegion</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="doFinalization_region">The <tt>doFinalization()</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="BasicBlockPass">The <tt>BasicBlockPass</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="doInitialization_fn">The <tt>doInitialization(Function
- &)</tt> method</a>
-</div>
+<h4>
+ <a name="doInitialization_fn">
+ The <tt>doInitialization(Function &)</tt> method
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="runOnBasicBlock">The <tt>runOnBasicBlock</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="doFinalization_fn">The <tt>doFinalization(Function &)</tt>
- method</a>
-</div>
+<h4>
+ <a name="doFinalization_fn">
+ The <tt>doFinalization(Function &)</tt> method
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsection">
+<h3>
<a name="MachineFunctionPass">The <tt>MachineFunctionPass</tt> class</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="runOnMachineFunction">The <tt>runOnMachineFunction(MachineFunction
- &MF)</tt> method</a>
-</div>
+<h4>
+ <a name="runOnMachineFunction">
+ The <tt>runOnMachineFunction(MachineFunction &MF)</tt> method
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="registration">Pass registration</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="print">The <tt>print</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="interaction">Specifying interactions between passes</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="getAnalysisUsage">The <tt>getAnalysisUsage</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="AU::addRequired">The <tt>AnalysisUsage::addRequired<></tt> and <tt>AnalysisUsage::addRequiredTransitive<></tt> methods</a>
-</div>
+<h4>
+ <a name="AU::addRequired">
+ The <tt>AnalysisUsage::addRequired<></tt>
+ and <tt>AnalysisUsage::addRequiredTransitive<></tt> methods
+ </a>
+</h4>
<div class="doc_text">
<p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="AU::addPreserved">The <tt>AnalysisUsage::addPreserved<></tt> method</a>
-</div>
+<h4>
+ <a name="AU::addPreserved">
+ The <tt>AnalysisUsage::addPreserved<></tt> method
+ </a>
+</h4>
<div class="doc_text">
<p>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="AU::examples">Example implementations of <tt>getAnalysisUsage</tt></a>
-</div>
+<h4>
+ <a name="AU::examples">
+ Example implementations of <tt>getAnalysisUsage</tt>
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
- <a name="getAnalysis">The <tt>getAnalysis<></tt> and
-<tt>getAnalysisIfAvailable<></tt> methods</a>
-</div>
+<h4>
+ <a name="getAnalysis">
+ The <tt>getAnalysis<></tt> and
+ <tt>getAnalysisIfAvailable<></tt> methods
+ </a>
+</h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="analysisgroup">Implementing Analysis Groups</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="agconcepts">Analysis Group Concepts</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="registerag">Using <tt>RegisterAnalysisGroup</tt></a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="passStatistics">Pass Statistics</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="passmanager">What PassManager does</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="releaseMemory">The <tt>releaseMemory</tt> method</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="registering">Registering dynamically loaded passes</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection">
+<h3>
<a name="registering_existing">Using existing registries</a>
-</div>
+</h3>
<div class="doc_text">
<!-- _______________________________________________________________________ -->
-<div class="doc_subsection">
+<h3>
<a name="registering_new">Creating new registries</a>
-</div>
+</h3>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="debughints">Using GDB with dynamically loaded passes</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="breakpoint">Setting a breakpoint in your pass</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="debugmisc">Miscellaneous Problems</a>
-</div>
+</h4>
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section">
+<h2>
<a name="future">Future extensions planned</a>
-</div>
+</h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">
+<h4>
<a name="SMP">Multithreaded LLVM</a>
-</div>
+</h4>
<div class="doc_text">
</head>
<body>
-<div class="doc_title">Documentation for the LLVM System at SVN head</div>
+<h1>Documentation for the LLVM System at SVN head</h1>
<p class="doc_warning">If you are using a released version of LLVM,
see <a href="http://llvm.org/releases/">the download page</a> to find
</div>
<!--=======================================================================-->
-<div class="doc_section"><a name="llvmdesign">LLVM Design & Overview</a></div>
+<h2><a name="llvmdesign">LLVM Design & Overview</a></h2>
<!--=======================================================================-->
<ul>
</ul>
<!--=======================================================================-->
-<div class="doc_section"><a name="userguide">LLVM User Guides</a></div>
+<h2><a name="userguide">LLVM User Guides</a></h2>
<!--=======================================================================-->
<ul>
<!--=======================================================================-->
-<div class="doc_section"><a name="llvmprog">General LLVM Programming Documentation</a></div>
+<h2><a name="llvmprog">General LLVM Programming Documentation</a></h2>
<!--=======================================================================-->
<ul>
</ul>
<!--=======================================================================-->
-<div class="doc_section"><a name="subsystems">LLVM Subsystem Documentation</a></div>
+<h2><a name="subsystems">LLVM Subsystem Documentation</a></h2>
<!--=======================================================================-->
<ul>
<!--=======================================================================-->
-<div class="doc_section"><a name="maillist">LLVM Mailing Lists</a></div>
+<h2><a name="maillist">LLVM Mailing Lists</a></h2>
<!--=======================================================================-->
<ul>
<body>
-<div class="doc_title">Kaleidoscope: Tutorial Introduction and the Lexer</div>
+<h1>Kaleidoscope: Tutorial Introduction and the Lexer</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Tutorial Introduction</a></div>
+<h2><a name="intro">Tutorial Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="language">The Basic Language</a></div>
+<h2><a name="language">The Basic Language</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="lexer">The Lexer</a></div>
+<h2><a name="lexer">The Lexer</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Implementing a Parser and AST</div>
+<h1>Kaleidoscope: Implementing a Parser and AST</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 2 Introduction</a></div>
+<h2><a name="intro">Chapter 2 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="ast">The Abstract Syntax Tree (AST)</a></div>
+<h2><a name="ast">The Abstract Syntax Tree (AST)</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="parserbasics">Parser Basics</a></div>
+<h2><a name="parserbasics">Parser Basics</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="parserprimexprs">Basic Expression
- Parsing</a></div>
+<h2><a name="parserprimexprs">Basic Expression Parsing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="parserbinops">Binary Expression
- Parsing</a></div>
+<h2><a name="parserbinops">Binary Expression Parsing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="parsertop">Parsing the Rest</a></div>
+<h2><a name="parsertop">Parsing the Rest</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="driver">The Driver</a></div>
+<h2><a name="driver">The Driver</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="conclusions">Conclusions</a></div>
+<h2><a name="conclusions">Conclusions</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Code generation to LLVM IR</div>
+<h1>Kaleidoscope: Code generation to LLVM IR</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 3 Introduction</a></div>
+<h2><a name="intro">Chapter 3 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="basics">Code Generation Setup</a></div>
+<h2><a name="basics">Code Generation Setup</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="exprs">Expression Code Generation</a></div>
+<h2><a name="exprs">Expression Code Generation</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="funcs">Function Code Generation</a></div>
+<h2><a name="funcs">Function Code Generation</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="driver">Driver Changes and
-Closing Thoughts</a></div>
+<h2><a name="driver">Driver Changes and Closing Thoughts</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Adding JIT and Optimizer Support</div>
+<h1>Kaleidoscope: Adding JIT and Optimizer Support</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 4 Introduction</a></div>
+<h2><a name="intro">Chapter 4 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="trivialconstfold">Trivial Constant
-Folding</a></div>
+<h2><a name="trivialconstfold">Trivial Constant Folding</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="optimizerpasses">LLVM Optimization
- Passes</a></div>
+<h2><a name="optimizerpasses">LLVM Optimization Passes</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="jit">Adding a JIT Compiler</a></div>
+<h2><a name="jit">Adding a JIT Compiler</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Extending the Language: Control Flow</div>
+<h1>Kaleidoscope: Extending the Language: Control Flow</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 5 Introduction</a></div>
+<h2><a name="intro">Chapter 5 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="ifthen">If/Then/Else</a></div>
+<h2><a name="ifthen">If/Then/Else</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="iflexer">Lexer Extensions for
-If/Then/Else</a></div>
+<h4><a name="iflexer">Lexer Extensions for If/Then/Else</a></h4>
<!-- ======================================================================= -->
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="ifast">AST Extensions for
- If/Then/Else</a></div>
+<h4><a name="ifast">AST Extensions for If/Then/Else</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="ifparser">Parser Extensions for
-If/Then/Else</a></div>
+<h4><a name="ifparser">Parser Extensions for If/Then/Else</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="ifir">LLVM IR for If/Then/Else</a></div>
+<h4><a name="ifir">LLVM IR for If/Then/Else</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="ifcodegen">Code Generation for
-If/Then/Else</a></div>
+<h4><a name="ifcodegen">Code Generation for If/Then/Else</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="for">'for' Loop Expression</a></div>
+<h2><a name="for">'for' Loop Expression</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="forlexer">Lexer Extensions for
-the 'for' Loop</a></div>
+<h4><a name="forlexer">Lexer Extensions for the 'for' Loop</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="forast">AST Extensions for
-the 'for' Loop</a></div>
+<h4><a name="forast">AST Extensions for the 'for' Loop</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="forparser">Parser Extensions for
-the 'for' Loop</a></div>
+<h4><a name="forparser">Parser Extensions for the 'for' Loop</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="forir">LLVM IR for
-the 'for' Loop</a></div>
+<h4><a name="forir">LLVM IR for the 'for' Loop</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="forcodegen">Code Generation for
-the 'for' Loop</a></div>
+<h4><a name="forcodegen">Code Generation for the 'for' Loop</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Extending the Language: User-defined Operators</div>
+<h1>Kaleidoscope: Extending the Language: User-defined Operators</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 6 Introduction</a></div>
+<h2><a name="intro">Chapter 6 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="idea">User-defined Operators: the Idea</a></div>
+<h2><a name="idea">User-defined Operators: the Idea</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="binary">User-defined Binary Operators</a></div>
+<h2><a name="binary">User-defined Binary Operators</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="unary">User-defined Unary Operators</a></div>
+<h2><a name="unary">User-defined Unary Operators</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="example">Kicking the Tires</a></div>
+<h2><a name="example">Kicking the Tires</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Extending the Language: Mutable Variables</div>
+<h1>Kaleidoscope: Extending the Language: Mutable Variables</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 7 Introduction</a></div>
+<h2><a name="intro">Chapter 7 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="why">Why is this a hard problem?</a></div>
+<h2><a name="why">Why is this a hard problem?</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="memory">Memory in LLVM</a></div>
+<h2><a name="memory">Memory in LLVM</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="kalvars">Mutable Variables in
-Kaleidoscope</a></div>
+<h2><a name="kalvars">Mutable Variables in Kaleidoscope</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="adjustments">Adjusting Existing Variables for
-Mutation</a></div>
+<h2><a name="adjustments">Adjusting Existing Variables for Mutation</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="assignment">New Assignment Operator</a></div>
+<h2><a name="assignment">New Assignment Operator</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="localvars">User-defined Local
-Variables</a></div>
+<h2><a name="localvars">User-defined Local Variables</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Conclusion and other useful LLVM
- tidbits</div>
+<h1>Kaleidoscope: Conclusion and other useful LLVM tidbits</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="conclusion">Tutorial Conclusion</a></div>
+<h2><a name="conclusion">Tutorial Conclusion</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="llvmirproperties">Properties of the LLVM
-IR</a></div>
+<h2><a name="llvmirproperties">Properties of the LLVM IR</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="targetindep">Target
-Independence</a></div>
+<h4><a name="targetindep">Target Independence</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="safety">Safety Guarantees</a></div>
+<h4><a name="safety">Safety Guarantees</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="langspecific">Language-Specific
-Optimizations</a></div>
+<h4><a name="langspecific">Language-Specific Optimizations</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="tipsandtricks">Tips and Tricks</a></div>
+<h2><a name="tipsandtricks">Tips and Tricks</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="offsetofsizeof">Implementing portable
-offsetof/sizeof</a></div>
+<h4><a name="offsetofsizeof">Implementing portable offsetof/sizeof</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="gcstack">Garbage Collected
-Stack Frames</a></div>
+<h4><a name="gcstack">Garbage Collected Stack Frames</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Tutorial Introduction and the Lexer</div>
+<h1>Kaleidoscope: Tutorial Introduction and the Lexer</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Tutorial Introduction</a></div>
+<h2><a name="intro">Tutorial Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="language">The Basic Language</a></div>
+<h2><a name="language">The Basic Language</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="lexer">The Lexer</a></div>
+<h2><a name="lexer">The Lexer</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Implementing a Parser and AST</div>
+<h1>Kaleidoscope: Implementing a Parser and AST</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 2 Introduction</a></div>
+<h2><a name="intro">Chapter 2 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="ast">The Abstract Syntax Tree (AST)</a></div>
+<h2><a name="ast">The Abstract Syntax Tree (AST)</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="parserbasics">Parser Basics</a></div>
+<h2><a name="parserbasics">Parser Basics</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="parserprimexprs">Basic Expression
- Parsing</a></div>
+<h2><a name="parserprimexprs">Basic Expression Parsing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="parserbinops">Binary Expression
- Parsing</a></div>
+<h2><a name="parserbinops">Binary Expression Parsing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="parsertop">Parsing the Rest</a></div>
+<h2><a name="parsertop">Parsing the Rest</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="driver">The Driver</a></div>
+<h2><a name="driver">The Driver</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="conclusions">Conclusions</a></div>
+<h2><a name="conclusions">Conclusions</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Code generation to LLVM IR</div>
+<h1>Kaleidoscope: Code generation to LLVM IR</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 3 Introduction</a></div>
+<h2><a name="intro">Chapter 3 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="basics">Code Generation Setup</a></div>
+<h2><a name="basics">Code Generation Setup</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="exprs">Expression Code Generation</a></div>
+<h2><a name="exprs">Expression Code Generation</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="funcs">Function Code Generation</a></div>
+<h2><a name="funcs">Function Code Generation</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="driver">Driver Changes and
-Closing Thoughts</a></div>
+<h2><a name="driver">Driver Changes and Closing Thoughts</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Adding JIT and Optimizer Support</div>
+<h1>Kaleidoscope: Adding JIT and Optimizer Support</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 4 Introduction</a></div>
+<h2><a name="intro">Chapter 4 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="trivialconstfold">Trivial Constant
-Folding</a></div>
+<h2><a name="trivialconstfold">Trivial Constant Folding</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="optimizerpasses">LLVM Optimization
- Passes</a></div>
+<h2><a name="optimizerpasses">LLVM Optimization Passes</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="jit">Adding a JIT Compiler</a></div>
+<h2><a name="jit">Adding a JIT Compiler</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Extending the Language: Control Flow</div>
+<h1>Kaleidoscope: Extending the Language: Control Flow</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 5 Introduction</a></div>
+<h2><a name="intro">Chapter 5 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="ifthen">If/Then/Else</a></div>
+<h2><a name="ifthen">If/Then/Else</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="iflexer">Lexer Extensions for
-If/Then/Else</a></div>
+<h4><a name="iflexer">Lexer Extensions for If/Then/Else</a></h4>
<!-- ======================================================================= -->
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="ifast">AST Extensions for
- If/Then/Else</a></div>
+<h4><a name="ifast">AST Extensions for If/Then/Else</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="ifparser">Parser Extensions for
-If/Then/Else</a></div>
+<h4><a name="ifparser">Parser Extensions for If/Then/Else</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="ifir">LLVM IR for If/Then/Else</a></div>
+<h4><a name="ifir">LLVM IR for If/Then/Else</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="ifcodegen">Code Generation for
-If/Then/Else</a></div>
+<h4><a name="ifcodegen">Code Generation for If/Then/Else</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="for">'for' Loop Expression</a></div>
+<h2><a name="for">'for' Loop Expression</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="forlexer">Lexer Extensions for
-the 'for' Loop</a></div>
+<h4><a name="forlexer">Lexer Extensions for the 'for' Loop</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="forast">AST Extensions for
-the 'for' Loop</a></div>
+<h4><a name="forast">AST Extensions for the 'for' Loop</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="forparser">Parser Extensions for
-the 'for' Loop</a></div>
+<h4><a name="forparser">Parser Extensions for the 'for' Loop</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="forir">LLVM IR for
-the 'for' Loop</a></div>
+<h4><a name="forir">LLVM IR for the 'for' Loop</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="forcodegen">Code Generation for
-the 'for' Loop</a></div>
+<h4><a name="forcodegen">Code Generation for the 'for' Loop</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Extending the Language: User-defined Operators</div>
+<h1>Kaleidoscope: Extending the Language: User-defined Operators</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 6 Introduction</a></div>
+<h2><a name="intro">Chapter 6 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="idea">User-defined Operators: the Idea</a></div>
+<h2><a name="idea">User-defined Operators: the Idea</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="binary">User-defined Binary Operators</a></div>
+<h2><a name="binary">User-defined Binary Operators</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="unary">User-defined Unary Operators</a></div>
+<h2><a name="unary">User-defined Unary Operators</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="example">Kicking the Tires</a></div>
+<h2><a name="example">Kicking the Tires</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Extending the Language: Mutable Variables</div>
+<h1>Kaleidoscope: Extending the Language: Mutable Variables</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="intro">Chapter 7 Introduction</a></div>
+<h2><a name="intro">Chapter 7 Introduction</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="why">Why is this a hard problem?</a></div>
+<h2><a name="why">Why is this a hard problem?</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="memory">Memory in LLVM</a></div>
+<h2><a name="memory">Memory in LLVM</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="kalvars">Mutable Variables in
-Kaleidoscope</a></div>
+<h2><a name="kalvars">Mutable Variables in Kaleidoscope</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="adjustments">Adjusting Existing Variables for
-Mutation</a></div>
+<h2><a name="adjustments">Adjusting Existing Variables for Mutation</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="assignment">New Assignment Operator</a></div>
+<h2><a name="assignment">New Assignment Operator</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="localvars">User-defined Local
-Variables</a></div>
+<h2><a name="localvars">User-defined Local Variables</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="code">Full Code Listing</a></div>
+<h2><a name="code">Full Code Listing</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
<body>
-<div class="doc_title">Kaleidoscope: Conclusion and other useful LLVM
- tidbits</div>
+<h1>Kaleidoscope: Conclusion and other useful LLVM tidbits</h1>
<ul>
<li><a href="index.html">Up to Tutorial Index</a></li>
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="conclusion">Tutorial Conclusion</a></div>
+<h2><a name="conclusion">Tutorial Conclusion</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="llvmirproperties">Properties of the LLVM
-IR</a></div>
+<h2><a name="llvmirproperties">Properties of the LLVM IR</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="targetindep">Target
-Independence</a></div>
+<h4><a name="targetindep">Target Independence</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="safety">Safety Guarantees</a></div>
+<h4><a name="safety">Safety Guarantees</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="langspecific">Language-Specific
-Optimizations</a></div>
+<h4><a name="langspecific">Language-Specific Optimizations</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- *********************************************************************** -->
-<div class="doc_section"><a name="tipsandtricks">Tips and Tricks</a></div>
+<h2><a name="tipsandtricks">Tips and Tricks</a></h2>
<!-- *********************************************************************** -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="offsetofsizeof">Implementing portable
-offsetof/sizeof</a></div>
+<h4><a name="offsetofsizeof">Implementing portable offsetof/sizeof</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
</div>
<!-- ======================================================================= -->
-<div class="doc_subsubsection"><a name="gcstack">Garbage Collected
-Stack Frames</a></div>
+<h4><a name="gcstack">Garbage Collected Stack Frames</a></h4>
<!-- ======================================================================= -->
<div class="doc_text">
<body>
-<div class="doc_title"> LLVM Tutorial: Table of Contents </div>
+<h1>LLVM Tutorial: Table of Contents</h1>
<ol>
<li>Kaleidoscope: Implementing a Language with LLVM