Safe Haskell | None |
---|---|
Language | Haskell2010 |
Optimizer for typed instructions.
It's quite experimental and incomplete.
Synopsis
- optimize :: Instr inp out -> Instr inp out
- optimizeWithConf :: OptimizerConf -> Instr inp out -> Instr inp out
- defaultOptimizerConf :: OptimizerConf
- defaultRules :: [Rule]
- defaultRulesAndPushPack :: [Rule]
- orRule :: (Rule -> Rule) -> (Rule -> Rule) -> Rule -> Rule
- orSimpleRule :: (Rule -> Rule) -> Rule -> Rule -> Rule
- newtype Rule = Rule {}
- data OptimizerConf = OptimizerConf {
- ocGotoValues :: Bool
- ocRuleset :: [Rule]
- ocGotoValuesL :: Lens' OptimizerConf Bool
Documentation
optimize :: Instr inp out -> Instr inp out Source #
Optimize a typed instruction by replacing some sequences of instructions with smaller equivalent sequences. Applies default set of rewrite rules.
optimizeWithConf :: OptimizerConf -> Instr inp out -> Instr inp out Source #
Optimize a typed instruction using a custom set of rules. The set is divided into several stages, as applying some rules can prevent others to be performed.
defaultOptimizerConf :: OptimizerConf Source #
Default config - all commonly useful rules will be applied to all the code.
defaultRules :: [Rule] Source #
defaultRulesAndPushPack :: [Rule] Source #
We do not enable pushPack
rule by default because it is
potentially dangerous.
There are various code processing functions that may depend on constants,
e. g. string transformations.
need helper
orSimpleRule :: (Rule -> Rule) -> Rule -> Rule -> Rule Source #
Combine a rule fixpoint and a simple rule.
data OptimizerConf Source #
OptimizerConf | |
|
Instances
Default OptimizerConf Source # | |
Defined in Morley.Michelson.Optimizer def :: OptimizerConf # |