mirror of https://github.com/KarolS/millfork.git
151 lines
6.9 KiB
Scala
151 lines
6.9 KiB
Scala
package millfork
|
|
|
|
import millfork.assembly.opt._
|
|
import millfork.node.opt.{UnreachableCode, UnusedFunctions, UnusedGlobalVariables, UnusedLocalVariables}
|
|
|
|
/**
|
|
* @author Karol Stasiak
|
|
*/
|
|
object OptimizationPresets {
|
|
val NodeOpt = List(
|
|
UnreachableCode,
|
|
UnusedFunctions,
|
|
UnusedLocalVariables,
|
|
UnusedGlobalVariables,
|
|
)
|
|
val AssOpt: List[AssemblyOptimization] = List[AssemblyOptimization](
|
|
AlwaysGoodOptimizations.PoinlessLoadBeforeAnotherLoad,
|
|
AlwaysGoodOptimizations.PointlessLoadAfterLoadOrStore,
|
|
LaterOptimizations.PointessLoadingForShifting,
|
|
AlwaysGoodOptimizations.SimplifiableBitOpsSequence,
|
|
AlwaysGoodOptimizations.IdempotentDuplicateRemoval,
|
|
AlwaysGoodOptimizations.BranchInPlaceRemoval,
|
|
UnusedLabelRemoval,
|
|
AlwaysGoodOptimizations.UnconditionalJumpRemoval,
|
|
UnusedLabelRemoval,
|
|
AlwaysGoodOptimizations.RearrangeMath,
|
|
LaterOptimizations.PointlessLoadAfterStore,
|
|
AlwaysGoodOptimizations.PoinlessLoadBeforeAnotherLoad,
|
|
AlwaysGoodOptimizations.PointlessOperationAfterLoad,
|
|
AlwaysGoodOptimizations.PointlessLoadBeforeTransfer,
|
|
VariableToRegisterOptimization,
|
|
AlwaysGoodOptimizations.PoinlessLoadBeforeAnotherLoad,
|
|
AlwaysGoodOptimizations.PointlessOperationPairRemoval,
|
|
AlwaysGoodOptimizations.PoinlessLoadBeforeAnotherLoad,
|
|
LaterOptimizations.PointlessLoadAfterStore,
|
|
AlwaysGoodOptimizations.PointlessOperationAfterLoad,
|
|
AlwaysGoodOptimizations.IdempotentDuplicateRemoval,
|
|
AlwaysGoodOptimizations.ConstantIndexPropagation,
|
|
AlwaysGoodOptimizations.PointlessLoadBeforeReturn,
|
|
AlwaysGoodOptimizations.PoinlessFlagChange,
|
|
AlwaysGoodOptimizations.FlagFlowAnalysis,
|
|
AlwaysGoodOptimizations.ConstantFlowAnalysis,
|
|
AlwaysGoodOptimizations.PointlessMath,
|
|
VariableToRegisterOptimization,
|
|
ChangeIndexRegisterOptimizationPreferringX2Y,
|
|
VariableToRegisterOptimization,
|
|
ChangeIndexRegisterOptimizationPreferringY2X,
|
|
VariableToRegisterOptimization,
|
|
AlwaysGoodOptimizations.ConstantFlowAnalysis,
|
|
LaterOptimizations.DoubleLoadToDifferentRegisters,
|
|
LaterOptimizations.DoubleLoadToTheSameRegister,
|
|
LaterOptimizations.DoubleLoadToDifferentRegisters,
|
|
LaterOptimizations.DoubleLoadToTheSameRegister,
|
|
LaterOptimizations.DoubleLoadToDifferentRegisters,
|
|
LaterOptimizations.DoubleLoadToTheSameRegister,
|
|
AlwaysGoodOptimizations.PointlessStoreAfterLoad,
|
|
AlwaysGoodOptimizations.PoinlessLoadBeforeAnotherLoad,
|
|
AlwaysGoodOptimizations.IdempotentDuplicateRemoval,
|
|
AlwaysGoodOptimizations.ConstantIndexPropagation,
|
|
AlwaysGoodOptimizations.ConstantFlowAnalysis,
|
|
AlwaysGoodOptimizations.PointlessRegisterTransfers,
|
|
AlwaysGoodOptimizations.PointlessRegisterTransfersBeforeCompare,
|
|
AlwaysGoodOptimizations.PointlessRegisterTransfersBeforeReturn,
|
|
AlwaysGoodOptimizations.PointlessRegisterTransfersBeforeStore,
|
|
AlwaysGoodOptimizations.PointlessStashingToIndexOverShortSafeBranch,
|
|
AlwaysGoodOptimizations.RearrangeMath,
|
|
AlwaysGoodOptimizations.PointlessStoreAfterLoad,
|
|
AlwaysGoodOptimizations.PointlessLoadBeforeReturn,
|
|
LaterOptimizations.PointessLoadingForShifting,
|
|
AlwaysGoodOptimizations.SimplifiableBitOpsSequence,
|
|
AlwaysGoodOptimizations.SimplifiableBitOpsSequence,
|
|
AlwaysGoodOptimizations.SimplifiableBitOpsSequence,
|
|
AlwaysGoodOptimizations.SimplifiableBitOpsSequence,
|
|
|
|
LaterOptimizations.LoadingAfterShifting,
|
|
AlwaysGoodOptimizations.PointlessStoreAfterLoad,
|
|
AlwaysGoodOptimizations.PoinlessStoreBeforeStore,
|
|
LaterOptimizations.PointlessLoadAfterStore,
|
|
AlwaysGoodOptimizations.PoinlessLoadBeforeAnotherLoad,
|
|
|
|
LaterOptimizations.LoadingAfterShifting,
|
|
AlwaysGoodOptimizations.PointlessStoreAfterLoad,
|
|
AlwaysGoodOptimizations.PoinlessStoreBeforeStore,
|
|
LaterOptimizations.PointlessLoadAfterStore,
|
|
AlwaysGoodOptimizations.PoinlessLoadBeforeAnotherLoad,
|
|
|
|
LaterOptimizations.LoadingAfterShifting,
|
|
AlwaysGoodOptimizations.PointlessStoreAfterLoad,
|
|
AlwaysGoodOptimizations.PoinlessStoreBeforeStore,
|
|
LaterOptimizations.PointlessLoadAfterStore,
|
|
AlwaysGoodOptimizations.PoinlessLoadBeforeAnotherLoad,
|
|
AlwaysGoodOptimizations.TailCallOptimization,
|
|
AlwaysGoodOptimizations.UnusedCodeRemoval,
|
|
AlwaysGoodOptimizations.ReverseFlowAnalysis,
|
|
AlwaysGoodOptimizations.ModificationOfJustWrittenValue,
|
|
AlwaysGoodOptimizations.PointlessMathFromFlow,
|
|
AlwaysGoodOptimizations.PointlessMathFromFlow,
|
|
AlwaysGoodOptimizations.PointlessMathFromFlow,
|
|
AlwaysGoodOptimizations.PointlessMathFromFlow,
|
|
AlwaysGoodOptimizations.PointlessMathFromFlow,
|
|
AlwaysGoodOptimizations.PointlessMathFromFlow,
|
|
AlwaysGoodOptimizations.PointlessMathFromFlow,
|
|
AlwaysGoodOptimizations.PointlessMathFromFlow,
|
|
AlwaysGoodOptimizations.MathOperationOnTwoIdenticalMemoryOperands,
|
|
LaterOptimizations.UseZeropageAddressingMode,
|
|
|
|
LaterOptimizations.UseXInsteadOfStack,
|
|
LaterOptimizations.UseYInsteadOfStack,
|
|
LaterOptimizations.IndexSwitchingOptimization,
|
|
)
|
|
|
|
val Good: List[AssemblyOptimization] = List[AssemblyOptimization](
|
|
AlwaysGoodOptimizations.Adc0Optimization,
|
|
AlwaysGoodOptimizations.CarryFlagConversion,
|
|
DangerousOptimizations.ConstantIndexOffsetPropagation,
|
|
AlwaysGoodOptimizations.BranchInPlaceRemoval,
|
|
AlwaysGoodOptimizations.ConstantFlowAnalysis,
|
|
AlwaysGoodOptimizations.ConstantIndexPropagation,
|
|
AlwaysGoodOptimizations.FlagFlowAnalysis,
|
|
AlwaysGoodOptimizations.IdempotentDuplicateRemoval,
|
|
AlwaysGoodOptimizations.ImpossibleBranchRemoval,
|
|
AlwaysGoodOptimizations.IndexSequenceOptimization,
|
|
AlwaysGoodOptimizations.MathOperationOnTwoIdenticalMemoryOperands,
|
|
AlwaysGoodOptimizations.ModificationOfJustWrittenValue,
|
|
AlwaysGoodOptimizations.PoinlessFlagChange,
|
|
AlwaysGoodOptimizations.PointlessLoadAfterLoadOrStore,
|
|
AlwaysGoodOptimizations.PoinlessLoadBeforeAnotherLoad,
|
|
AlwaysGoodOptimizations.PointlessLoadBeforeReturn,
|
|
AlwaysGoodOptimizations.PointlessLoadBeforeTransfer,
|
|
AlwaysGoodOptimizations.PointlessMath,
|
|
AlwaysGoodOptimizations.PointlessMathFromFlow,
|
|
AlwaysGoodOptimizations.PointlessOperationAfterLoad,
|
|
AlwaysGoodOptimizations.PointlessOperationPairRemoval,
|
|
AlwaysGoodOptimizations.PointlessRegisterTransfers,
|
|
AlwaysGoodOptimizations.PointlessRegisterTransfersBeforeCompare,
|
|
AlwaysGoodOptimizations.PointlessRegisterTransfersBeforeReturn,
|
|
AlwaysGoodOptimizations.PointlessStashingToIndexOverShortSafeBranch,
|
|
AlwaysGoodOptimizations.PointlessStoreAfterLoad,
|
|
AlwaysGoodOptimizations.PoinlessStoreBeforeStore,
|
|
AlwaysGoodOptimizations.RearrangeMath,
|
|
AlwaysGoodOptimizations.RemoveNops,
|
|
AlwaysGoodOptimizations.ReverseFlowAnalysis,
|
|
AlwaysGoodOptimizations.SimplifiableBitOpsSequence,
|
|
AlwaysGoodOptimizations.SmarterShiftingWords,
|
|
AlwaysGoodOptimizations.UnconditionalJumpRemoval,
|
|
UnusedLabelRemoval,
|
|
AlwaysGoodOptimizations.TailCallOptimization,
|
|
AlwaysGoodOptimizations.UnusedCodeRemoval,
|
|
)
|
|
}
|