Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
and fn_attr =
| FNATTR_Alignstack of int
| FNATTR_Alwaysinline
| FNATTR_Builtin
| FNATTR_Cold
| FNATTR_Inlinehint
| FNATTR_Jumptable
| FNATTR_Minsize
| FNATTR_Naked
| FNATTR_Nobuiltin
| FNATTR_Noduplicate
| FNATTR_Noimplicitfloat
| FNATTR_Noinline
| FNATTR_Nonlazybind
| FNATTR_Noredzone
| FNATTR_Noreturn
| FNATTR_Nounwind
| FNATTR_Optnone
| FNATTR_Optsize
| FNATTR_Readnone
| FNATTR_Readonly
| FNATTR_Returns_twice
| FNATTR_Sanitize_address
| FNATTR_Sanitize_memory
| FNATTR_Sanitize_thread
| FNATTR_Ssp
| FNATTR_Sspreq
| FNATTR_Sspstrong
| FNATTR_Uwtable
| FNATTR_String of string
| FNATTR_Key_value of string * string
| FNATTR_Attr_grp of int
and typ =
| TYPE_I of int
| TYPE_Pointer of typ
| TYPE_Void
| TYPE_Half
| TYPE_Float
| TYPE_Double
| TYPE_X86_fp80
| TYPE_Fp128
| TYPE_Ppc_fp128
| TYPE_Label
| TYPE_Metadata
| TYPE_X86_mmx
| TYPE_Array of int * typ
| TYPE_Function of typ * typ list
| TYPE_Struct of typ list
| TYPE_Packed_struct of typ list
| TYPE_Opaque
| TYPE_Vector of int * typ
and instr =
| INSTR_IBinop of ibinop * typ * value * value
| INSTR_ICmp of icmp * typ * value * value
| INSTR_FBinop of fbinop * fast_math list * typ * value * value
| INSTR_FCmp of fcmp * typ * value * value
| INSTR_Conversion of conversion_type * typ * value * typ
| INSTR_GetElementPtr of tvalue * tvalue list
| INSTR_ExtractElement of tvalue * tvalue
| INSTR_InsertElement of tvalue * tvalue * tvalue
| INSTR_ShuffleVector of tvalue * tvalue * tvalue
| INSTR_ExtractValue of tvalue * int list
| INSTR_InsertValue of tvalue * tvalue * int list
| INSTR_Call of tident * tvalue list
| INSTR_Alloca of typ * tvalue option * int option
| INSTR_Load of bool * tvalue * int option
| INSTR_Phi of typ * (value * ident) list
| INSTR_Select of tvalue * tvalue * tvalue
| INSTR_VAArg
| INSTR_LandingPad
| INSTR_Store of bool * tvalue * tident * int option
| INSTR_Fence
| INSTR_AtomicCmpXchg
| INSTR_AtomicRMW
| INSTR_Invoke of tident * tvalue list * tident * tident
| INSTR_Ret of tvalue
| INSTR_Ret_void
| INSTR_Br of tvalue * tident * tident
| INSTR_Br_1 of tident
| INSTR_Switch of tvalue * tident * (tvalue * tident) list
| INSTR_IndirectBr of tvalue * tident list
| INSTR_Resume of tvalue
| INSTR_Unreachable
| INSTR_Assign of ident * instr
and toplevelentry =
| TLE_Target of string
| TLE_Datalayout of string
| TLE_Declaration of declaration
| TLE_Definition of definition
| TLE_Type_decl of ident * typ
| TLE_Global of global
| TLE_Metadata of string * metadata
| TLE_Attribute_group of int * fn_attr list
and toplevelentries = toplevelentry list
and global = {
g_ident : ident;
g_typ : typ;
g_constant : bool;
g_value : value option;
g_linkage : linkage option;
g_visibility : visibility option;
g_dll_storage : dll_storage option;
g_thread_local : thread_local_storage option;
g_unnamed_addr : bool;
g_addrspace : int option;
g_externally_initialized : bool;
g_section : string option;
g_align : int option;
}
and declaration = {
dc_name : ident;
dc_type : typ;
dc_param_attrs : param_attr list * param_attr list list;
}
and definition = {
df_prototype : declaration;
df_args : ident list;
df_instrs : block list;
df_linkage : linkage option;
df_visibility : visibility option;
df_dll_storage : dll_storage option;
df_cconv : cconv option;
df_attrs : fn_attr list;
df_section : string option;
df_align : int option;
df_gc : string option;
}
and block = string * instr list
and modul = {
m_name : string;
m_target : toplevelentry;
m_datalayout : toplevelentry;
m_globals : (string * global) list;
m_declarations : (string * declaration) list;
m_definitions : (string * definition) list;
}