<!-- _______________________________________________________________________ -->
<div class="doc_subsubsection"><a name="format">Format Information</a></div>
<div class="doc_text">
-<p>The format information field is encoded into a <a href="#uint32_vbr">uint32_vbr</a>
-as shown in the following table.</p>
-<table>
- <tbody>
- <tr>
- <th><b>Type</b></th>
- <th class="td_left"><b>Description</b></th>
- </tr>
- <tr>
- <td><a href="#bit">bit(0)</a></td>
- <td class="td_left">Target is big endian?</td>
- </tr>
- <tr>
- <td><a href="#bit">bit(1)</a></td>
- <td class="td_left">On target pointers are 64-bit?</td>
- </tr>
- <tr>
- <td><a href="#bit">bit(2)</a></td>
- <td class="td_left">Target has no endianess?</td>
- </tr>
- <tr>
- <td><a href="#bit">bit(3)</a></td>
- <td class="td_left">Target has no pointer size?</td>
- </tr>
- <tr>
- <td><a href="#bit">bit(4-31)</a></td>
- <td class="td_left">Bytecode format version</td>
- </tr>
- </tbody>
-</table>
-<p>
-Of particular note, the bytecode format number is simply a 28-bit
+<p>The format information field is encoded into a <a href="#uint32_vbr">uint32_vbr</a>.</p>
+
+<p>Of particular note, the bytecode format number is simply a 32-bit
monotonically increasing integer that identifies the version of the bytecode
format (which is not directly related to the LLVM release number). The
bytecode versions defined so far are (note that this document only
-describes the latest version, 1.3):</p>
+describes the latest version, 2.0):</p>
<ul>
<li>#0: LLVM 1.0 & 1.1</li>
<li>#1: LLVM 1.2</li>
<li>#2: LLVM 1.2.5 (not released)</li>
<li>#3: LLVM 1.3</li>
<li>#4: LLVM 1.3.x (not released)</li>
- <li>#5: LLVM 1.4, 1.5, 1.6</li>
- </li>
+ <li>#5: LLVM 1.4 through 1.8</li>
+ <li>#6: LLVM 1.9</li>
+ <li>#7: LLVM 2.0 and newer</li>
</ul>
-<p>Note that we plan to eventually expand the target description
-capabilities
-of bytecode files to <a href="http://llvm.org/PR263">target
-triples</a>.
-</p>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="globaltypes">Global Type Pool</a> </div>
</tr>
</tbody>
</table>
+<h3>Packed Structure Types</h3>
+<table>
+ <tbody>
+ <tr>
+ <th><b>Type</b></th>
+ <th class="td_left"><b>Description</b></th>
+ </tr>
+ <tr>
+ <td><a href="#uint24_vbr">uint24_vbr</a></td>
+ <td class="td_left">Type ID for packed structure types (19)</td>
+ </tr>
+ <tr>
+ <td><a href="#zlist">zlist</a>(<a href="#uint24_vbr">uint24_vbr</a>)</td>
+ <td class="td_left">Slot number of each of the element's fields.</td>
+ </tr>
+ </tbody>
+</table>
</div>
<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="globalinfo">Module Global Info</a>
<td><a href="#string">string</a></td>
<td class="td_left">The target
triple for the module (blank means no target triple specified, i.e. a
-platform independent module).</td>
+platform-independent module).</td>
+ </tr>
+ <tr>
+ <td><a href="#string">string</a></td>
+ <td class="td_left">The data layout string describing the endianness, pointer size, and
+type alignments for which the module was written (blank means no data layout specified, i.e. a platform-independent module).</td>
</tr>
<tr>
<td><a href="#llist">llist</a>(<a href="#string">string</a>)</td>
<tr>
<td><a href="#bit">bit(2-4)</a></td>
<td class="td_left">Linkage type: 0=External, 1=Weak,
-2=Appending, 3=Internal, 4=LinkOnce</td>
+ 2=Appending, 3=Internal, 4=LinkOnce, 5=DllImport,
+ 6=DllExport, 7=ExternWeak</td>
</tr>
<tr>
<td><a href="#bit">bit(5-31)</a></td>
<td class="td_left">If this bit is set, a SectionID follows this vbr.</td>
</tr>
<tr>
- <td><a href="#bit">bit(10-31)</a></td>
+ <td><a href="#bit">bit(10-12)</a></td>
+ <td class="td_left">Visibility style: 0=Default, 1=Hidden.</td>
+ </tr>
+ <tr>
+ <td><a href="#bit">bit(13-31)</a></td>
<td class="td_left">Currently unassigned.</td>
</tr>
</tbody>
<td><a href="#bit">bit(4)</a></td>
<td class="td_left">If this bit is set to 1, the indicated function is
external, and there is no <a href="#functiondefs">Function Definiton
- Block</a> in the bytecode file for the function.</td>
+ Block</a> in the bytecode file for the function. If the function is
+ external and has <tt>dllimport or extern_weak</tt> linkage additional
+ field in the extension word is used to indicate the actual linkage
+ type.</td>
</tr>
<tr>
<td><a href="#bit">bit(5-30)</a></td>
<td class="td_left">Type slot number of type for the function.</td>
</tr>
- <tr>
+ <tr>
<td><a href="#bit">bit(31)</a></td>
<td class="td_left">Indicates whether an extension word follows.</td>
</tr>
<td class="td_left">If this bit is set, a SectionID follows this vbr.</td>
</tr>
<tr>
- <td><a href="#bit">bit(11-31)</a></td>
+ <td><a href="#bit">bit(11-12)</a></td>
+ <td class="td_left">Linkage type for external functions. 0 - External
+ linkage, 1 - DLLImport linkage, 2 - External weak linkage.</td>
+ </tr>
+ <tr>
+ <td><a href="#bit">bit(13-31)</a></td>
<td class="td_left">Currently unassigned.</td>
</tr>
</tbody>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">Undef Entries</a></div>
+<div class="doc_subsubsection">Undef Entries</div>
<div class="doc_text">
<p>When the number of operands to the constant is one, we have an 'undef' value
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">Inline Assembler Entries</a></div>
+<div class="doc_subsubsection">Inline Assembler Entries</div>
<div class="doc_text">
<p>Inline Assembler entries are stored in the constant pool, though they are not
</tr>
<tr>
<td><a href="#uint32_vbr">uint32_vbr</a></td>
- <td class="td_left">Flags</sup></td>
+ <td class="td_left">Flags</td>
</tr>
</tbody>
</table>
</div>
<!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection">Constant Expression Entries</a></div>
+<div class="doc_subsubsection">Constant Expression Entries</div>
<div class="doc_text">
</tr>
<tr>
<td><a href="#uint32_vbr">uint32_vbr</a></td>
- <td class="td_left">The linkage type of the function: 0=External,
-1=Weak, 2=Appending, 3=Internal, 4=LinkOnce<sup>1</sup></td>
+ <td class="td_left"><a href="#funclinkage_and_visibility">The linkage and
+ visibility</a> style field</td>
</tr>
<tr>
<td><a href="#block">block</a></td>
be written. Compaction tables are only written if they will actually
save bytecode space. If not, then a regular constant pool is written.</li>
</ol>
+
+<!-- _______________________________________________________________________ -->
+<div class="doc_subsubsection"><a name="funclinkage_and_visibility">Linkage and
+ visibility word</a>
+</div>
+<div class="doc_text">
+
+<table>
+ <tbody>
+ <tr>
+ <th><b>Type</b></th>
+ <th class="td_left"><b>Field Description</b></th>
+ </tr>
+ <tr>
+ <td><a href="#bit">bit(0-15)</a></td>
+ <td class="td_left">The linkage type of the function: 0=External, 1=Weak,
+2=Appending, 3=Internal, 4=LinkOnce, 5=DllImport, 6=DllExport<sup>1</sup></td>
+ </tr>
+ <tr>
+ <td><a href="#bit">bit(16-18)</a></td>
+ <td class="td_left">Visibility style: 0=Default, 1=Hidden.</td>
+ </tr>
+ <tr>
+ <td><a href="#bit">bit(19-31)</a></td>
+ <td class="td_left>Currently unassigned.</td>
+ </tr>
+ </tbody>
+</table>
+
</div>
+</div>
+
<!-- _______________________________________________________________________ -->
<div class="doc_subsection"><a name="compactiontable">Compaction Table</a>
</div>
<tr><td>Add</td><td>7</td><td>1</td><td>1.0</td></tr>
<tr><td>Sub</td><td>8</td><td>1</td><td>1.0</td></tr>
<tr><td>Mul</td><td>9</td><td>1</td><td>1.0</td></tr>
- <tr><td>Div</td><td>10</td><td>1</td><td>1.0</td></tr>
- <tr><td>Rem</td><td>11</td><td>1</td><td>1.0</td></tr>
+ <tr><td>UDiv</td><td>10</td><td>1</td><td>1.9</td></tr>
+ <tr><td>SDiv</td><td>11</td><td>1</td><td>1.9</td></tr>
+ <tr><td>FDiv</td><td>12</td><td>1</td><td>1.9</td></tr>
+ <tr><td>URem</td><td>13</td><td>1</td><td>1.9</td></tr>
+ <tr><td>SRem</td><td>14</td><td>1</td><td>1.9</td></tr>
+ <tr><td>FRem</td><td>15</td><td>1</td><td>1.9</td></tr>
<tr><td colspan="4"><b>Logical Operators</b></td></tr>
- <tr><td>And</td><td>12</td><td>1</td><td>1.0</td></tr>
- <tr><td>Or</td><td>13</td><td>1</td><td>1.0</td></tr>
- <tr><td>Xor</td><td>14</td><td>1</td><td>1.0</td></tr>
+ <tr><td>And</td><td>16</td><td>1</td><td>1.0</td></tr>
+ <tr><td>Or</td><td>17</td><td>1</td><td>1.0</td></tr>
+ <tr><td>Xor</td><td>18</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Binary Comparison Operators</b></td></tr>
- <tr><td>SetEQ</td><td>15</td><td>1</td><td>1.0</td></tr>
- <tr><td>SetNE</td><td>16</td><td>1</td><td>1.0</td></tr>
- <tr><td>SetLE</td><td>17</td><td>1</td><td>1.0</td></tr>
- <tr><td>SetGE</td><td>18</td><td>1</td><td>1.0</td></tr>
- <tr><td>SetLT</td><td>19</td><td>1</td><td>1.0</td></tr>
- <tr><td>SetGT</td><td>20</td><td>1</td><td>1.0</td></tr>
+ <tr><td>SetEQ</td><td>19</td><td>1</td><td>1.0</td></tr>
+ <tr><td>SetNE</td><td>20</td><td>1</td><td>1.0</td></tr>
+ <tr><td>SetLE</td><td>21</td><td>1</td><td>1.0</td></tr>
+ <tr><td>SetGE</td><td>22</td><td>1</td><td>1.0</td></tr>
+ <tr><td>SetLT</td><td>23</td><td>1</td><td>1.0</td></tr>
+ <tr><td>SetGT</td><td>24</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Memory Operators</b></td></tr>
- <tr><td>Malloc</td><td>21</td><td>1</td><td>1.0</td></tr>
- <tr><td>Free</td><td>22</td><td>1</td><td>1.0</td></tr>
- <tr><td>Alloca</td><td>23</td><td>1</td><td>1.0</td></tr>
- <tr><td>Load</td><td>24</td><td>1</td><td>1.0</td></tr>
- <tr><td>Store</td><td>25</td><td>1</td><td>1.0</td></tr>
- <tr><td>GetElementPtr</td><td>26</td><td>1</td><td>1.0</td></tr>
+ <tr><td>Malloc</td><td>25</td><td>1</td><td>1.0</td></tr>
+ <tr><td>Free</td><td>26</td><td>1</td><td>1.0</td></tr>
+ <tr><td>Alloca</td><td>27</td><td>1</td><td>1.0</td></tr>
+ <tr><td>Load</td><td>28</td><td>1</td><td>1.0</td></tr>
+ <tr><td>Store</td><td>29</td><td>1</td><td>1.0</td></tr>
+ <tr><td>GetElementPtr</td><td>30</td><td>1</td><td>1.0</td></tr>
<tr><td colspan="4"><b>Other Operators</b></td></tr>
- <tr><td>PHI</td><td>27</td><td>1</td><td>1.0</td></tr>
- <tr><td>Cast</td><td>28</td><td>1</td><td>1.0</td></tr>
- <tr><td>Call</td><td>29</td><td>1</td><td>1.0</td></tr>
- <tr><td>Shl</td><td>30</td><td>1</td><td>1.0</td></tr>
- <tr><td>Shr</td><td>31</td><td>1</td><td>1.0</td></tr>
- <tr><td>VANext</td><td>32</td><td>1</td><td>1.0</td></tr>
- <tr><td>VAArg</td><td>33</td><td>1</td><td>1.0</td></tr>
- <tr><td>Select</td><td>34</td><td>2</td><td>1.2</td></tr>
+ <tr><td>PHI</td><td>31</td><td>1</td><td>1.0</td></tr>
+ <tr><td>Cast</td><td>32</td><td>1</td><td>1.0</td></tr>
+ <tr><td>Call</td><td>33</td><td>1</td><td>1.0</td></tr>
+ <tr><td>Shl</td><td>34</td><td>1</td><td>1.0</td></tr>
+ <tr><td>LShr</td><td>35</td><td>6</td><td>2.0</td></tr>
+ <tr><td>AShr</td><td>36</td><td>6</td><td>2.0</td></tr>
+ <tr><td>Select</td><td>37</td><td>2</td><td>1.2</td></tr>
+ <tr><td>UserOp1</td><td>38</td><td>1</td><td>1.0</td></tr>
+ <tr><td>UserOp2</td><td>39</td><td>1</td><td>1.0</td></tr>
+ <tr><td>VAArg</td><td>40</td><td>5</td><td>1.5</td></tr>
+ <tr><td>ExtractElement</td><td>41</td><td>5</td><td>1.5</td></tr>
+ <tr><td>InsertElement</td><td>42</td><td>5</td><td>1.5</td></tr>
+ <tr><td>ShuffleElement</td><td>43</td><td>5</td><td>1.5</td></tr>
<tr><td colspan="4">
<b>Pseudo Instructions<a href="#pi_note">*</a></b>
</td></tr>