Base LLVM Code Generation module
Contains functions useful through out the code generator.
- type LlvmCmmTop = GenCmmTop LlvmData [CmmStatic] (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 LlvmEnv = (LlvmEnvMap, LlvmEnvMap)
- initLlvmEnv :: LlvmEnv
- clearVars :: LlvmEnv -> LlvmEnv
- varLookup :: Uniquable key => key -> LlvmEnv -> Maybe LlvmType
- varInsert :: Uniquable key => key -> LlvmType -> LlvmEnv -> LlvmEnv
- funLookup :: Uniquable key => key -> LlvmEnv -> Maybe LlvmType
- funInsert :: Uniquable key => key -> LlvmType -> 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 [CmmStatic] (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.
Get initial Llvm environment.
funLookup :: Uniquable key => key -> LlvmEnv -> Maybe LlvmTypeSource
Lookup functions in the environment.
funInsert :: Uniquable key => key -> LlvmType -> LlvmEnv -> LlvmEnvSource
Insert functions into the environment.
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
.