Skip to content

Commit ba2bf88

Browse files
authored
Improve fixSandwich for mul,add,mul operations (#632)
1 parent 21967d4 commit ba2bf88

File tree

3 files changed

+11
-6
lines changed

3 files changed

+11
-6
lines changed

src/eval/optimizer.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -666,11 +666,9 @@ bool Optimizer::fixSandwich(Program &p) const {
666666
std::swap(op1, op2);
667667
op1.source.value *= op2.source.value;
668668
changed = true;
669-
} else if (op1.type == Operation::Type::MUL &&
670-
Semantics::mod(op2.source.value, op1.source.value) ==
671-
Number::ZERO) {
672-
std::swap(op1, op2);
673-
op1.source.value /= op2.source.value;
669+
} else if (op1.type == Operation::Type::MUL) {
670+
std::swap(op3, op2);
671+
op3.source.value *= op2.source.value;
674672
changed = true;
675673
}
676674
} else if (ProgramUtil::isAdditive(op2.type) &&

tests/optimizer/E031.asm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,5 @@ mul $0,6
33
sub $0,12
44
mul $0,3
55
; out
6-
sub $0,2
76
mul $0,18
7+
sub $0,36

tests/optimizer/E082.asm

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
; in
2+
mul $0,2
3+
add $0,1
4+
mul $0,4
5+
; out
6+
mul $0,8
7+
add $0,4

0 commit comments

Comments
 (0)