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, ) }