ddc-driver-0.4.2.1: Disciplined Disciple Compiler top-level driver.

Safe HaskellNone
LanguageHaskell98

DDC.Driver.Stage

Contents

Description

Compiler stages.

A compiler stage is a sequence of standard transformations. Each of the individual transformations are expressed as a pipeline from DDC.Build.Pipeline. The stages here run several pipelines each, and contain the code that can dump the intermediate program after each transformation.

Synopsis

Documentation

data Config Source

Configuration for main compiler stages.

Constructors

Config 

Fields

configLogBuild :: Bool

Print status to console during builds.

configDump :: Bool

Dump intermediate code.

configInferTypes :: Bool

Use bidirectional type inference on the input code.

configSimplSalt :: Simplifier Int () Name

Simplifiers to apply to intermediate code

configViaBackend :: ViaBackend

Backend code generator to use

configRuntime :: Config

Runtime system configuration

configRuntimeLinkStrategy :: RuntimeLinkStrategy

Linking strategy for the runtime.

configBuilder :: Builder

The builder to use for the target architecture

configPretty :: ConfigPretty

Core langauge pretty printer configuration.

configSuppressHashImports :: Bool

Suppress the #import prelude in C modules

configModuleBaseDirectories :: [FilePath]

Base directories to look for modules sources during build.

configOutputFile :: Maybe FilePath

Override output file

configOutputDir :: Maybe FilePath

Override directory for build products

configKeepLlvmFiles :: Bool

Keep intermediate .ddc.ll files

configKeepSeaFiles :: Bool

Keep intermediate .ddc.c files

configKeepAsmFiles :: Bool

Keep intermediate .ddc.s files

configTaintAvoidTypeChecks :: Bool

Avoid running the type checker where possible. When debugging program transformations, use this to get the invalid code rather than just the type error message.

data ViaBackend Source

Constructors

ViaC

Compile via the C backend.

ViaLLVM

Compile via the LLVM backend.

data RuntimeLinkStrategy Source

Constructors

LinkDefault

Use the platform's default strategy.

LinkStatic

Link the runtime statically.

Tetra stages

stageSourceTetraLoad :: Config -> Source -> Store -> [PipeCore (AnTEC SourcePos Name) Name] -> PipeText Name Error Source

Load and type check a Source Tetra module.

stageTetraLoad :: Config -> Source -> [PipeCore () Name] -> PipeText Name Error Source

Load and type check a Core Tetra module.

stageTetraToSalt :: Config -> Source -> [PipeCore () Name] -> PipeCore () Name Source

Convert a Core Tetra module to Core Salt.

This includes performing the Boxing transform.

Flow stages

stageFlowLoad :: Config -> Source -> [PipeCore () Name] -> PipeText Name Error Source

Type check Core Flow.

stageFlowPrep :: Config -> Source -> [PipeCore () Name] -> PipeCore () Name Source

Prepare a Core Flow module for lowering.

stageFlowRate :: Config -> Source -> [PipeCore () Name] -> PipeCore () Name Source

Perform rate inference to transform vector operations to series

stageFlowLower :: Config -> Config -> Source -> [PipeCore () Name] -> PipeCore (AnTEC () Name) Name Source

Lower a Core Flow module. Is needs to already be prepped, and have full type annotations.

stageFlowWind :: Config -> Source -> [PipeCore () Name] -> PipeCore (AnTEC () Name) Name Source

Wind loop primops into tail recursive loops in a Core Flow module.

stageFlowToTetra :: Config -> Source -> [PipeCore () Name] -> PipeCore (AnTEC () Name) Name Source

Wind loop primops into tail recursive loops in a Core Flow module.

Salt stages

stageSaltLoad :: Config -> Source -> [PipeCore () Name] -> PipeText Name Error Source

Load and type check a Core Salt module.

stageSaltOpt :: Config -> Source -> [PipeCore () Name] -> PipeCore () Name Source

Optimise Core Salt.

stageSaltToC :: Config -> Source -> Sink -> PipeCore () Name Source

Convert Core Salt to C code.

stageSaltToLLVM :: Config -> Source -> [PipeLlvm] -> PipeCore () Name Source

Convert Core Salt to LLVM.

stageCompileSalt Source

Arguments

:: Config 
-> Source 
-> FilePath

Path of original source file. Build products are placed into the same dir.

-> Bool

Should we link this into an executable

-> PipeCore () Name 

Compile Core Salt via C code.

LLVM stages

stageCompileLLVM Source

Arguments

:: Config 
-> Source 
-> FilePath

Path of original source file. Build products are placed into the same dir.

-> Maybe [FilePath]

If True then link with these other .os into an executable.

-> PipeLlvm 

Compile LLVM code.