Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dead code elimination in JuvixReg #2835

Merged
merged 7 commits into from
Jun 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions app/Commands/Dev/Reg/Read.hs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module Commands.Dev.Reg.Read where

import Commands.Base
import Commands.Dev.Reg.Read.Options
import Juvix.Compiler.Reg.Pretty qualified as Reg
import Juvix.Compiler.Reg.Pretty qualified as Reg hiding (defaultOptions)
import Juvix.Compiler.Reg.Transformation qualified as Reg
import Juvix.Compiler.Reg.Translation.FromSource qualified as Reg
import RegInterpreter
Expand All @@ -15,7 +15,10 @@ runCommand opts = do
Left err ->
exitJuvixError (JuvixError err)
Right tab -> do
r <- runError @JuvixError (Reg.applyTransformations (project opts ^. regReadTransformations) tab)
r <-
runError @JuvixError
. runReader Reg.defaultOptions
$ (Reg.applyTransformations (project opts ^. regReadTransformations) tab)
case r of
Left err -> exitJuvixError (JuvixError err)
Right tab' -> do
Expand Down
10 changes: 7 additions & 3 deletions src/Juvix/Compiler/Asm/Options.hs
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@ where

import Juvix.Compiler.Backend
import Juvix.Compiler.Pipeline.EntryPoint
import Juvix.Compiler.Tree.Options qualified as Tree
import Juvix.Prelude

data Options = Options
{ _optDebug :: Bool,
_optLimits :: Limits
_optLimits :: Limits,
_optTreeOptions :: Tree.Options
}

makeLenses ''Options
Expand All @@ -19,7 +21,8 @@ makeOptions :: Target -> Bool -> Options
makeOptions tgt debug =
Options
{ _optDebug = debug,
_optLimits = getLimits tgt debug
_optLimits = getLimits tgt debug,
_optTreeOptions = Tree.defaultOptions
}

getClosureSize :: Options -> Int -> Int
Expand All @@ -29,5 +32,6 @@ fromEntryPoint :: EntryPoint -> Options
fromEntryPoint e@EntryPoint {..} =
Options
{ _optDebug = _entryPointDebug,
_optLimits = getLimits (getEntryPointTarget e) _entryPointDebug
_optLimits = getLimits (getEntryPointTarget e) _entryPointDebug,
_optTreeOptions = Tree.fromEntryPoint e
}
12 changes: 9 additions & 3 deletions src/Juvix/Compiler/Pipeline.hs
Original file line number Diff line number Diff line change
Expand Up @@ -358,18 +358,24 @@ regToRust = regToRust' Rust.BackendRust
regToRiscZeroRust :: (Member (Reader EntryPoint) r) => Reg.InfoTable -> Sem r Rust.Result
regToRiscZeroRust = regToRust' Rust.BackendRiscZero

regToCasm :: Reg.InfoTable -> Sem r Casm.Result
regToCasm :: (Member (Reader EntryPoint) r) => Reg.InfoTable -> Sem r Casm.Result
regToCasm = Reg.toCasm >=> return . Casm.fromReg

regToCasm' :: (Member (Reader Reg.Options) r) => Reg.InfoTable -> Sem r Casm.Result
regToCasm' = Reg.toCasm' >=> return . Casm.fromReg

casmToCairo :: Casm.Result -> Sem r Cairo.Result
casmToCairo Casm.Result {..} =
return
. Cairo.serialize _resultOutputSize (map Casm.builtinName _resultBuiltins)
$ Cairo.fromCasm _resultCode

regToCairo :: Reg.InfoTable -> Sem r Cairo.Result
regToCairo :: (Member (Reader EntryPoint) r) => Reg.InfoTable -> Sem r Cairo.Result
regToCairo = regToCasm >=> casmToCairo

regToCairo' :: (Member (Reader Reg.Options) r) => Reg.InfoTable -> Sem r Cairo.Result
regToCairo' = regToCasm' >=> casmToCairo

treeToAnoma' :: (Members '[Error JuvixError, Reader NockmaTree.CompilerOptions] r) => Tree.InfoTable -> Sem r NockmaTree.AnomaResult
treeToAnoma' = Tree.toNockma >=> NockmaTree.fromTreeTable

Expand All @@ -378,6 +384,6 @@ asmToMiniC' = mapError (JuvixError @Asm.AsmError) . Asm.toReg' >=> regToMiniC' .

regToMiniC' :: (Member (Reader Asm.Options) r) => Reg.InfoTable -> Sem r C.MiniCResult
regToMiniC' tab = do
tab' <- Reg.toC tab
tab' <- mapReader (^. Asm.optTreeOptions) $ Reg.toC' tab
e <- ask
return $ C.fromReg (e ^. Asm.optLimits) tab'
8 changes: 7 additions & 1 deletion src/Juvix/Compiler/Reg/Data/TransformationId.hs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ data TransformationId
| InitBranchVars
| CopyPropagation
| ConstantPropagation
| DeadCodeElimination
| OptPhaseMain
| OptPhaseCairo
deriving stock (Data, Bounded, Enum, Show)

data PipelineId
Expand All @@ -28,7 +31,7 @@ toRustTransformations :: [TransformationId]
toRustTransformations = [Cleanup]

toCasmTransformations :: [TransformationId]
toCasmTransformations = [Cleanup, CopyPropagation, ConstantPropagation, SSA]
toCasmTransformations = [Cleanup, SSA, OptPhaseCairo]

instance TransformationId' TransformationId where
transformationText :: TransformationId -> Text
Expand All @@ -39,6 +42,9 @@ instance TransformationId' TransformationId where
InitBranchVars -> strInitBranchVars
CopyPropagation -> strCopyPropagation
ConstantPropagation -> strConstantPropagation
DeadCodeElimination -> strDeadCodeElimination
OptPhaseMain -> strOptPhaseMain
OptPhaseCairo -> strOptPhaseCairo

instance PipelineId' TransformationId PipelineId where
pipelineText :: PipelineId -> Text
Expand Down
9 changes: 9 additions & 0 deletions src/Juvix/Compiler/Reg/Data/TransformationId/Strings.hs
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,12 @@ strCopyPropagation = "copy-propagation"

strConstantPropagation :: Text
strConstantPropagation = "constant-propagation"

strDeadCodeElimination :: Text
strDeadCodeElimination = "dead-code"

strOptPhaseMain :: Text
strOptPhaseMain = "opt-main"

strOptPhaseCairo :: Text
strOptPhaseCairo = "opt-cairo"
Loading
Loading