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:
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user