GRIN is a compiler back-end for lazy and strict functional languages with whole program optimization support.
Go to file
2018-03-22 18:46:42 +01:00
bugs add parser test 2018-02-18 14:19:26 +01:00
grin Add simple tests for some optimisations. 2018-03-22 00:48:15 +01:00
images more images 2018-03-02 10:09:53 +01:00
papers add paper: Trace-based Just-in-time Compilation for Lazy Functional Programming Languages 2017-09-17 14:53:19 +01:00
playground/sum update ghc codegen sample to use the same input that grin optimise 2018-03-21 07:58:07 +01:00
.gitattributes more accurate statistics 2018-03-22 18:46:42 +01:00
.gitignore some work on extend HPT to infer LLVM types 2018-01-08 18:25:51 +01:00
.travis.yml Show coverage on travis. 2018-02-25 15:06:17 +01:00
AbstractInterpretation.md optional verbose pretty printer for HPTProgram 2018-02-15 09:44:13 +01:00
bench.sh add llvm jit to benchmarks 2017-09-18 18:31:16 +01:00
debug_tooling add misc notes 2018-03-01 16:15:50 +01:00
Design.md add papers and notes 2017-08-28 15:44:50 +01:00
Documentation.md improve note 2018-03-01 22:54:07 +01:00
GRIN-LLVM-CodeGen.md add todo 2018-02-23 12:26:59 +01:00
GRIN-Type-System.md add type system note 2018-02-15 09:48:46 +01:00
MemoryManagement.md memory management notes 2018-01-15 20:23:47 +01:00
MVP.md Update MVP.md 2018-03-09 21:45:29 +01:00
node_visualization add misc notes 2018-03-01 16:15:50 +01:00
Readings.md Update Readings.md 2018-03-11 16:39:09 +01:00
README.md link case copy propagation source 2018-03-11 22:38:36 +01:00
RUNTIME.md RUNTIME.md 2017-10-02 21:27:49 +01:00
stack.yaml Change test seed. 2018-02-16 20:04:29 +01:00
todo.just-to-practice start work on GHC frontend ; STG (as simlified core) to GRIN conversion 2018-03-05 21:57:35 +01:00
TODO.md add todo 2018-03-06 11:33:54 +01:00

GRIN

Build Status

The name GRIN is short for Graph Reduction Intermediate Notation, and it is an intermediate language for graph reduction. For an overview read The GRIN Project article. To grasp the details take your time and read Urban Boquist's PhD thesis on Code Optimisation Techniques for Lazy Functional Languages .
Also check the performance benchmark.

Simplifying Transformations

Transformation Schema
vectorisation

source code:
Vectorisation2.hs
case simplification

source code:
CaseSimplification.hs
split fetch operation

source code:
SplitFetch.hs
right hoist fetch operation

source code:
RightHoistFetch2.hs
register introduction

source code:
RegisterIntroduction.hs

Optimising Transformations

Transformation Schema
evaluated case elimination

source code:
EvaluatedCaseElimination.hs
trivial case elimination

source code:
TrivialCaseElimination.hs
sparse case optimisation

source code:
SparseCaseOptimisation.hs
update elimination

source code:
UpdateElimination.hs
copy propagation

source code:
CopyPropagation.hs
late inlining

source code:
Inlining.hs
generalised unboxing

source code:
TODO
arity raising

source code:
TODO
case copy propagation

source code:
CaseCopyPropagation.hs
case hoisting

source code:
TODO
whnf update elimination

source code:
TODO
common sub-expression elimination

source code:
CSE.hs
constant propagation

source code:
ConstantPropagation.hs
dead procedure elimination

source code:
DeadProcedureElimination.hs
dead variable elimination

source code:
DeadVariableElimination.hs
dead parameter elimination

source code:
TODO