From 4a4b6c04a12a4f1346482063e89e0f0bb04207da Mon Sep 17 00:00:00 2001 From: Irmen de Jong Date: Sun, 7 Jan 2024 22:37:15 +0100 Subject: [PATCH] tweak common subexpression optimization for array lookups --- codeCore/src/prog8/code/optimize/Optimizer.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/codeCore/src/prog8/code/optimize/Optimizer.kt b/codeCore/src/prog8/code/optimize/Optimizer.kt index dd3606be1..705be8f25 100644 --- a/codeCore/src/prog8/code/optimize/Optimizer.kt +++ b/codeCore/src/prog8/code/optimize/Optimizer.kt @@ -25,10 +25,16 @@ private fun walkAst(root: PtNode, act: (node: PtNode, depth: Int) -> Boolean) { private fun optimizeCommonSubExpressions(program: PtProgram, errors: IErrorReporter): Int { fun extractableSubExpr(expr: PtExpression): Boolean { - return if(expr is PtBinaryExpression) - !expr.left.isSimple() || !expr.right.isSimple() || (expr.operator !in LogicalOperators && expr.operator !in BitwiseOperators) + val result = if(expr is PtBinaryExpression) + expr.type !in ByteDatatypes || + !expr.left.isSimple() || + !expr.right.isSimple() || + (expr.operator !in LogicalOperators && expr.operator !in BitwiseOperators) + else if (expr is PtArrayIndexer && expr.type !in ByteDatatypes) + true else !expr.isSimple() + return result } // for each Binaryexpression, recurse to find a common subexpression pair therein.