1
0
mirror of https://github.com/KarolS/millfork.git synced 2026-04-24 12:16:29 +00:00

Fixed suboptimal selection of variables for register inlining

This commit is contained in:
Karol Stasiak
2018-03-03 15:04:39 +01:00
parent 77797af564
commit 2024c33ef2
@@ -202,12 +202,16 @@ object VariableToRegisterOptimization extends AssemblyOptimization {
vy <- yCandidateSets
vz <- zCandidateSets
va <- aCandidateSets
if (vx & vz).isEmpty
if (vz & vy).isEmpty
if (va & vz).isEmpty
if (vx & vy).isEmpty
if (vx & va).isEmpty
if (va & vy).isEmpty
na = va.map(_._1)
nx = vx.map(_._1)
ny = vy.map(_._1)
nz = vz.map(_._1)
if (nx & nz).isEmpty
if (nz & ny).isEmpty
if (na & nz).isEmpty
if (nx & ny).isEmpty
if (nx & na).isEmpty
if (na & ny).isEmpty
score = vx.toSeq.map(_._3).sum + vy.toSeq.map(_._3).sum + va.toSeq.map(_._3).sum + vz.toSeq.map(_._3).sum
} yield (score, vx, vy, vz, va)
@@ -215,6 +219,8 @@ object VariableToRegisterOptimization extends AssemblyOptimization {
return code
}
// variants.foreach(println)
val (_, bestXs, bestYs, bestZs, bestAs) = variants.maxBy(_._1)
def reportOptimizedBlock[T](oldCode: List[(AssemblyLine, T)], newCode: List[AssemblyLine]): Unit = {