Idris2Doc : Data.LLVM.IR.Program

Data.LLVM.IR.Program

LLVM IR program structure and top-level definitions.

This module defines the data structures for representing complete LLVM IR programs,
including global variables, function definitions, and module-level constructs.
It provides the building blocks for constructing full LLVM modules.

Definitions

recordGVarDef : Type
  Global variable definition.
Models LLVM IR global variable definitions like:
```llvm
@myGlobal = private constant i32 42, align 4
@threadVar = thread_local(localdynamic) global i32 0
@externInit = external externally_initialized global i32
```

Totality: total
Visibility: public export
Constructor: 
MkGVarDef : String->SymbolInfo->MaybeThreadLocality->MaybeAddressInfo->MaybeAddressSpace->MaybeBool->Bool->LType->MaybeLExpr->ListLTag->GVarDef

Projections:
.addressInfo : GVarDef->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)
.addressSpace : GVarDef->MaybeAddressSpace
  Address space specification (addrspace(N))
.externallyInitialized : GVarDef->MaybeBool
  Whether the variable is externally initialized
.gtpe : GVarDef->LType
  The type of the global variable
.initializer : GVarDef->MaybeLExpr
  Optional initializer value
.isConst : GVarDef->Bool
  Whether this is a constant (true) or global variable (false)
.name : GVarDef->String
  Variable name (without @ prefix)
.symbolInfo : GVarDef->SymbolInfo
  Symbol information (linkage, visibility, etc.)
.tags : GVarDef->ListLTag
  Metadata tags
.threadLocality : GVarDef->MaybeThreadLocality
  Thread-local storage model (thread_local(...))

Hints:
EncodeFCMGVarDefCPtr
EncodeATMGVarDefVString
WalkGVarDefLClause
.name : GVarDef->String
  Variable name (without @ prefix)

Visibility: public export
name : GVarDef->String
  Variable name (without @ prefix)

Visibility: public export
.symbolInfo : GVarDef->SymbolInfo
  Symbol information (linkage, visibility, etc.)

Visibility: public export
symbolInfo : GVarDef->SymbolInfo
  Symbol information (linkage, visibility, etc.)

Visibility: public export
.threadLocality : GVarDef->MaybeThreadLocality
  Thread-local storage model (thread_local(...))

Visibility: public export
threadLocality : GVarDef->MaybeThreadLocality
  Thread-local storage model (thread_local(...))

Visibility: public export
.addressInfo : GVarDef->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)

Visibility: public export
addressInfo : GVarDef->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)

Visibility: public export
.addressSpace : GVarDef->MaybeAddressSpace
  Address space specification (addrspace(N))

Visibility: public export
addressSpace : GVarDef->MaybeAddressSpace
  Address space specification (addrspace(N))

Visibility: public export
.externallyInitialized : GVarDef->MaybeBool
  Whether the variable is externally initialized

Visibility: public export
externallyInitialized : GVarDef->MaybeBool
  Whether the variable is externally initialized

Visibility: public export
.isConst : GVarDef->Bool
  Whether this is a constant (true) or global variable (false)

Visibility: public export
isConst : GVarDef->Bool
  Whether this is a constant (true) or global variable (false)

Visibility: public export
.gtpe : GVarDef->LType
  The type of the global variable

Visibility: public export
gtpe : GVarDef->LType
  The type of the global variable

Visibility: public export
.initializer : GVarDef->MaybeLExpr
  Optional initializer value

Visibility: public export
initializer : GVarDef->MaybeLExpr
  Optional initializer value

Visibility: public export
.tags : GVarDef->ListLTag
  Metadata tags

Visibility: public export
tags : GVarDef->ListLTag
  Metadata tags

Visibility: public export
recordAttributeGroupDef : Type
  Attribute group definition.
Models LLVM IR attribute group definitions like:
```llvm
attributes #0 = { nounwind readnone }
attributes #1 = { "no-frame-pointer-elim"="true" }
```

Totality: total
Visibility: public export
Constructor: 
MkAttributeGroupDef : Nat->ListAttribute->AttributeGroupDef

Projections:
.attrs : AttributeGroupDef->ListAttribute
  List of attributes in this group
.name : AttributeGroupDef->Nat
  Group number (the N in attributes #N)

Hints:
EncodeFCMAttributeGroupDefCPtr
EncodeATMAttributeGroupDefVString
WalkAttributeGroupDefLClause
.name : AttributeGroupDef->Nat
  Group number (the N in attributes #N)

Visibility: public export
name : AttributeGroupDef->Nat
  Group number (the N in attributes #N)

Visibility: public export
.attrs : AttributeGroupDef->ListAttribute
  List of attributes in this group

Visibility: public export
attrs : AttributeGroupDef->ListAttribute
  List of attributes in this group

Visibility: public export
recordFunctionDef : Type
  Function definition with implementation.
Models LLVM IR function definitions like:
```llvm
define dso_local i32 @main(i32 %argc, i8** %argv) #0 {
entry:
| %retval = alloca i32, align 4
| ret i32 0
}
```
Or with more attributes:
```llvm
define private fastcc nounwind i32 @helper(i32 %x)
unnamed_addr section ".text" align 16 gc "shadow-stack" {
entry:
| ret i32 %x
}
```

Totality: total
Visibility: public export
Constructor: 
MkFunctionDef : String->SymbolInfo->MaybeCallingConvention->ListAttribute->LType->ListFunctionArgSpec->MaybeAddressInfo->MaybeAddressSpace->ListAttribute->MaybeString->MaybeString->MaybeName->MaybeInt->MaybeString->MaybeLExpr->MaybeLExpr->MaybeLExpr->ListMetadata->ListBlock->ListLTag->FunctionDef

Projections:
.addressInfo : FunctionDef->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)
.addressSpace : FunctionDef->MaybeAddressSpace
  Address space (addrspace(N))
.alignment : FunctionDef->MaybeInt
  Function alignment (align N)
.args : FunctionDef->ListFunctionArgSpec
  Function parameters with their types and attributes
.body : FunctionDef->ListBlock
  Function body with basic blocks and instructions
.callingConvention : FunctionDef->MaybeCallingConvention
  Calling convention (fastcc, coldcc, etc.)
.comdat : FunctionDef->MaybeName
  Comdat group (comdat [($name)])
.fnAttributes : FunctionDef->ListAttribute
  Function attributes (nounwind, readnone, etc.)
.fprefix : FunctionDef->MaybeLExpr
  Prefix data (prefix Constant)
.gc : FunctionDef->MaybeString
  Garbage collector name (gc "name")
.metadata : FunctionDef->ListMetadata
  Attached metadata (!name !N)*
.name : FunctionDef->String
  Function name (without @ prefix)
.partition : FunctionDef->MaybeString
  Partition name (partition "name")
.personality : FunctionDef->MaybeLExpr
  Personality function (personality Constant)
.prologue : FunctionDef->MaybeLExpr
  Prologue data (prologue Constant)
.returnAttrs : FunctionDef->ListAttribute
  Return value attributes
.returnType : FunctionDef->LType
  Return type
.section : FunctionDef->MaybeString
  Section name (section "name")
.symbolInfo : FunctionDef->SymbolInfo
  Symbol information (linkage, preemption, visibility, DLL storage)
.tags : FunctionDef->ListLTag
  Additional metadata tags

Hints:
EncodeFCMFunctionDefCPtr
EncodeATMFunctionDefVString
WalkFunctionDefLClause
.name : FunctionDef->String
  Function name (without @ prefix)

Visibility: public export
name : FunctionDef->String
  Function name (without @ prefix)

Visibility: public export
.symbolInfo : FunctionDef->SymbolInfo
  Symbol information (linkage, preemption, visibility, DLL storage)

Visibility: public export
symbolInfo : FunctionDef->SymbolInfo
  Symbol information (linkage, preemption, visibility, DLL storage)

Visibility: public export
.callingConvention : FunctionDef->MaybeCallingConvention
  Calling convention (fastcc, coldcc, etc.)

Visibility: public export
callingConvention : FunctionDef->MaybeCallingConvention
  Calling convention (fastcc, coldcc, etc.)

Visibility: public export
.returnAttrs : FunctionDef->ListAttribute
  Return value attributes

Visibility: public export
returnAttrs : FunctionDef->ListAttribute
  Return value attributes

Visibility: public export
.returnType : FunctionDef->LType
  Return type

Visibility: public export
returnType : FunctionDef->LType
  Return type

Visibility: public export
.args : FunctionDef->ListFunctionArgSpec
  Function parameters with their types and attributes

Visibility: public export
args : FunctionDef->ListFunctionArgSpec
  Function parameters with their types and attributes

Visibility: public export
.addressInfo : FunctionDef->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)

Visibility: public export
addressInfo : FunctionDef->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)

Visibility: public export
.addressSpace : FunctionDef->MaybeAddressSpace
  Address space (addrspace(N))

Visibility: public export
addressSpace : FunctionDef->MaybeAddressSpace
  Address space (addrspace(N))

Visibility: public export
.fnAttributes : FunctionDef->ListAttribute
  Function attributes (nounwind, readnone, etc.)

Visibility: public export
fnAttributes : FunctionDef->ListAttribute
  Function attributes (nounwind, readnone, etc.)

Visibility: public export
.section : FunctionDef->MaybeString
  Section name (section "name")

Visibility: public export
section : FunctionDef->MaybeString
  Section name (section "name")

Visibility: public export
.partition : FunctionDef->MaybeString
  Partition name (partition "name")

Visibility: public export
partition : FunctionDef->MaybeString
  Partition name (partition "name")

Visibility: public export
.comdat : FunctionDef->MaybeName
  Comdat group (comdat [($name)])

Visibility: public export
comdat : FunctionDef->MaybeName
  Comdat group (comdat [($name)])

Visibility: public export
.alignment : FunctionDef->MaybeInt
  Function alignment (align N)

Visibility: public export
alignment : FunctionDef->MaybeInt
  Function alignment (align N)

Visibility: public export
.gc : FunctionDef->MaybeString
  Garbage collector name (gc "name")

Visibility: public export
gc : FunctionDef->MaybeString
  Garbage collector name (gc "name")

Visibility: public export
.fprefix : FunctionDef->MaybeLExpr
  Prefix data (prefix Constant)

Visibility: public export
fprefix : FunctionDef->MaybeLExpr
  Prefix data (prefix Constant)

Visibility: public export
.prologue : FunctionDef->MaybeLExpr
  Prologue data (prologue Constant)

Visibility: public export
prologue : FunctionDef->MaybeLExpr
  Prologue data (prologue Constant)

Visibility: public export
.personality : FunctionDef->MaybeLExpr
  Personality function (personality Constant)

Visibility: public export
personality : FunctionDef->MaybeLExpr
  Personality function (personality Constant)

Visibility: public export
.metadata : FunctionDef->ListMetadata
  Attached metadata (!name !N)*

Visibility: public export
metadata : FunctionDef->ListMetadata
  Attached metadata (!name !N)*

Visibility: public export
.body : FunctionDef->ListBlock
  Function body with basic blocks and instructions

Visibility: public export
body : FunctionDef->ListBlock
  Function body with basic blocks and instructions

Visibility: public export
.tags : FunctionDef->ListLTag
  Additional metadata tags

Visibility: public export
tags : FunctionDef->ListLTag
  Additional metadata tags

Visibility: public export
recordFunctionDec : Type
  Function declaration without implementation.
Models LLVM IR function declarations like:
```llvm
declare i32 @printf(i8*, ...)
declare dso_local void @exit(i32) #1
declare external fastcc i32 @external_func(i32, i32)
```

Totality: total
Visibility: public export
Constructor: 
MkFunctionDec : String->SymbolInfo->MaybeCallingConvention->ListAttribute->LType->ListFunctionArgSpec->MaybeAddressInfo->MaybeInt->MaybeString->MaybeLExpr->MaybeLExpr->ListLTag->FunctionDec

Projections:
.addressInfo : FunctionDec->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)
.alignment : FunctionDec->MaybeInt
  Function alignment (align N)
.args : FunctionDec->ListFunctionArgSpec
  Function parameters with their types and attributes
.callingConvention : FunctionDec->MaybeCallingConvention
  Calling convention (fastcc, coldcc, etc.)
.fprefix : FunctionDec->MaybeLExpr
  Prefix data (prefix Constant)
.gc : FunctionDec->MaybeString
  Garbage collector name (gc "name")
.name : FunctionDec->String
  Function name (without @ prefix)
.prologue : FunctionDec->MaybeLExpr
  Prologue data (prologue Constant)
.returnAttrs : FunctionDec->ListAttribute
  Return value attributes
.returnType : FunctionDec->LType
  Return type
.symbolInfo : FunctionDec->SymbolInfo
  Symbol information (linkage, preemption, visibility, DLL storage)
.tags : FunctionDec->ListLTag
  Additional metadata tags

Hints:
EncodeFCMFunctionDecCPtr
EncodeATMFunctionDecVString
WalkFunctionDecLClause
.name : FunctionDec->String
  Function name (without @ prefix)

Visibility: public export
name : FunctionDec->String
  Function name (without @ prefix)

Visibility: public export
.symbolInfo : FunctionDec->SymbolInfo
  Symbol information (linkage, preemption, visibility, DLL storage)

Visibility: public export
symbolInfo : FunctionDec->SymbolInfo
  Symbol information (linkage, preemption, visibility, DLL storage)

Visibility: public export
.callingConvention : FunctionDec->MaybeCallingConvention
  Calling convention (fastcc, coldcc, etc.)

Visibility: public export
callingConvention : FunctionDec->MaybeCallingConvention
  Calling convention (fastcc, coldcc, etc.)

Visibility: public export
.returnAttrs : FunctionDec->ListAttribute
  Return value attributes

Visibility: public export
returnAttrs : FunctionDec->ListAttribute
  Return value attributes

Visibility: public export
.returnType : FunctionDec->LType
  Return type

Visibility: public export
returnType : FunctionDec->LType
  Return type

Visibility: public export
.args : FunctionDec->ListFunctionArgSpec
  Function parameters with their types and attributes

Visibility: public export
args : FunctionDec->ListFunctionArgSpec
  Function parameters with their types and attributes

Visibility: public export
.addressInfo : FunctionDec->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)

Visibility: public export
addressInfo : FunctionDec->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)

Visibility: public export
.alignment : FunctionDec->MaybeInt
  Function alignment (align N)

Visibility: public export
alignment : FunctionDec->MaybeInt
  Function alignment (align N)

Visibility: public export
.gc : FunctionDec->MaybeString
  Garbage collector name (gc "name")

Visibility: public export
gc : FunctionDec->MaybeString
  Garbage collector name (gc "name")

Visibility: public export
.fprefix : FunctionDec->MaybeLExpr
  Prefix data (prefix Constant)

Visibility: public export
fprefix : FunctionDec->MaybeLExpr
  Prefix data (prefix Constant)

Visibility: public export
.prologue : FunctionDec->MaybeLExpr
  Prologue data (prologue Constant)

Visibility: public export
prologue : FunctionDec->MaybeLExpr
  Prologue data (prologue Constant)

Visibility: public export
.tags : FunctionDec->ListLTag
  Additional metadata tags

Visibility: public export
tags : FunctionDec->ListLTag
  Additional metadata tags

Visibility: public export
recordAlias : Type
  Alias definition.
Models LLVM IR alias definitions like:
```llvm
@alias = alias i32, i32* @original
@weak_alias = weak alias i8, i8* @target
@thread_alias = thread_local alias i32, i32* @tls_var
```

Totality: total
Visibility: public export
Constructor: 
MkAlias : String->SymbolInfo->MaybeThreadLocality->MaybeAddressInfo->LType->String->ListLTag->Alias

Projections:
.addressInfo : Alias->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)
.aliasTpe : Alias->LType
  Type of the alias
.aliasee : Alias->String
  Name of the aliasee (the target being aliased)
.name : Alias->String
  Alias name (without @ prefix)
.symbolInfo : Alias->SymbolInfo
  Symbol information (linkage, preemption, visibility, DLL storage)
.tags : Alias->ListLTag
  Additional metadata tags
.threadLocality : Alias->MaybeThreadLocality
  Thread-local storage model

Hints:
EncodeFCMAliasCPtr
EncodeATMAliasVString
WalkAliasLClause
.name : Alias->String
  Alias name (without @ prefix)

Visibility: public export
name : Alias->String
  Alias name (without @ prefix)

Visibility: public export
.symbolInfo : Alias->SymbolInfo
  Symbol information (linkage, preemption, visibility, DLL storage)

Visibility: public export
symbolInfo : Alias->SymbolInfo
  Symbol information (linkage, preemption, visibility, DLL storage)

Visibility: public export
.threadLocality : Alias->MaybeThreadLocality
  Thread-local storage model

Visibility: public export
threadLocality : Alias->MaybeThreadLocality
  Thread-local storage model

Visibility: public export
.addressInfo : Alias->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)

Visibility: public export
addressInfo : Alias->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)

Visibility: public export
.aliasTpe : Alias->LType
  Type of the alias

Visibility: public export
aliasTpe : Alias->LType
  Type of the alias

Visibility: public export
.aliasee : Alias->String
  Name of the aliasee (the target being aliased)

Visibility: public export
aliasee : Alias->String
  Name of the aliasee (the target being aliased)

Visibility: public export
.tags : Alias->ListLTag
  Additional metadata tags

Visibility: public export
tags : Alias->ListLTag
  Additional metadata tags

Visibility: public export
recordIFunc : Type
  Indirect function (IFunc) definition.
Models LLVM IR IFunc definitions like:
```llvm
@ifunc = ifunc i32 (i32), i32 (i32)* @resolver
@weak_ifunc = weak ifunc void (), void ()* @my_resolver
```

Totality: total
Visibility: public export
Constructor: 
MkIFunc : String->SymbolInfo->MaybeThreadLocality->MaybeAddressInfo->LType->LType->String->ListLTag->IFunc

Projections:
.addressInfo : IFunc->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)
.funTpe : IFunc->LType
  Function type
.name : IFunc->String
  IFunc name (without @ prefix)
.resTpe : IFunc->LType
  Resolver function type
.resolver : IFunc->String
  Name of the resolver function
.symbolInfo : IFunc->SymbolInfo
  Symbol information (linkage, preemption, visibility)
.tags : IFunc->ListLTag
  Additional metadata tags
.threadLocality : IFunc->MaybeThreadLocality
  Thread-local storage model

Hints:
EncodeFCMIFuncCPtr
EncodeATMIFuncVString
WalkIFuncLClause
.name : IFunc->String
  IFunc name (without @ prefix)

Visibility: public export
name : IFunc->String
  IFunc name (without @ prefix)

Visibility: public export
.symbolInfo : IFunc->SymbolInfo
  Symbol information (linkage, preemption, visibility)

Visibility: public export
symbolInfo : IFunc->SymbolInfo
  Symbol information (linkage, preemption, visibility)

Visibility: public export
.threadLocality : IFunc->MaybeThreadLocality
  Thread-local storage model

Visibility: public export
threadLocality : IFunc->MaybeThreadLocality
  Thread-local storage model

Visibility: public export
.addressInfo : IFunc->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)

Visibility: public export
addressInfo : IFunc->MaybeAddressInfo
  Address significance (unnamed_addr, local_unnamed_addr)

Visibility: public export
.funTpe : IFunc->LType
  Function type

Visibility: public export
funTpe : IFunc->LType
  Function type

Visibility: public export
.resTpe : IFunc->LType
  Resolver function type

Visibility: public export
resTpe : IFunc->LType
  Resolver function type

Visibility: public export
.resolver : IFunc->String
  Name of the resolver function

Visibility: public export
resolver : IFunc->String
  Name of the resolver function

Visibility: public export
.tags : IFunc->ListLTag
  Additional metadata tags

Visibility: public export
tags : IFunc->ListLTag
  Additional metadata tags

Visibility: public export
dataLClause : Type
  Top-level clauses that can appear in an LLVM module.
Each clause represents a different kind of top-level declaration.

Totality: total
Visibility: public export
Constructors:
GlobalDefC : GVarDef->LClause
  Global variable definition (@var = ...)
FunctionDefC : FunctionDef->LClause
  Function definition with body (define ...)
FunctionDecC : FunctionDec->LClause
  Function declaration without body (declare ...)
AliasC : Alias->LClause
  Alias definition (@alias = alias ...)
IFuncC : IFunc->LClause
  IFunc definition (@ifunc = ifunc ...)
MetadataC : String->Metadata->LClause
  Named metadata (!name = !{...})
AttributeGroupC : AttributeGroupDef->LClause
  Attribute group definition (attributes #N = {...})
OtherC : String->LClause
  Other top-level constructs (e.g., inline assembly, target info)

Hints:
EncodeFCMLClauseCPtr
EncodeATMLClauseVString
EndableLModuleLClause
StartableLModuleLClause
WalkGVarDefLClause
WalkFunctionDefLClause
WalkFunctionDecLClause
WalkAliasLClause
WalkIFuncLClause
WalkAttributeGroupDefLClause
recordLModule : Type
  LLVM Module structure.
Models a complete LLVM IR module like:
```llvm
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64..."
target triple = "x86_64-pc-linux-gnu"

@global_var = global i32 42

define i32 @main() {
| ret i32 0
}
```

Totality: total
Visibility: public export
Constructor: 
MkLModule : MaybeString->MaybeString->ListLClause->Maybe (ListLTag) ->LModule

Projections:
.dataLayout : LModule->MaybeString
  Target data layout string (target datalayout = "...")
.tags : LModule->Maybe (ListLTag)
  Module-level metadata tags
.target : LModule->MaybeString
  Target triple string (target triple = "...")
.text : LModule->ListLClause
  List of top-level declarations and definitions

Hints:
EncodeFCMLModuleCPtr
EncodeATMLModuleVString
EndableLModuleLClause
StartableLModuleLClause
.dataLayout : LModule->MaybeString
  Target data layout string (target datalayout = "...")

Visibility: public export
dataLayout : LModule->MaybeString
  Target data layout string (target datalayout = "...")

Visibility: public export
.target : LModule->MaybeString
  Target triple string (target triple = "...")

Visibility: public export
target : LModule->MaybeString
  Target triple string (target triple = "...")

Visibility: public export
.text : LModule->ListLClause
  List of top-level declarations and definitions

Visibility: public export
text : LModule->ListLClause
  List of top-level declarations and definitions

Visibility: public export
.tags : LModule->Maybe (ListLTag)
  Module-level metadata tags

Visibility: public export
tags : LModule->Maybe (ListLTag)
  Module-level metadata tags

Visibility: public export
recordBytecode : Type
  LLVM Bytecode container.
Represents a collection of LLVM modules, typically used for
multi-module compilation units or linked programs.

Totality: total
Visibility: public export
Constructor: 
MkBytecode : MaybeString->List (String, LModule) ->Bytecode

Projections:
.mainMod : Bytecode->MaybeString
.modules : Bytecode->List (String, LModule)
  List of LLVM modules in this bytecode unit
.mainMod : Bytecode->MaybeString
Visibility: public export
mainMod : Bytecode->MaybeString
Visibility: public export
.modules : Bytecode->List (String, LModule)
  List of LLVM modules in this bytecode unit

Visibility: public export
modules : Bytecode->List (String, LModule)
  List of LLVM modules in this bytecode unit

Visibility: public export