From 86ef76953fdddfcb1ba18a703d78c83df1641095 Mon Sep 17 00:00:00 2001 From: Christian Krause Date: Fri, 13 Sep 2024 22:05:31 +0200 Subject: [PATCH] fix optimizer bug --- CHANGELOG.md | 4 ++++ src/eval/optimizer.cpp | 5 ----- tests/optimizer/E047.asm | 4 +++- tests/optimizer/E049.asm | 10 ++++++++++ 4 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 tests/optimizer/E049.asm diff --git a/CHANGELOG.md b/CHANGELOG.md index 794ac394..49af0f86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ To install or update LODA, please follow the [installation instructions](https:/ ## [Unreleased] +### Bugfixes + +* Fix optimizer bug + ## v24.9.7 ### Bugfixes diff --git a/src/eval/optimizer.cpp b/src/eval/optimizer.cpp index 5651d41d..768f54a7 100644 --- a/src/eval/optimizer.cpp +++ b/src/eval/optimizer.cpp @@ -793,11 +793,6 @@ bool Optimizer::collapseMovLoops(Program &p) const { if (val < Number::ZERO) { p.ops.erase(p.ops.begin() + i, p.ops.begin() + i + 3); changed = true; - } else if (val == Number::ZERO) { - p.ops.erase(p.ops.begin() + i + 1, p.ops.begin() + i + 3); - p.ops[i] = Operation(Operation::Type::MOV, lpb.target, - Operand(Operand::Type::CONSTANT, 0)); - changed = true; } else { p.ops.erase(p.ops.begin() + i + 1, p.ops.begin() + i + 3); p.ops[i] = Operation(Operation::Type::MIN, lpb.target, diff --git a/tests/optimizer/E047.asm b/tests/optimizer/E047.asm index ce8cf89b..7278683a 100644 --- a/tests/optimizer/E047.asm +++ b/tests/optimizer/E047.asm @@ -5,4 +5,6 @@ lpb $0 lpe add $0,7 ; out -mov $0,7 +add $0,3 +min $0,0 +add $0,7 diff --git a/tests/optimizer/E049.asm b/tests/optimizer/E049.asm new file mode 100644 index 00000000..8709f033 --- /dev/null +++ b/tests/optimizer/E049.asm @@ -0,0 +1,10 @@ +; in +sub $0,3 +lpb $0 + mov $0,0 +lpe +sub $0,7 +; out +sub $0,3 +min $0,0 +sub $0,7