Skip to content

Commit 252cf14

Browse files
committed
ES: added Evaluated and Trivial Case Elimination
1 parent acd2387 commit 252cf14

File tree

3 files changed

+31
-0
lines changed

3 files changed

+31
-0
lines changed

grin/grin.cabal

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ library
146146
Transformations.ExtendedSyntax.GenerateEval
147147
Transformations.ExtendedSyntax.MangleNames
148148
Transformations.ExtendedSyntax.StaticSingleAssignment
149+
Transformations.ExtendedSyntax.Optimising.EvaluatedCaseElimination
150+
Transformations.ExtendedSyntax.Optimising.TrivialCaseElimination
149151

150152
Transformations.BindNormalisation
151153
Transformations.CountVariableUse
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{-# LANGUAGE LambdaCase, TupleSections #-}
2+
module Transformations.ExtendedSyntax.Optimising.EvaluatedCaseElimination where
3+
4+
import Data.Functor.Foldable as Foldable
5+
import Grin.Grin
6+
7+
evaluatedCaseElimination :: Exp -> Exp
8+
evaluatedCaseElimination = ana builder where
9+
builder :: Exp -> ExpF Exp
10+
builder = \case
11+
ECase val alts | all (altBodyEQ $ SReturn val) alts -> SReturnF val
12+
exp -> project exp
13+
14+
altBodyEQ :: Exp -> Alt -> Bool
15+
altBodyEQ exp (Alt _cpat body) = exp == body
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{-# LANGUAGE LambdaCase, TupleSections #-}
2+
module Transformations.ExtendedSyntax.Optimising.TrivialCaseElimination where
3+
4+
import Data.Functor.Foldable as Foldable
5+
import Grin.Grin
6+
import Transformations.Util
7+
8+
trivialCaseElimination :: Exp -> Exp
9+
trivialCaseElimination = ana builder where
10+
builder :: Exp -> ExpF Exp
11+
builder = \case
12+
ECase val [Alt DefaultPat body] -> SBlockF body
13+
ECase val [Alt cpat body] -> SBlockF $ EBind (SReturn val) (cpatToLPat cpat) body
14+
exp -> project exp

0 commit comments

Comments
 (0)