From 430051635d08cef524e4200f135f225d4c9256e8 Mon Sep 17 00:00:00 2001 From: Karol Stasiak Date: Sat, 20 Jan 2018 22:03:19 +0100 Subject: [PATCH] Tail-call optimization shouldn't move discard pseudoinstructions --- .../scala/millfork/assembly/opt/AlwaysGoodOptimizations.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/scala/millfork/assembly/opt/AlwaysGoodOptimizations.scala b/src/main/scala/millfork/assembly/opt/AlwaysGoodOptimizations.scala index c7611e84..da110efe 100644 --- a/src/main/scala/millfork/assembly/opt/AlwaysGoodOptimizations.scala +++ b/src/main/scala/millfork/assembly/opt/AlwaysGoodOptimizations.scala @@ -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) ~