Idris2Doc : Data.LLVM.IR.Ops

Data.LLVM.IR.Ops

Definitions

recordCaseBranch : Type
  Case branch for switch instructions.
Models individual cases in LLVM IR switch statements like:
```llvm
switch i32 %val, label %default [
| i32 1, label %case1
| i32 2, label %case2
]
```

Totality: total
Visibility: public export
Constructor: 
MkCaseBranch : LType->LExpr->Label->CaseBranch

Projections:
.label : CaseBranch->Label
  Target label for this case
.tpe : CaseBranch->LType
  Type of the case value
.value : CaseBranch->LExpr
  Case value to match

Hints:
EncodeFCMCaseBranchCPtr
EncodeATMCaseBranchVString
.tpe : CaseBranch->LType
  Type of the case value

Visibility: public export
tpe : CaseBranch->LType
  Type of the case value

Visibility: public export
.value : CaseBranch->LExpr
  Case value to match

Visibility: public export
value : CaseBranch->LExpr
  Case value to match

Visibility: public export
.label : CaseBranch->Label
  Target label for this case

Visibility: public export
label : CaseBranch->Label
  Target label for this case

Visibility: public export
recordInvokeCall : Type
  Invoke instruction call specification.
Models LLVM IR invoke instructions like:
```llvm
%result = invoke fastcc i32 @function(i32 %arg)
| to label %normal unwind label %exception
```

Totality: total
Visibility: public export
Constructor: 
MkInvokeCall : MaybeCallingConvention->ListAttribute->MaybeAddressSpace->LType->LExpr->ListLExpr->Label->Label->InvokeCall

Projections:
.addressSpace : InvokeCall->MaybeAddressSpace
  Address space for the function pointer
.args : InvokeCall->ListLExpr
  Function arguments
.cc : InvokeCall->MaybeCallingConvention
  Calling convention (fastcc, coldcc, etc.)
.fnval : InvokeCall->LExpr
  Function value or pointer
.normal : InvokeCall->Label
  Normal execution continuation label
.returnAttrs : InvokeCall->ListAttribute
  Return value attributes
.tpe : InvokeCall->LType
  Function type
.unwind : InvokeCall->Label
  Exception unwind label

Hints:
EncodeFCMInvokeCallCPtr
EncodeATMInvokeCallVString
.cc : InvokeCall->MaybeCallingConvention
  Calling convention (fastcc, coldcc, etc.)

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

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

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

Visibility: public export
.addressSpace : InvokeCall->MaybeAddressSpace
  Address space for the function pointer

Visibility: public export
addressSpace : InvokeCall->MaybeAddressSpace
  Address space for the function pointer

Visibility: public export
.tpe : InvokeCall->LType
  Function type

Visibility: public export
tpe : InvokeCall->LType
  Function type

Visibility: public export
.fnval : InvokeCall->LExpr
  Function value or pointer

Visibility: public export
fnval : InvokeCall->LExpr
  Function value or pointer

Visibility: public export
.args : InvokeCall->ListLExpr
  Function arguments

Visibility: public export
args : InvokeCall->ListLExpr
  Function arguments

Visibility: public export
.normal : InvokeCall->Label
  Normal execution continuation label

Visibility: public export
normal : InvokeCall->Label
  Normal execution continuation label

Visibility: public export
.unwind : InvokeCall->Label
  Exception unwind label

Visibility: public export
unwind : InvokeCall->Label
  Exception unwind label

Visibility: public export
recordBrCall : Type
  Call branch instruction specification.
Models LLVM IR callbr instructions like:
```llvm
callbr void asm "", "r,!i"(i32 %x)
| to label %fallthrough [label %indirect1, label %indirect2]
```

Totality: total
Visibility: public export
Constructor: 
MkBrCall : MaybeCallingConvention->ListAttribute->MaybeAddressSpace->LType->LExpr->ListLExpr->Label->ListLabel->BrCall

Projections:
.addressSpace : BrCall->MaybeAddressSpace
  Address space for the function pointer
.args : BrCall->ListLExpr
  Function arguments
.cc : BrCall->MaybeCallingConvention
  Calling convention
.fallthrough : BrCall->Label
  Fallthrough label for normal execution
.fnval : BrCall->LExpr
  Function value or pointer
.indirect : BrCall->ListLabel
  Possible indirect branch targets
.returnAttrs : BrCall->ListAttribute
  Return value attributes
.tpe : BrCall->LType
  Function type

Hints:
EncodeFCMBrCallCPtr
EncodeATMBrCallVString
.cc : BrCall->MaybeCallingConvention
  Calling convention

Visibility: public export
cc : BrCall->MaybeCallingConvention
  Calling convention

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

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

Visibility: public export
.addressSpace : BrCall->MaybeAddressSpace
  Address space for the function pointer

Visibility: public export
addressSpace : BrCall->MaybeAddressSpace
  Address space for the function pointer

Visibility: public export
.tpe : BrCall->LType
  Function type

Visibility: public export
tpe : BrCall->LType
  Function type

Visibility: public export
.fnval : BrCall->LExpr
  Function value or pointer

Visibility: public export
fnval : BrCall->LExpr
  Function value or pointer

Visibility: public export
.args : BrCall->ListLExpr
  Function arguments

Visibility: public export
args : BrCall->ListLExpr
  Function arguments

Visibility: public export
.fallthrough : BrCall->Label
  Fallthrough label for normal execution

Visibility: public export
fallthrough : BrCall->Label
  Fallthrough label for normal execution

Visibility: public export
.indirect : BrCall->ListLabel
  Possible indirect branch targets

Visibility: public export
indirect : BrCall->ListLabel
  Possible indirect branch targets

Visibility: public export
recordCatchSwitch : Type
  Catch switch instruction specification.
Models LLVM IR catchswitch instructions like:
```llvm
%cs = catchswitch within none [label %handler1, label %handler2]
| unwind to caller
```

Totality: total
Visibility: public export
Constructor: 
MkCatchSwitch : Name->MaybeLabel->ListLabel->MaybeLabel->CatchSwitch

Projections:
.handlers : CatchSwitch->ListLabel
  List of exception handler labels
.name : CatchSwitch->Name
  Name of the catchswitch result
.parent : CatchSwitch->MaybeLabel
  Parent scope (within clause)
.unwind : CatchSwitch->MaybeLabel
  Unwind destination (to caller or label)

Hints:
EncodeFCMCatchSwitchCPtr
EncodeATMCatchSwitchVString
.name : CatchSwitch->Name
  Name of the catchswitch result

Visibility: public export
name : CatchSwitch->Name
  Name of the catchswitch result

Visibility: public export
.parent : CatchSwitch->MaybeLabel
  Parent scope (within clause)

Visibility: public export
parent : CatchSwitch->MaybeLabel
  Parent scope (within clause)

Visibility: public export
.handlers : CatchSwitch->ListLabel
  List of exception handler labels

Visibility: public export
handlers : CatchSwitch->ListLabel
  List of exception handler labels

Visibility: public export
.unwind : CatchSwitch->MaybeLabel
  Unwind destination (to caller or label)

Visibility: public export
unwind : CatchSwitch->MaybeLabel
  Unwind destination (to caller or label)

Visibility: public export
dataTailCall : Type
  Tail call modifiers for function calls.
Models LLVM IR tail call prefixes like:
```llvm
%result = tail call i32 @func(i32 %arg)
%result = musttail call i32 @func(i32 %arg)
%result = notail call i32 @func(i32 %arg)
```

Totality: total
Visibility: public export
Constructors:
Tail : TailCall
  Regular tail call optimization hint
MustTail : TailCall
  Mandatory tail call (must be optimized)
NoTail : TailCall
  Disable tail call optimization

Hints:
EncodeFCMTailCallCEnum
EncodeATMTailCallVString
recordFnCall : Type
  Function call instruction specification.
Models LLVM IR call instructions like:
```llvm
%result = call i32 @function(i32 %arg1, i8* %arg2)
%result = tail call fastcc float @fastfunc(float %x)
call void @procedure()
```

Totality: total
Visibility: public export
Constructor: 
MkFnCall : TailCall->FastMath->MaybeCallingConvention->ListAttribute->MaybeAddressSpace->LType->LExpr->List (WithTypeLExpr) ->ListAttribute->FnCall

Projections:
.addressSpace : FnCall->MaybeAddressSpace
  Address space for the function pointer
.args : FnCall->List (WithTypeLExpr)
  Function arguments with their types
.cc : FnCall->MaybeCallingConvention
  Calling convention
.fastMath : FnCall->FastMath
  Fast math flags for floating point operations
.fnAttrs : FnCall->ListAttribute
  Function attributes
.fnval : FnCall->LExpr
  Function value or pointer
.returnAttrs : FnCall->ListAttribute
  Return value attributes
.tail : FnCall->TailCall
  Tail call modifier
.tpe : FnCall->LType
  Function type

Hints:
EncodeFCMFnCallCPtr
EncodeATMFnCallVString
.tail : FnCall->TailCall
  Tail call modifier

Visibility: public export
tail : FnCall->TailCall
  Tail call modifier

Visibility: public export
.fastMath : FnCall->FastMath
  Fast math flags for floating point operations

Visibility: public export
fastMath : FnCall->FastMath
  Fast math flags for floating point operations

Visibility: public export
.cc : FnCall->MaybeCallingConvention
  Calling convention

Visibility: public export
cc : FnCall->MaybeCallingConvention
  Calling convention

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

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

Visibility: public export
.addressSpace : FnCall->MaybeAddressSpace
  Address space for the function pointer

Visibility: public export
addressSpace : FnCall->MaybeAddressSpace
  Address space for the function pointer

Visibility: public export
.tpe : FnCall->LType
  Function type

Visibility: public export
tpe : FnCall->LType
  Function type

Visibility: public export
.fnval : FnCall->LExpr
  Function value or pointer

Visibility: public export
fnval : FnCall->LExpr
  Function value or pointer

Visibility: public export
.args : FnCall->List (WithTypeLExpr)
  Function arguments with their types

Visibility: public export
args : FnCall->List (WithTypeLExpr)
  Function arguments with their types

Visibility: public export
.fnAttrs : FnCall->ListAttribute
  Function attributes

Visibility: public export
fnAttrs : FnCall->ListAttribute
  Function attributes

Visibility: public export
dataTerminator : Type
  Terminator instructions that end basic blocks.
Models LLVM IR terminator instructions like:
```llvm
ret void
ret i32 %value
br label %target
br i1 %cond, label %true, label %false
switch i32 %val, label %default [ i32 0, label %case0 ]
```

Totality: total
Visibility: public export
Constructors:
RetVoid : Terminator
  Return void from function
Ret : LType->LExpr->Terminator
  Return value from function
CondBr : LExpr->LExpr->LExpr->Terminator
  Conditional branch (br i1 %cond, label %true, label %false)
JumpBr : LExpr->Terminator
  Unconditional branch (br label %target)
Switch : LType->LExpr->Name->ListCaseBranch->Terminator
  Switch statement with multiple cases
IndirectBr : LExpr->ListLExpr->Terminator
  Indirect branch through computed address
Invoke : InvokeCall->Terminator
  Invoke instruction (function call with exception handling)
CallBR : BrCall->Terminator
  Call branch instruction (inline assembly with possible branches)
Resume : LType->LExpr->Terminator
  Resume exception propagation
Unreachable : Terminator
  Unreachable code marker
CatchSwitchOp : CatchSwitch->Terminator
  Catch switch for exception handling
CatchRet : LExpr->Label->Terminator
  Return from catch handler
CleanupRetCaller : LExpr->Terminator
  Return from cleanup to caller
CleanupRet : LExpr->Label->Terminator
  Return from cleanup to specific label

Hints:
EncodeFCMTerminatorCPtr
EncodeATMTerminatorVString
WalkTerminatorLOperation
dataComparison : Type
  Integer comparison predicates for icmp instruction.
Models LLVM IR icmp comparisons like:
```llvm
%result = icmp eq i32 %a, %b
%result = icmp slt i32 %x, %y
```

Totality: total
Visibility: public export
Constructors:
CEq : Comparison
  Equal (==)
CNe : Comparison
  Not equal (!=)
CUGt : Comparison
  Unsigned greater than (>)
CUGe : Comparison
  Unsigned greater than or equal (>=)
CULt : Comparison
  Unsigned less than (<)
CULe : Comparison
  Unsigned less than or equal (<=)
CSGt : Comparison
  Signed greater than (>)
CSGe : Comparison
  Signed greater than or equal (>=)
CSLt : Comparison
  Signed less than (<)
CSLe : Comparison
  Signed less than or equal (<=)
dataWrapping : Type
  Integer overflow wrapping behavior.
Models LLVM IR overflow flags like:
```llvm
%result = add nuw i32 %a, %b ; no unsigned wrap
%result = add nsw i32 %a, %b ; no signed wrap
%result = add nuw nsw i32 %a, %b ; no wrap at all
```

Totality: total
Visibility: public export
Constructors:
NoSigned : Wrapping
  No signed wrap (nsw)
NoUnsigned : Wrapping
  No unsigned wrap (nuw)
NoSignedUnsigned : Wrapping
  No signed or unsigned wrap (nuw nsw)

Hints:
EncodeFCMWrappingCEnum
EncodeATMWrappingVString
dataUnaryOpcode : Type
  Unary operation opcodes.
Models LLVM IR unary instructions like:
```llvm
%result = fneg float %x
```

Totality: total
Visibility: public export
Constructor: 
FNeg : UnaryOpcode
  Floating point negation

Hints:
EncodeFCMUnaryOpcodeCEnum
EncodeATMUnaryOpcodeVString
Walk (UnaryOpcode, (LType, LExpr)) LOperation
dataBinaryOpcode : Type
  Binary operation opcodes for arithmetic and logical operations.
Models LLVM IR binary instructions like:
```llvm
%result = add i32 %a, %b
%result = fadd float %x, %y
%result = and i1 %p, %q
%result = shl i32 %val, 2
```
All the simple binary opcodes

Totality: total
Visibility: public export
Constructors:
Add : BinaryOpcode
  Integer addition
AddWrap : Wrapping->BinaryOpcode
  Integer addition with wrap flags
FAdd : FastMath->BinaryOpcode
  Floating point addition with fast math
Sub : BinaryOpcode
  Integer subtraction
SubWrap : Wrapping->BinaryOpcode
  Integer subtraction with wrap flags
FSub : FastMath->BinaryOpcode
  Floating point subtraction with fast math
Mul : BinaryOpcode
  Integer multiplication
MulWrap : Wrapping->BinaryOpcode
  Integer multiplication with wrap flags
FMul : FastMath->BinaryOpcode
  Floating point multiplication with fast math
UDiv : BinaryOpcode
  Unsigned integer division
UDivExact : BinaryOpcode
  Exact unsigned integer division
SDiv : BinaryOpcode
  Signed integer division
SDivExact : BinaryOpcode
  Exact signed integer division
FDiv : FastMath->BinaryOpcode
  Floating point division with fast math
URem : BinaryOpcode
  Unsigned integer remainder
SRem : BinaryOpcode
  Signed integer remainder
FRem : FastMath->BinaryOpcode
  Floating point remainder with fast math
Shl : BinaryOpcode
  Shift left
ShlWrap : Wrapping->BinaryOpcode
  Shift left with wrap flags
LShr : BinaryOpcode
  Logical shift right
LShrExact : BinaryOpcode
  Exact logical shift right
AShr : BinaryOpcode
  Arithmetic shift right
AShrExact : BinaryOpcode
  Exact arithmetic shift right
And : BinaryOpcode
  Bitwise AND
Or : BinaryOpcode
  Bitwise OR
DisjointOr : BinaryOpcode
  Disjoint bitwise OR (operands have no common set bits)
Xor : BinaryOpcode
  Bitwise XOR

Hints:
EncodeFCMBinaryOpcodeCPtr
EncodeATMBinaryOpcodeVString
Walk (BinaryOpcode, (LType, (LExpr, LExpr))) LOperation
dataVectorOpcode : Type
  Vector operation opcodes.
Models LLVM IR vector manipulation instructions like:
```llvm
%result = insertelement <4 x i32> %vec, i32 %val, i32 0
%result = extractelement <4 x i32> %vec, i32 2
%result = shufflevector <4 x i32> %v1, <4 x i32> %v2, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
```

Totality: total
Visibility: public export
Constructors:
InsertElement : WithTypeLExpr->WithTypeLExpr->WithTypeLExpr->VectorOpcode
  Insert element into vector at specified index
ShuffleVector : WithTypeLExpr->WithTypeLExpr->WithTypeLExpr->VectorOpcode
  Shuffle two vectors according to mask
ExtractElement : WithTypeLExpr->WithTypeLExpr->VectorOpcode
  Extract element from vector at specified index

Hints:
EncodeFCMVectorOpcodeCPtr
EncodeATMVectorOpcodeVString
WalkVectorOpcodeLOperation
dataAggregateOpcode : Type
  Aggregate operation opcodes for structs and arrays.
Models LLVM IR aggregate manipulation instructions like:
```llvm
%result = extractvalue {i32, float} %agg, 0
%result = insertvalue {i32, float} %agg, i32 42, 0
```

Totality: total
Visibility: public export
Constructors:
ExtractValue : WithTypeLExpr->Nat->AggregateOpcode
  Extract value from aggregate at specified index
InsertValue : WithTypeLExpr->WithTypeLExpr->Nat->AggregateOpcode
  Insert value into aggregate at specified index

Hints:
EncodeFCMAggregateOpcodeCPtr
EncodeATMAggregateOpcodeVString
WalkAggregateOpcodeLOperation
dataConversionOpCode : Type
  Type conversion operation opcodes.
Models LLVM IR conversion instructions like:
```llvm
%result = trunc i32 %val to i16
%result = zext i16 %val to i32
%result = bitcast i8* %ptr to i32*
%result = addrspacecast i8* %ptr to i8 addrspace(1)*
```

Totality: total
Visibility: public export
Constructors:
Trunc : Wrapping->ConversionOpCode
  Truncate integer to smaller type
ZExt : ConversionOpCode
  Zero extend integer to larger type
SExt : ConversionOpCode
  Sign extend integer to larger type
FPTrunc : FastMath->ConversionOpCode
  Truncate floating point to smaller precision
FPExt : FastMath->ConversionOpCode
  Extend floating point to larger precision
FPToUi : ConversionOpCode
  Convert floating point to unsigned integer
FPToSi : ConversionOpCode
  Convert floating point to signed integer
UiToFP : ConversionOpCode
  Convert unsigned integer to floating point
SiToFP : ConversionOpCode
  Convert signed integer to floating point
PtrToInt : ConversionOpCode
  Convert pointer to integer
BitCast : ConversionOpCode
  Bitwise go between types of same size
AddrSpaceCast : AddressSpace->ConversionOpCode
  Convert pointer between address spaces

Hints:
EncodeFCMConversionOpCodeCPtr
EncodeATMConversionOpCodeVString
Walk (ConversionOpCode, (LType, (LExpr, LType))) LOperation
dataCompareOpcode : Type
  Comparison operation opcodes.
Models LLVM IR comparison instructions like:
```llvm
%result = icmp eq i32 %a, %b
%result = fcmp olt float %x, %y
%result = fcmp true float %a, %b ; always true
```

Totality: total
Visibility: public export
Constructors:
ICmp : Comparison->CompareOpcode
  Integer comparison
ICmpSign : Comparison->CompareOpcode
  Integer comparison with sign information
FCmpOrd : FastMath->Comparison->CompareOpcode
  Ordered floating point comparison
FCmpUnOrd : FastMath->Comparison->CompareOpcode
  Unordered floating point comparison
FCmpFalse : CompareOpcode
  Always false comparison
FCmpTrue : CompareOpcode
  Always true comparison
dataMiscOpcode : Type
  Miscellaneous operation opcodes.
Models LLVM IR miscellaneous instructions like:
```llvm
%result = phi i32 [ %val1, %bb1 ], [ %val2, %bb2 ]
%result = select i1 %cond, i32 %true_val, i32 %false_val
%result = freeze i32 %val
```

Totality: total
Visibility: public export
Constructors:
Phi : LType->List (LExpr, Label) ->MiscOpcode
  PHI node for SSA form
Select : FastMath->WithTypeLExpr->WithTypeLExpr->WithTypeLExpr->MiscOpcode
  Conditional select instruction
Freeze : WithTypeLExpr->MiscOpcode
  Freeze instruction (converts poison to undef)
FnCallOp : FnCall->MiscOpcode
  Function call operation

Hints:
EncodeFCMMiscOpcodeCPtr
EncodeATMMiscOpcodeVString
WalkMiscOpcodeLOperation
dataAtomicOrder : Type
Totality: total
Visibility: public export
Constructors:
Unordered : AtomicOrder
  No atomic ordering
Monotonic : AtomicOrder
  Monotonic atomic ordering
Acquire : AtomicOrder
  Acquire atomic ordering
Release : AtomicOrder
  Release atomic ordering
AcquireRelease : AtomicOrder
  Acquire-release atomic ordering
SequentiallyConsistent : AtomicOrder
  Sequentially consistent atomic ordering

Hints:
EncodeFCMAtomicOrderCEnum
EncodeATMAtomicOrderVString
dataMemoryOpcode : Type
  Memory operation opcodes for memory allocation and access.
Models LLVM IR memory instructions like:
```llvm
%ptr = alloca i32, align 4
%ptr = alloca i32, i32 %count, align 8
%ptr = alloca i32, align 4, addrspace(1)
```

Totality: total
Visibility: public export
Constructors:
Alloc : LType->Maybe (WithTypeNat) ->MaybeNat->MaybeAddressSpace->MemoryOpcode
  <result> = alloca [inalloca] <type> [, <ty> <NumElements>] [, align <alignment>] [, addrspace(<num>)]     ; yields type addrspace(num)*:result
Stack allocation instruction
LoadRegular : Bool->LType->LExpr->MaybeNat->Bool->Bool->Bool->Bool->MaybeMetadata->MaybeMetadata->MaybeNat->Bool->MemoryOpcode
  Many of the args are written as Bools, as the spec has them as useless metadata
LoadAtomic : Bool->LType->LExpr->MaybeString->MaybeAtomicOrder->MaybeNat->Bool->Bool->MemoryOpcode
StoreRegular : Bool->WithTypeLExpr->LExpr->MaybeNat->Bool->Bool->MemoryOpcode
StoreAtomic : Bool->WithTypeLExpr->LExpr->MaybeString->MaybeAtomicOrder->MaybeNat->Bool->MemoryOpcode
Fence : MaybeString->MaybeAtomicOrder->MemoryOpcode

Hints:
EncodeFCMMemoryOpcodeCPtr
EncodeATMMemoryOpcodeVString
WalkMemoryOpcodeLOperation
dataCatchClause : Type
Totality: total
Visibility: public export
Constructors:
Catching : LType->LExpr->CatchClause
  Catch clause for landing pad instructions
Filtering : LType->LExpr->CatchClause
  Filter clause for landing pad instructions

Hints:
EncodeFCMCatchClauseCPtr
EncodeATMCatchClauseVString
dataExceptOpcode : Type
Totality: total
Visibility: public export
Constructors:
LandingPad : LType->ListCatchClause->ExceptOpcode
LandingPadCleanup : LType->ListCatchClause->ExceptOpcode
CatchPad : Name->LExpr->ExceptOpcode
CleanupPad : Name->LExpr->ExceptOpcode

Hints:
EncodeFCMExceptOpcodeCPtr
EncodeATMExceptOpcodeVString
WalkExceptOpcodeLOperation
dataLOperation : Type
  LLVM operations categorized by type.
Represents all possible LLVM IR operations.

Totality: total
Visibility: public export
Constructors:
TerminatorOp : Terminator->LOperation
  Terminator instruction (ends basic blocks)
UnaryOp : UnaryOpcode->LType->LExpr->LOperation
  Unary operation
BinaryOp : BinaryOpcode->LType->LExpr->LExpr->LOperation
  Binary operation
VectorOp : VectorOpcode->LOperation
  Vector operation
AggregateOp : AggregateOpcode->LOperation
  Aggregate operation
ConversionOp : ConversionOpCode->WithTypeLExpr->LType->LOperation
  Type conversion operation
MiscOp : MiscOpcode->LOperation
  Miscellaneous operation
MemoryOp : MemoryOpcode->LOperation
  Memory operation
ExceptOp : ExceptOpcode->LOperation
  Exception handling operation 

Hints:
EncodeFCMLOperationCPtr
EncodeATMLOperationVString
EndableBlockLOperation
LBlock (ListLStatement, LOperation)
WalkLOperationLStatement
WalkTerminatorLOperation
Walk (UnaryOpcode, (LType, LExpr)) LOperation
Walk (BinaryOpcode, (LType, (LExpr, LExpr))) LOperation
WalkVectorOpcodeLOperation
WalkAggregateOpcodeLOperation
Walk (ConversionOpCode, (LType, (LExpr, LType))) LOperation
WalkMiscOpcodeLOperation
WalkMemoryOpcodeLOperation
WalkExceptOpcodeLOperation
dataLStatement : Type
  LLVM statements that can appear in basic blocks.
Models different forms of LLVM IR statements like:
```llvm
%result = add i32 %a, %b ; targeted assignment
call void @function() ; discarded result
entry: ; basic block label
```

Totality: total
Visibility: public export
Constructor: 
Operation : Name->LOperation->LStatement
  Operation with named result (%name = operation)

Hints:
EncodeFCMLStatementCPtr
EncodeATMLStatementVString
EndableBlockLStatement
LBlock (MaybeName->ListLStatement)
LBlock (ListLStatement, LOperation)
StartableBlockLStatement
WalkLOperationLStatement
recordBlock : Type
  Basic block 

Totality: total
Visibility: public export
Constructor: 
MkBlock : String->ListLStatement->Terminator->Block

Projections:
.name : Block->String
  Block name (without label prefix)
.statements : Block->ListLStatement
  List of statements in the block
.terminator : Block->Terminator
  Terminator instruction that ends the block

Hints:
EncodeFCMBlockCPtr
EncodeATMBlockVString
EndableBlockLStatement
EndableBlockLOperation
StartableBlockLStatement
.name : Block->String
  Block name (without label prefix)

Visibility: public export
name : Block->String
  Block name (without label prefix)

Visibility: public export
.statements : Block->ListLStatement
  List of statements in the block

Visibility: public export
statements : Block->ListLStatement
  List of statements in the block

Visibility: public export
.terminator : Block->Terminator
  Terminator instruction that ends the block

Visibility: public export
terminator : Block->Terminator
  Terminator instruction that ends the block

Visibility: public export