ghc-7.6.3: The GHC API

Safe HaskellNone

LlvmCodeGen.Base

Description

Base LLVM Code Generation module

Contains functions useful through out the code generator.

Synopsis

Documentation

type LlvmUnresData = (CLabel, Section, LlvmType, [UnresStatic])Source

Unresolved code. Of the form: (data label, data type, unresolved data)

type LlvmData = ([LMGlobal], [LlvmType])Source

Top level LLVM Data (globals and type aliases)

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

initLlvmEnv :: DynFlags -> LlvmEnvSource

Get initial Llvm environment.

clearVars :: LlvmEnv -> LlvmEnvSource

Clear variables from the environment.

varLookup :: Uniquable key => key -> LlvmEnv -> Maybe LlvmTypeSource

Lookup local variables in the environment.

varInsert :: Uniquable key => key -> LlvmType -> LlvmEnv -> LlvmEnvSource

Insert local variables into the 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.

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

getLlvmPlatform :: LlvmEnv -> PlatformSource

Get the platform we are generating code for

getDflags :: LlvmEnv -> DynFlagsSource

Get the DynFlags for this compilation pass

ghcInternalFunctions :: [(LMString, LlvmFunctionDecl)]Source

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 -> 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.

llvmFunTy :: LlvmTypeSource

Llvm Function type for Cmm function

llvmFunSig :: LlvmEnv -> CLabel -> LlvmLinkageType -> LlvmFunctionDeclSource

Llvm Function signature

llvmStdFunAttrs :: [LlvmFuncAttr]Source

Llvm standard fun attributes

llvmFunAlign :: LMAlignSource

Alignment to use for functions

llvmInfAlign :: LMAlignSource

Alignment to use for into tables

llvmPtrBits :: IntSource

Pointer width

mkLlvmFunc :: LlvmEnv -> 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)

genCmmLabelRef :: LlvmEnv -> CLabel -> LMGlobalSource

Create an external definition for a CLabel defined in another module.