From 8afb2c2572d1075766db5ac006396bfb24d4f272 Mon Sep 17 00:00:00 2001 From: sofia Date: Wed, 9 Jul 2025 19:00:03 +0300 Subject: [PATCH] Fix bug in Logic Operator conversion --- reid-llvm-lib/src/compile.rs | 4 ++-- reid/examples/reid/fibonacci.reid | 6 +++--- reid/src/codegen.rs | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/reid-llvm-lib/src/compile.rs b/reid-llvm-lib/src/compile.rs index c2a7dd7..0a38ff4 100644 --- a/reid-llvm-lib/src/compile.rs +++ b/reid-llvm-lib/src/compile.rs @@ -359,12 +359,12 @@ impl CmpPredicate { use LLVMIntPredicate::*; match (self, signed) { (LT, true) => LLVMIntSLT, - (GT, true) => LLVMIntSGT, (LE, true) => LLVMIntSLE, + (GT, true) => LLVMIntSGT, (GE, true) => LLVMIntSGE, (LT, false) => LLVMIntULT, - (GT, false) => LLVMIntUGT, (LE, false) => LLVMIntULE, + (GT, false) => LLVMIntUGT, (GE, false) => LLVMIntUGE, (EQ, _) => LLVMIntEQ, (NE, _) => LLVMIntNE, diff --git a/reid/examples/reid/fibonacci.reid b/reid/examples/reid/fibonacci.reid index 35cc20b..30a9b66 100644 --- a/reid/examples/reid/fibonacci.reid +++ b/reid/examples/reid/fibonacci.reid @@ -1,12 +1,12 @@ // Main fn main() -> bool { - return 1 == fibonacci(3); + return 2 == fibonacci(3); } // Fibonacci fn fibonacci(value: u16) -> u16 { - if value < 3 { + if value <= 2 { return 1; } - return 5 + fibonacci(value - 2); + return fibonacci(value - 1) + fibonacci(value - 2); } diff --git a/reid/src/codegen.rs b/reid/src/codegen.rs index 18f2ae3..0ca3b03 100644 --- a/reid/src/codegen.rs +++ b/reid/src/codegen.rs @@ -291,7 +291,7 @@ impl mir::LogicOperator { match self { mir::LogicOperator::LT => CmpPredicate::LT, mir::LogicOperator::GT => CmpPredicate::GT, - mir::LogicOperator::LE => CmpPredicate::LT, + mir::LogicOperator::LE => CmpPredicate::LE, mir::LogicOperator::GE => CmpPredicate::GE, mir::LogicOperator::EQ => CmpPredicate::EQ, mir::LogicOperator::NE => CmpPredicate::NE,