mirror of
https://github.com/grin-compiler/grin.git
synced 2024-09-11 15:37:54 +03:00
Add copy case propagation to the pipeline.
This commit is contained in:
parent
572895f7dd
commit
609c3edff6
@ -39,6 +39,7 @@ transformOpts =
|
||||
<|> flg DeadProcedureElimination "dpe" "Dead Procedure Elimination"
|
||||
<|> flg DeadVariableElimination "dve" "Dead Variable Elimination"
|
||||
<|> flg CommonSubExpressionElimination "cse" "Common Sub-Expression Elimination"
|
||||
<|> flg CaseCopyPropagation "ccp" "Case Copy Propagation"
|
||||
|
||||
pipelineOpts :: Parser Pipeline
|
||||
pipelineOpts =
|
||||
@ -146,6 +147,12 @@ defaultPipeline = \case
|
||||
, SaveGrin "CommonSubExpressionElimination"
|
||||
, PrintGrin ondullblack
|
||||
|
||||
, T CaseCopyPropagation
|
||||
, SaveGrin "CaseCopyPropagation"
|
||||
, T BindNormalisation
|
||||
, SaveGrin "CaseCopyPropagation"
|
||||
, PrintGrin ondullblack
|
||||
|
||||
, T Vectorisation
|
||||
, SaveGrin "Vectorisation"
|
||||
, T BindNormalisation
|
||||
|
@ -9,6 +9,7 @@ module Optimizations
|
||||
, deadProcedureElimination
|
||||
, deadVariableElimination
|
||||
, commonSubExpressionElimination
|
||||
, caseCopyPropagation
|
||||
) where
|
||||
|
||||
import Transformations.Optimising.ConstantFolding (constantFolding)
|
||||
@ -21,3 +22,4 @@ import Transformations.Optimising.ConstantPropagation (constantPropagation)
|
||||
import Transformations.Optimising.DeadProcedureElimination (deadProcedureElimination)
|
||||
import Transformations.Optimising.DeadVariableElimination (deadVariableElimination)
|
||||
import Transformations.Optimising.CSE (commonSubExpressionElimination)
|
||||
import Transformations.Optimising.CaseCopyPropagation (caseCopyPropagation)
|
||||
|
@ -77,6 +77,7 @@ data Transformation
|
||||
| DeadProcedureElimination
|
||||
| DeadVariableElimination
|
||||
| CommonSubExpressionElimination
|
||||
| CaseCopyPropagation
|
||||
deriving (Enum, Eq, Ord, Show)
|
||||
|
||||
transformation :: Maybe TypeEnv -> Int -> Transformation -> Exp -> Exp
|
||||
@ -98,6 +99,7 @@ transformation typeEnv n = \case
|
||||
DeadProcedureElimination -> deadProcedureElimination
|
||||
DeadVariableElimination -> deadVariableElimination
|
||||
CommonSubExpressionElimination -> commonSubExpressionElimination (fromJust typeEnv)
|
||||
CaseCopyPropagation -> caseCopyPropagation
|
||||
|
||||
precondition :: Transformation -> [Check]
|
||||
precondition = \case
|
||||
@ -285,7 +287,7 @@ saveGrin fn = do
|
||||
n <- use psTransStep
|
||||
e <- use psExp
|
||||
outputDir <- view poOutputDir
|
||||
let fname = (concat [fn,".", show n])
|
||||
let fname = (concat [show n,".",fn])
|
||||
let content = show $ plain $ pretty e
|
||||
liftIO $ do
|
||||
createDirectoryIfMissing True outputDir
|
||||
@ -297,7 +299,7 @@ saveLLVM fname' = do
|
||||
n <- use psTransStep
|
||||
Just typeEnv <- use psTypeEnv
|
||||
o <- view poOutputDir
|
||||
let fname = o </> concat [fname',".",show n]
|
||||
let fname = o </> concat [show n,".", fname']
|
||||
code = CGLLVM.codeGen typeEnv e
|
||||
llName = printf "%s.ll" fname
|
||||
sName = printf "%s.s" fname
|
||||
|
Loading…
Reference in New Issue
Block a user