summaryrefslogtreecommitdiff
path: root/compiler/llvmGen/Llvm.hs
blob: 7a322bd86f2b1688ae92b12e0af6fca42ae5fafa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
-- ----------------------------------------------------------------------------
-- | This module supplies bindings to generate Llvm IR from Haskell
-- (<http://www.llvm.org/docs/LangRef.html>).
--
-- Note: this module is developed in a demand driven way. It is no complete
-- LLVM binding library in Haskell, but enough to generate code for GHC.
--
-- This code is derived from code taken from the Essential Haskell Compiler
-- (EHC) project (<http://www.cs.uu.nl/wiki/Ehc/WebHome>).
--

module Llvm (

        -- * Modules, Functions and Blocks
        LlvmModule(..),

        LlvmFunction(..), LlvmFunctionDecl(..),
        LlvmFunctions, LlvmFunctionDecls,
        LlvmStatement(..), LlvmExpression(..),
        LlvmBlocks, LlvmBlock(..), LlvmBlockId,

        -- * Call Handling
        LlvmCallConvention(..), LlvmCallType(..), LlvmParameterListType(..),
        LlvmLinkageType(..), LlvmFuncAttr(..),

        -- * Operations and Comparisons
        LlvmCmpOp(..), LlvmMachOp(..), LlvmCastOp(..),

        -- * Variables and Type System
        LlvmVar(..), LlvmStatic(..), LlvmLit(..), LlvmType(..),
        LMGlobal, LMString, LMConstant,

        -- ** Some basic types
        i64, i32, i16, i8, i1, llvmWord, llvmWordPtr,

        -- ** Operations on the type system.
        isGlobal, getLitType, getLit, getName, getPlainName, getVarType,
        getStatType, getGlobalVar, getGlobalType, pVarLower, pLift, pLower,
        isInt, isFloat, isPointer, llvmWidthInBits,

        -- * Pretty Printing
        ppLlvmModule, ppLlvmComments, ppLlvmComment, ppLlvmConstants,
        ppLlvmConstant, ppLlvmGlobals, ppLlvmGlobal, ppLlvmFunctionDecls,
        ppLlvmFunctionDecl, ppLlvmFunctions, ppLlvmFunction, ppLlvmType,
        ppLlvmTypes, llvmSDoc

    ) where

import Llvm.AbsSyn
import Llvm.PpLlvm
import Llvm.Types