ddc-driver-0.4.3.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

data ViaBackend Source #

Constructors

ViaC

Compile via the C backend.

ViaLLVM

Compile via the LLVM backend.

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.