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

Safe HaskellNone

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

configDump :: Bool

Dump intermediate code.

configInferTypes :: Bool

Use bidirectional type inference on the input code.

configSimplLite :: Simplifier Int () Name

Simplifiers to apply to intermediate code

configSimplSalt :: Simplifier Int () Name
 
configViaBackend :: ViaBackend

Backend code generator to use

configRuntime :: Config

Runtime system configuration

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

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.

Instances

Show ViaBackend 

Tetra stages

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

Load and type check a Source Tetra module.

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

Load and type check a Core Tetra module.

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

Convert a Core Tetra module to Core Salt.

This includes performing the Boxing transform.

Flow stages

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

Type check Core Flow.

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

Prepare a Core Flow module for lowering.

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

Perform rate inference to transform vector operations to series

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

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

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

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

Lite stages

stageLiteLoad :: Config -> Source -> [PipeCore () Name] -> PipeText Name ErrorSource

Load and type check Core Lite.

stageLiteOpt :: Config -> Source -> [PipeCore () Name] -> PipeCore () NameSource

Optimise Core Lite.

stageLiteToSalt :: Config -> Source -> [PipeCore () Name] -> PipeCore () NameSource

Convert Core Lite to Core Salt.

Salt stages

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

Load and type check a Core Salt module.

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

Optimise Core Salt.

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

Convert Core Salt to C code.

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

Convert Core Salt to LLVM.

stageCompileSaltSource

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

stageCompileLLVMSource

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

-> PipeLlvm 

Compile LLVM code.