Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Optimizer rewrite rules
Synopsis
- defaultRules :: Ruleset
- defaultRulesAndPushPack :: Ruleset
- mainStageRules :: [Rule]
- dipDrop2swapDrop :: Rule
- dipSwapDrop :: Rule
- adjacentDrops :: Rule
- rollPairN :: Rule
- rollUnpairN :: Rule
- rollDips :: Rule
- pushPack :: Rule
- removeNesting :: Rule
- removeExtStackType :: Rule
- ifNopNop2Drop :: Rule
- nopIsNeutralForSeq :: Rule
- variousNops :: Rule
- dupSwap2dup :: Rule
- noDipNeeded :: Rule
- branchShortCut :: Rule
- compareWithZero :: Rule
- internalNop :: Rule
- simpleDups :: Rule
- adjacentDips :: Rule
- isSomeOnIf :: Rule
- redundantIf :: Rule
- emptyDip :: Rule
- digDug :: Rule
- specificPush :: Rule
- pairUnpair :: Rule
- pairMisc :: Rule
- unpairMisc :: Rule
- swapBeforeCommutative :: Rule
- justDrops :: Rule
- justDoubleDrops :: Rule
- dig1AndDug1AreSwap :: Rule
- notIf :: Rule
- dropMeta :: Rule
- dupDugDrop :: Rule
- unrollPairN :: Rule
- unrollUnpairN :: Rule
- unrollDropN :: Rule
- unrollDips :: Rule
- flattenSeqLHS :: Rule -> Rule
- commuteArith :: forall n m s out. Instr (n ': (m ': s)) out -> Maybe (Instr (m ': (n ': s)) out)
Documentation
defaultRules :: Ruleset Source #
Default optimization rules.
defaultRulesAndPushPack :: Ruleset 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.
mainStageRules :: [Rule] Source #
dipSwapDrop :: Rule Source #
NB: This rule MUST be applied AFTER all main stages, but BEFORE nested dips are rolled up
adjacentDrops :: Rule Source #
Sequences of DROP
s can be turned into single DROP n
.
When n
is greater than 2 it saves size and gas.
When n
is 2 it saves gas only.
rollUnpairN :: Rule Source #
removeNesting :: Rule Source #
removeExtStackType :: Rule Source #
STACKTYPE is currently a Nop and may safely be removed.
ifNopNop2Drop :: Rule Source #
variousNops :: Rule Source #
dupSwap2dup :: Rule Source #
noDipNeeded :: Rule Source #
internalNop :: Rule Source #
simpleDups :: Rule Source #
adjacentDips :: Rule Source #
isSomeOnIf :: Rule Source #
redundantIf :: Rule Source #
specificPush :: Rule Source #
pairUnpair :: Rule Source #
unpairMisc :: Rule Source #
dupDugDrop :: Rule Source #
unrollPairN :: Rule Source #
unrollUnpairN :: Rule Source #
unrollDropN :: Rule Source #
unrollDips :: Rule Source #
flattenSeqLHS :: Rule -> Rule Source #