Base LLVM Code Generation module
Contains functions useful through out the code generator.
- type LlvmCmmTop = GenCmmTop [LlvmData] (Maybe CmmStatics) (ListGraph LlvmStatement)
- type LlvmBasicBlock = GenBasicBlock LlvmStatement
- type LlvmUnresData = (CLabel, Section, LlvmType, [UnresStatic])
- type LlvmData = ([LMGlobal], [LlvmType])
- type UnresLabel = CmmLit
- type UnresStatic = Either UnresLabel LlvmStatic
- type LlvmVersion = Int
- defaultLlvmVersion :: LlvmVersion
- data LlvmEnv
- initLlvmEnv :: LlvmEnv
- clearVars :: LlvmEnv -> LlvmEnv
- varLookup, funLookup :: Uniquable key => key -> LlvmEnv -> Maybe LlvmType
- varInsert, funInsert :: Uniquable key => key -> LlvmType -> LlvmEnv -> LlvmEnv
- getLlvmVer :: LlvmEnv -> LlvmVersion
- setLlvmVer :: LlvmVersion -> LlvmEnv -> LlvmEnv
- cmmToLlvmType :: CmmType -> LlvmType
- widthToLlvmFloat :: Width -> LlvmType
- widthToLlvmInt :: Width -> LlvmType
- llvmFunTy :: LlvmType
- llvmFunSig :: CLabel -> LlvmLinkageType -> LlvmFunctionDecl
- llvmStdFunAttrs :: [LlvmFuncAttr]
- llvmFunAlign :: LMAlign
- llvmInfAlign :: LMAlign
- llvmPtrBits :: Int
- mkLlvmFunc :: CLabel -> LlvmLinkageType -> LMSection -> LlvmBlocks -> LlvmFunction
- tysToParams :: [LlvmType] -> [LlvmParameter]
- strCLabel_llvm :: CLabel -> LMString
- genCmmLabelRef :: CLabel -> LMGlobal
- genStringLabelRef :: LMString -> LMGlobal
Documentation
type LlvmCmmTop = GenCmmTop [LlvmData] (Maybe CmmStatics) (ListGraph LlvmStatement)Source
type LlvmUnresData = (CLabel, Section, LlvmType, [UnresStatic])Source
Unresolved code. Of the form: (data label, data type, unresolved data)
type UnresLabel = CmmLitSource
An unresolved Label.
Labels are unresolved when we haven't yet determined if they are defined in the module we are currently compiling, or an external one.
type LlvmVersion = IntSource
LLVM Version Number
defaultLlvmVersion :: LlvmVersionSource
The LLVM Version we assume if we don't know
Get initial Llvm environment.
varLookup, funLookup :: Uniquable key => key -> LlvmEnv -> Maybe LlvmTypeSource
Lookup functions in the environment.
varInsert, funInsert :: Uniquable key => key -> LlvmType -> LlvmEnv -> LlvmEnvSource
Insert functions into the environment.
getLlvmVer :: LlvmEnv -> LlvmVersionSource
Get the LLVM version we are generating code for
setLlvmVer :: LlvmVersion -> LlvmEnv -> LlvmEnvSource
Set the LLVM version we are generating code for
cmmToLlvmType :: CmmType -> LlvmTypeSource
Translate a basic CmmType to an LlvmType.
widthToLlvmFloat :: Width -> LlvmTypeSource
Translate a Cmm Float Width to a LlvmType.
widthToLlvmInt :: Width -> LlvmTypeSource
Translate a Cmm Bit Width to a LlvmType.
llvmFunSig :: CLabel -> LlvmLinkageType -> LlvmFunctionDeclSource
Llvm Function signature
llvmStdFunAttrs :: [LlvmFuncAttr]Source
Llvm standard fun attributes
Alignment to use for functions
Alignment to use for into tables
Pointer width
mkLlvmFunc :: CLabel -> LlvmLinkageType -> LMSection -> LlvmBlocks -> LlvmFunctionSource
Create a Haskell function in LLVM.
tysToParams :: [LlvmType] -> [LlvmParameter]Source
Convert a list of types to a list of function parameters (each with no parameter attributes)
strCLabel_llvm :: CLabel -> LMStringSource
Pretty print a CLabel
.
genCmmLabelRef :: CLabel -> LMGlobalSource
Create an external definition for a CLabel
defined in another module.
genStringLabelRef :: LMString -> LMGlobalSource
As above (genCmmLabelRef
) but taking a LMString
, not CLabel
.