Path: blob/main/docs/source/user-guide/binding/value-references.rst
1154 views
================
Value references
================
.. currentmodule:: llvmlite.binding
A value reference is a wrapper around an LLVM value for you to
inspect. You cannot create a value reference yourself. You get them
from methods of the :class:`ModuleRef` and :class:`ValueRef` classes.
Enumerations
------------
.. class:: Linkage
The linkage types allowed for global values are:
* .. data:: external
* .. data:: available_externally
* .. data:: linkonce_any
* .. data:: linkonce_odr
* .. data:: linkonce_odr_autohide
* .. data:: weak_any
* .. data:: weak_odr
* .. data:: appending
* .. data:: internal
* .. data:: private
* .. data:: dllimport
* .. data:: dllexport
* .. data:: external_weak
* .. data:: ghost
* .. data:: common
* .. data:: linker_private
* .. data:: linker_private_weak
.. class:: Visibility
The visibility styles allowed for global values are:
* .. data:: default
* .. data:: hidden
* .. data:: protected
.. class:: StorageClass
The storage classes allowed for global values are:
* .. data:: default
* .. data:: dllimport
* .. data:: dllexport
.. class:: ValueKind
The value kinds allowed are:
* .. data:: argument
* .. data:: basic_block
* .. data:: memory_use
* .. data:: memory_def
* .. data:: memory_phi
* .. data:: function
* .. data:: global_alias
* .. data:: global_ifunc
* .. data:: global_variable
* .. data:: block_address
* .. data:: constant_expr
* .. data:: constant_array
* .. data:: constant_struct
* .. data:: constant_vector
* .. data:: undef_value
* .. data:: constant_aggregate_zero
* .. data:: constant_data_array
* .. data:: constant_data_vector
* .. data:: constant_int
* .. data:: constant_fp
* .. data:: constant_pointer_null
* .. data:: constant_token_none
* .. data:: metadata_as_value
* .. data:: inline_asm
* .. data:: instruction
* .. data:: poison_value
The ValueRef class
------------------
.. class:: ValueRef
A wrapper around an LLVM value. The attributes available are:
* .. attribute:: is_declaration
* ``True``---The global value is a mere declaration.
* ``False``---The global value is defined in the given
module.
* .. attribute:: linkage
The linkage type---a :class:`Linkage` instance---for
this value. This attribute can be set.
* .. attribute:: module
The module---a :class:`ModuleRef` instance---that this
value is defined in.
* .. attribute:: function
The function---a :class:`ValueRef` instance---that this
value is defined in.
* .. attribute:: block
The basic block---a :class:`ValueRef` instance---that this
value is defined in.
* .. attribute:: instruction
The instruction---a :class:`ValueRef` instance---that this
value is defined in.
* .. attribute:: name
This value's name, as a string. This attribute can be set.
* .. attribute:: type
This value's LLVM type as :class:`TypeRef` object.
* .. attribute:: storage_class
The storage
class---a :class:`StorageClass` instance---for
this value. This attribute can be set.
* .. attribute:: visibility
The visibility
style---a :class:`Visibility` instance---for
this value. This attribute can be set.
* .. attribute:: value_kind
The LLVM value kind---a :class:`ValueKind` instance---for
this value.
* .. attribute:: blocks
An iterator over the basic blocks in this function.
Each block is a :class:`ValueRef` instance.
* .. attribute:: arguments
An iterator over the arguments of this function.
Each argument is a :class:`ValueRef` instance.
* .. attribute:: instructions
An iterator over the instructions in this basic block.
Each instruction is a :class:`ValueRef` instance.
* .. attribute:: incoming_blocks
An iterator over the incoming blocks of a phi instruction.
Each block is a :class:`ValueRef` instance.
* .. attribute:: operands
An iterator over the operands in this instruction.
Each operand is a :class:`ValueRef` instance.
* .. attribute:: opcode
The instruction's opcode, as a string.
* .. attribute:: attributes
An iterator over the attributes in this value.
Each attribute is a :class:`bytes` instance.
Values that have attributes are: function, argument (and
others for which attributes support has not been implemented)
* .. attribute:: is_global
The value is a global variable.
* .. attribute:: is_function
The value is a function.
* .. attribute:: is_argument
The value is a function's argument.
* .. attribute:: is_block
The value is a function's basic block.
* .. attribute:: is_instruction
The value is a basic block's instruction.
* .. attribute:: is_operand
The value is a instruction's operand.
* .. attribute:: is_constant
The value is a constant.
* .. method:: get_constant_value(self, signed_int=False, round_fp=False)
Return the constant value, either as a literal (for example, int
or float) when supported, or as a string otherwise. Keyword arguments
specify the preferences during conversion:
* If ``signed_int`` is True and the constant is an integer, returns a
signed integer.
* If ``round_fp`` True and the constant is a floating point value,
rounds the result upon accuracy loss (e.g., when querying an fp128
value). By default, raises an exception on accuracy loss.