Turn `compareByteArrays#` out-of-line primop into inline primop
[ghc.git] / compiler / llvmGen / Llvm.hs
1 -- ----------------------------------------------------------------------------
2 -- | This module supplies bindings to generate Llvm IR from Haskell
3 -- (<http://www.llvm.org/docs/LangRef.html>).
4 --
5 -- Note: this module is developed in a demand driven way. It is no complete
6 -- LLVM binding library in Haskell, but enough to generate code for GHC.
7 --
8 -- This code is derived from code taken from the Essential Haskell Compiler
9 -- (EHC) project (<http://www.cs.uu.nl/wiki/Ehc/WebHome>).
10 --
11
12 module Llvm (
13
14 -- * Modules, Functions and Blocks
15 LlvmModule(..),
16
17 LlvmFunction(..), LlvmFunctionDecl(..),
18 LlvmFunctions, LlvmFunctionDecls,
19 LlvmStatement(..), LlvmExpression(..),
20 LlvmBlocks, LlvmBlock(..), LlvmBlockId,
21 LlvmParamAttr(..), LlvmParameter,
22
23 -- * Atomic operations
24 LlvmAtomicOp(..),
25
26 -- * Fence synchronization
27 LlvmSyncOrdering(..),
28
29 -- * Call Handling
30 LlvmCallConvention(..), LlvmCallType(..), LlvmParameterListType(..),
31 LlvmLinkageType(..), LlvmFuncAttr(..),
32
33 -- * Operations and Comparisons
34 LlvmCmpOp(..), LlvmMachOp(..), LlvmCastOp(..),
35
36 -- * Variables and Type System
37 LlvmVar(..), LlvmStatic(..), LlvmLit(..), LlvmType(..),
38 LlvmAlias, LMGlobal(..), LMString, LMSection, LMAlign,
39 LMConst(..),
40
41 -- ** Some basic types
42 i64, i32, i16, i8, i1, i8Ptr, llvmWord, llvmWordPtr,
43
44 -- ** Metadata types
45 MetaExpr(..), MetaAnnot(..), MetaDecl(..), MetaId(..),
46
47 -- ** Operations on the type system.
48 isGlobal, getLitType, getVarType,
49 getLink, getStatType, pVarLift, pVarLower,
50 pLift, pLower, isInt, isFloat, isPointer, isVector, llvmWidthInBits,
51
52 -- * Pretty Printing
53 ppLit, ppName, ppPlainName,
54 ppLlvmModule, ppLlvmComments, ppLlvmComment, ppLlvmGlobals,
55 ppLlvmGlobal, ppLlvmFunctionDecls, ppLlvmFunctionDecl, ppLlvmFunctions,
56 ppLlvmFunction, ppLlvmAlias, ppLlvmAliases, ppLlvmMetas, ppLlvmMeta,
57
58 ) where
59
60 import Llvm.AbsSyn
61 import Llvm.MetaData
62 import Llvm.PpLlvm
63 import Llvm.Types
64