Add copy case propagation to the pipeline.

This commit is contained in:
Andor Penzes 2018-03-13 00:00:40 +01:00
parent 572895f7dd
commit 609c3edff6
3 changed files with 13 additions and 2 deletions

View File

@ -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

View File

@ -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)

View File

@ -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