Safe Haskell | None |
---|
LlvmCodeGen.Base
Description
Base LLVM Code Generation module
Contains functions useful through out the code generator.
- type LlvmCmmDecl = GenCmmDecl [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 :: Platform -> 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
- getLlvmVer :: LlvmEnv -> LlvmVersion
- setLlvmVer :: LlvmVersion -> LlvmEnv -> LlvmEnv
- getLlvmPlatform :: LlvmEnv -> Platform
- ghcInternalFunctions :: [(LMString, LlvmFunctionDecl)]
- cmmToLlvmType :: CmmType -> LlvmType
- widthToLlvmFloat :: Width -> LlvmType
- widthToLlvmInt :: Width -> LlvmType
- llvmFunTy :: LlvmType
- llvmFunSig :: LlvmEnv -> CLabel -> LlvmLinkageType -> LlvmFunctionDecl
- llvmStdFunAttrs :: [LlvmFuncAttr]
- llvmFunAlign :: LMAlign
- llvmInfAlign :: LMAlign
- llvmPtrBits :: Int
- mkLlvmFunc :: LlvmEnv -> CLabel -> LlvmLinkageType -> LMSection -> LlvmBlocks -> LlvmFunction
- tysToParams :: [LlvmType] -> [LlvmParameter]
- strCLabel_llvm :: LlvmEnv -> CLabel -> LMString
- genCmmLabelRef :: LlvmEnv -> CLabel -> LMGlobal
- genStringLabelRef :: LMString -> LMGlobal
Documentation
type LlvmCmmDecl = GenCmmDecl [LlvmData] (Maybe CmmStatics) (ListGraph LlvmStatement)
type LlvmUnresData = (CLabel, Section, LlvmType, [UnresStatic])
Unresolved code. Of the form: (data label, data type, unresolved data)
type UnresLabel = CmmLit
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 UnresStatic = Either UnresLabel LlvmStatic
type LlvmVersion = Int
LLVM Version Number
defaultLlvmVersion :: LlvmVersion
The LLVM Version we assume if we don't know
data LlvmEnv
initLlvmEnv :: Platform -> LlvmEnv
Get initial Llvm environment.
varLookup :: Uniquable key => key -> LlvmEnv -> Maybe LlvmType
Lookup local variables in the environment.
varInsert :: Uniquable key => key -> LlvmType -> LlvmEnv -> LlvmEnv
Insert local variables into the environment.
funInsert :: Uniquable key => key -> LlvmType -> LlvmEnv -> LlvmEnv
Insert functions into the environment.
getLlvmVer :: LlvmEnv -> LlvmVersion
Get the LLVM version we are generating code for
setLlvmVer :: LlvmVersion -> LlvmEnv -> LlvmEnv
Set the LLVM version we are generating code for
getLlvmPlatform :: LlvmEnv -> Platform
Get the platform we are generating code for
ghcInternalFunctions :: [(LMString, LlvmFunctionDecl)]
Here we pre-initialise some functions that are used internally by GHC
so as to make sure they have the most general type in the case that
user code also uses these functions but with a different type than GHC
internally. (Main offender is treating return type as void
instead of
'void *'. Fixes trac #5486.
cmmToLlvmType :: CmmType -> LlvmType
Translate a basic CmmType to an LlvmType.
widthToLlvmFloat :: Width -> LlvmType
Translate a Cmm Float Width to a LlvmType.
widthToLlvmInt :: Width -> LlvmType
Translate a Cmm Bit Width to a LlvmType.
llvmFunSig :: LlvmEnv -> CLabel -> LlvmLinkageType -> LlvmFunctionDecl
Llvm Function signature
llvmStdFunAttrs :: [LlvmFuncAttr]
Llvm standard fun attributes
Alignment to use for functions
Alignment to use for into tables
llvmPtrBits :: Int
Pointer width
mkLlvmFunc :: LlvmEnv -> CLabel -> LlvmLinkageType -> LMSection -> LlvmBlocks -> LlvmFunction
Create a Haskell function in LLVM.
tysToParams :: [LlvmType] -> [LlvmParameter]
Convert a list of types to a list of function parameters (each with no parameter attributes)
strCLabel_llvm :: LlvmEnv -> CLabel -> LMString
Pretty print a CLabel
.
genCmmLabelRef :: LlvmEnv -> CLabel -> LMGlobal
Create an external definition for a CLabel
defined in another module.
genStringLabelRef :: LMString -> LMGlobal
As above (genCmmLabelRef
) but taking a LMString
, not CLabel
.