mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
remove unions from LLVM IR. They are severely buggy and not
being actively maintained, improved, or extended. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112356 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1367,21 +1367,6 @@ type to the type table.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- _______________________________________________________________________ -->
|
||||
<div class="doc_subsubsection"><a name="TYPE_CODE_UNION">TYPE_CODE_UNION Record</a>
|
||||
</div>
|
||||
|
||||
<div class="doc_text">
|
||||
|
||||
<p><tt>[UNION, ...eltty...]</tt></p>
|
||||
|
||||
<p>The <tt>UNION</tt> record (code 17) adds a <tt>union</tt> type to
|
||||
the type table. The <i>eltty</i> operand fields are zero or more type
|
||||
indices representing the element types of the union.
|
||||
</p>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- ======================================================================= -->
|
||||
<div class="doc_subsection"><a name="CONSTANTS_BLOCK">CONSTANTS_BLOCK Contents</a>
|
||||
</div>
|
||||
|
@@ -26,7 +26,6 @@
|
||||
<li><a href="#lead0">Why don't GEP x,0,0,1 and GEP x,1 alias? </a></li>
|
||||
<li><a href="#trail0">Why do GEP x,1,0,0 and GEP x,1 alias? </a></li>
|
||||
<li><a href="#vectors">Can GEP index into vector elements?</a>
|
||||
<li><a href="#unions">Can GEP index into unions?</a>
|
||||
<li><a href="#addrspace">What effect do address spaces have on GEPs?</a>
|
||||
<li><a href="#int">How is GEP different from ptrtoint, arithmetic, and inttoptr?</a></li>
|
||||
<li><a href="#be">I'm writing a backend for a target which needs custom lowering for GEP. How do I do this?</a>
|
||||
@@ -369,16 +368,6 @@ idx3 = (char*) &MyVar + 8
|
||||
|
||||
<!-- *********************************************************************** -->
|
||||
|
||||
<div class="doc_subsection">
|
||||
<a name="unions"><b>Can GEP index into unions?</b></a>
|
||||
</div>
|
||||
<div class="doc_text">
|
||||
<p>Unknown.</p>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- *********************************************************************** -->
|
||||
|
||||
<div class="doc_subsection">
|
||||
<a name="addrspace"><b>What effect do address spaces have on GEPs?</b></a>
|
||||
</div>
|
||||
|
@@ -74,7 +74,6 @@
|
||||
<li><a href="#t_array">Array Type</a></li>
|
||||
<li><a href="#t_struct">Structure Type</a></li>
|
||||
<li><a href="#t_pstruct">Packed Structure Type</a></li>
|
||||
<li><a href="#t_union">Union Type</a></li>
|
||||
<li><a href="#t_vector">Vector Type</a></li>
|
||||
</ol>
|
||||
</li>
|
||||
@@ -1475,7 +1474,6 @@ Classifications</a> </div>
|
||||
<a href="#t_pointer">pointer</a>,
|
||||
<a href="#t_vector">vector</a>,
|
||||
<a href="#t_struct">structure</a>,
|
||||
<a href="#t_union">union</a>,
|
||||
<a href="#t_array">array</a>,
|
||||
<a href="#t_label">label</a>,
|
||||
<a href="#t_metadata">metadata</a>.
|
||||
@@ -1495,7 +1493,6 @@ Classifications</a> </div>
|
||||
<a href="#t_pointer">pointer</a>,
|
||||
<a href="#t_struct">structure</a>,
|
||||
<a href="#t_pstruct">packed structure</a>,
|
||||
<a href="#t_union">union</a>,
|
||||
<a href="#t_vector">vector</a>,
|
||||
<a href="#t_opaque">opaque</a>.
|
||||
</td>
|
||||
@@ -1643,8 +1640,8 @@ Classifications</a> </div>
|
||||
|
||||
<p>Aggregate Types are a subset of derived types that can contain multiple
|
||||
member types. <a href="#t_array">Arrays</a>,
|
||||
<a href="#t_struct">structs</a>, <a href="#t_vector">vectors</a> and
|
||||
<a href="#t_union">unions</a> are aggregate types.</p>
|
||||
<a href="#t_struct">structs</a>, and <a href="#t_vector">vectors</a> are
|
||||
aggregate types.</p>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -1714,9 +1711,7 @@ Classifications</a> </div>
|
||||
<h5>Overview:</h5>
|
||||
<p>The function type can be thought of as a function signature. It consists of
|
||||
a return type and a list of formal parameter types. The return type of a
|
||||
function type is a scalar type, a void type, a struct type, or a union
|
||||
type. If the return type is a struct type then all struct elements must be
|
||||
of first class types, and the struct must have at least one element.</p>
|
||||
function type is a first class type or a void type.</p>
|
||||
|
||||
<h5>Syntax:</h5>
|
||||
<pre>
|
||||
@@ -1837,53 +1832,6 @@ Classifications</a> </div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- _______________________________________________________________________ -->
|
||||
<div class="doc_subsubsection"> <a name="t_union">Union Type</a> </div>
|
||||
|
||||
<div class="doc_text">
|
||||
|
||||
<h5>Overview:</h5>
|
||||
<p>A union type describes an object with size and alignment suitable for
|
||||
an object of any one of a given set of types (also known as an "untagged"
|
||||
union). It is similar in concept and usage to a
|
||||
<a href="#t_struct">struct</a>, except that all members of the union
|
||||
have an offset of zero. The elements of a union may be any type that has a
|
||||
size. Unions must have at least one member - empty unions are not allowed.
|
||||
</p>
|
||||
|
||||
<p>The size of the union as a whole will be the size of its largest member,
|
||||
and the alignment requirements of the union as a whole will be the largest
|
||||
alignment requirement of any member.</p>
|
||||
|
||||
<p>Union members are accessed using '<tt><a href="#i_load">load</a></tt> and
|
||||
'<tt><a href="#i_store">store</a></tt>' by getting a pointer to a field with
|
||||
the '<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.
|
||||
Since all members are at offset zero, the getelementptr instruction does
|
||||
not affect the address, only the type of the resulting pointer.</p>
|
||||
|
||||
<h5>Syntax:</h5>
|
||||
<pre>
|
||||
union { <type list> }
|
||||
</pre>
|
||||
|
||||
<h5>Examples:</h5>
|
||||
<table class="layout">
|
||||
<tr class="layout">
|
||||
<td class="left"><tt>union { i32, i32*, float }</tt></td>
|
||||
<td class="left">A union of three types: an <tt>i32</tt>, a pointer to
|
||||
an <tt>i32</tt>, and a <tt>float</tt>.</td>
|
||||
</tr><tr class="layout">
|
||||
<td class="left">
|
||||
<tt>union { float, i32 (i32) * }</tt></td>
|
||||
<td class="left">A union, where the first element is a <tt>float</tt> and the
|
||||
second element is a <a href="#t_pointer">pointer</a> to a
|
||||
<a href="#t_function">function</a> that takes an <tt>i32</tt>, returning
|
||||
an <tt>i32</tt>.</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- _______________________________________________________________________ -->
|
||||
<div class="doc_subsubsection"> <a name="t_pointer">Pointer Type</a> </div>
|
||||
|
||||
@@ -2125,14 +2073,6 @@ Classifications</a> </div>
|
||||
the number and types of elements must match those specified by the
|
||||
type.</dd>
|
||||
|
||||
<dt><b>Union constants</b></dt>
|
||||
<dd>Union constants are represented with notation similar to a structure with
|
||||
a single element - that is, a single typed element surrounded
|
||||
by braces (<tt>{}</tt>)). For example: "<tt>{ i32 4 }</tt>". The
|
||||
<a href="#t_union">union type</a> can be initialized with a single-element
|
||||
struct as long as the type of the struct element matches the type of
|
||||
one of the union members.</dd>
|
||||
|
||||
<dt><b>Array constants</b></dt>
|
||||
<dd>Array constants are represented with notation similar to array type
|
||||
definitions (a comma separated list of elements, surrounded by square
|
||||
@@ -4153,7 +4093,7 @@ Instruction</a> </div>
|
||||
|
||||
<h5>Arguments:</h5>
|
||||
<p>The first operand of an '<tt>extractvalue</tt>' instruction is a value
|
||||
of <a href="#t_struct">struct</a>, <a href="#t_union">union</a> or
|
||||
of <a href="#t_struct">struct</a> or
|
||||
<a href="#t_array">array</a> type. The operands are constant indices to
|
||||
specify which value to extract in a similar manner as indices in a
|
||||
'<tt><a href="#i_getelementptr">getelementptr</a></tt>' instruction.</p>
|
||||
@@ -4187,7 +4127,7 @@ Instruction</a> </div>
|
||||
|
||||
<h5>Arguments:</h5>
|
||||
<p>The first operand of an '<tt>insertvalue</tt>' instruction is a value
|
||||
of <a href="#t_struct">struct</a>, <a href="#t_union">union</a> or
|
||||
of <a href="#t_struct">struct</a> or
|
||||
<a href="#t_array">array</a> type. The second operand is a first-class
|
||||
value to insert. The following operands are constant indices indicating
|
||||
the position at which to insert the value in a similar manner as indices in a
|
||||
@@ -4420,12 +4360,12 @@ Instruction</a> </div>
|
||||
indexes a value of the type pointed to (not necessarily the value directly
|
||||
pointed to, since the first index can be non-zero), etc. The first type
|
||||
indexed into must be a pointer value, subsequent types can be arrays,
|
||||
vectors, structs and unions. Note that subsequent types being indexed into
|
||||
vectors, and structs. Note that subsequent types being indexed into
|
||||
can never be pointers, since that would require loading the pointer before
|
||||
continuing calculation.</p>
|
||||
|
||||
<p>The type of each index argument depends on the type it is indexing into.
|
||||
When indexing into a (optionally packed) structure or union, only <tt>i32</tt>
|
||||
When indexing into a (optionally packed) structure, only <tt>i32</tt>
|
||||
integer <b>constants</b> are allowed. When indexing into an array, pointer
|
||||
or vector, integers of any width are allowed, and they are not required to be
|
||||
constant.</p>
|
||||
|
@@ -67,9 +67,8 @@ Almost dead code.
|
||||
include/llvm/Analysis/LiveValues.h => Dan
|
||||
lib/Transforms/IPO/MergeFunctions.cpp => consider for 2.8.
|
||||
llvm/Analysis/PointerTracking.h => Edwin wants this, consider for 2.8.
|
||||
ABCD, GEPSplitterPass
|
||||
GEPSplitterPass
|
||||
MSIL backend?
|
||||
lib/Transforms/Utils/SSI.cpp -> ABCD depends on it.
|
||||
-->
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user