Skip to content

Commit

Permalink
no longer do return value optimization with tempvar, this caused inva…
Browse files Browse the repository at this point in the history
…lid code sometimes.
  • Loading branch information
irmen committed Dec 14, 2022
1 parent 8ab47d3 commit ca7932c
Showing 1 changed file with 0 additions and 27 deletions.
27 changes: 0 additions & 27 deletions codeOptimizers/src/prog8/optimizer/StatementOptimizer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -374,31 +374,4 @@ class StatementOptimizer(private val program: Program,

return noModifications
}

override fun after(returnStmt: Return, parent: Node): Iterable<IAstModification> {

if(compTarget.name==VMTarget.NAME)
return noModifications

val returnvalue = returnStmt.value
if (returnvalue!=null) {
val dt = returnvalue.inferType(program).getOr(DataType.UNDEFINED)
if(dt!=DataType.UNDEFINED) {
if (returnvalue is BinaryExpression || (returnvalue is TypecastExpression && !returnvalue.expression.isSimple)) {
// first assign to intermediary variable, then return that
val (returnVarName, _) = program.getTempVar(dt)
val returnValueIntermediary = IdentifierReference(returnVarName, returnStmt.position)
val tgt = AssignTarget(returnValueIntermediary, null, null, returnStmt.position)
val assign = Assignment(tgt, returnvalue, AssignmentOrigin.OPTIMIZER, returnStmt.position)
val returnReplacement = Return(returnValueIntermediary.copy(), returnStmt.position)
return listOf(
IAstModification.InsertBefore(returnStmt, assign, parent as IStatementContainer),
IAstModification.ReplaceNode(returnStmt, returnReplacement, parent)
)
}
}
}

return noModifications
}
}

0 comments on commit ca7932c

Please sign in to comment.