The llvm-extra package

The Low-Level Virtual-Machine is a compiler back-end with optimizer.
You may also call it a high-level portable assembler.
This package provides various utility functions
for the Haskell interface to LLVM, for example:

arithmetic operations with better type inference than the llvm interface
in LLVM.Extra.Arithmetic,

a type class for loading and storing sets of values with one command (macro)
in LLVM.Extra.Memory,

support instance declarations of LLVM classes
in LLVM.Extra.Class,

handling of termination by a custom monad on top of CodeGenFunction
in LLVM.Extra.MaybeContinuation

various kinds of loops (while) and condition structures (if-then-else)
in LLVM.Extra.Control

automatic adaption to target specific extensions,
currently used for access of vector operations
that are specific to an SSE level on x86 processors
in LLVM.Extra.Extension
(On x86 architectures we depend on the cpuid package
that is needed for automatic detection of available features.)