1
0
mirror of https://github.com/KarolS/millfork.git synced 2025-02-08 00:30:38 +00:00

Tail-call optimization shouldn't move discard pseudoinstructions

This commit is contained in:
Karol Stasiak 2018-01-20 22:03:19 +01:00
parent 7e04312462
commit 430051635d

View File

@ -277,7 +277,7 @@ object AlwaysGoodOptimizations {
val TailCallOptimization = new RuleBasedAssemblyOptimization("Tail call optimization",
needsFlowInfo = FlowInfoRequirement.NoRequirement,
(Elidable & HasOpcode(JSR)) ~ HasOpcodeIn(NoopDiscardsFlags).* ~ (Elidable & HasOpcode(RTS)) ~~> (c => c.tail.init :+ c.head.copy(opcode = JMP)),
(Elidable & HasOpcode(JSR)) ~ HasOpcodeIn(NoopDiscardsFlags).* ~ (Elidable & HasOpcode(RTS)) ~~> (c => c.head.copy(opcode = JMP) :: Nil),
(Elidable & HasOpcode(JSR)) ~
HasOpcode(LABEL).* ~
HasOpcodeIn(NoopDiscardsFlags).*.capture(0) ~