mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
LangRef: Remove stale docs on LLVM types in module structure
The distinction between "identified" and "literal" struct types is fully documented in a later section. Patch by Philip Reames! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202927 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e6d0bedb06
commit
d6e0bca951
@ -471,31 +471,22 @@ DLL storage class:
|
|||||||
exists for defining a dll interface, the compiler, assembler and linker know
|
exists for defining a dll interface, the compiler, assembler and linker know
|
||||||
it is externally referenced and must refrain from deleting the symbol.
|
it is externally referenced and must refrain from deleting the symbol.
|
||||||
|
|
||||||
Named Types
|
Structure Types
|
||||||
-----------
|
---------------
|
||||||
|
|
||||||
LLVM IR allows you to specify name aliases for certain types. This can
|
LLVM IR allows you to specify both "identified" and "literal" :ref:`structure
|
||||||
make it easier to read the IR and make the IR more condensed
|
types <t_struct>`. Literal types are uniqued structurally, but identified types
|
||||||
(particularly when recursive types are involved). An example of a name
|
are never uniqued. An :ref:`opaque structural type <t_opaque>` can also be used
|
||||||
specification is:
|
to forward declare a type which is not yet available.
|
||||||
|
|
||||||
|
An example of a identified structure specification is:
|
||||||
|
|
||||||
.. code-block:: llvm
|
.. code-block:: llvm
|
||||||
|
|
||||||
%mytype = type { %mytype*, i32 }
|
%mytype = type { %mytype*, i32 }
|
||||||
|
|
||||||
You may give a name to any :ref:`type <typesystem>` except
|
Prior to the LLVM 3.0 release, identified types were structurally uniqued. Only
|
||||||
":ref:`void <t_void>`". Type name aliases may be used anywhere a type is
|
literal types are uniqued in recent versions of LLVM.
|
||||||
expected with the syntax "%mytype".
|
|
||||||
|
|
||||||
Note that type names are aliases for the structural type that they
|
|
||||||
indicate, and that you can therefore specify multiple names for the same
|
|
||||||
type. This often leads to confusing behavior when dumping out a .ll
|
|
||||||
file. Since LLVM IR uses structural typing, the name is not part of the
|
|
||||||
type. When printing out LLVM IR, the printer will pick *one name* to
|
|
||||||
render all types of a particular shape. This means that if you have code
|
|
||||||
where two different source types end up having the same LLVM type, that
|
|
||||||
the dumper will sometimes print the "wrong" or unexpected type. This is
|
|
||||||
an important design point and isn't going to change.
|
|
||||||
|
|
||||||
.. _globalvars:
|
.. _globalvars:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user