diff --git a/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc b/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc index db4317a..435bdd9 100644 Binary files a/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc and b/ritz/__pycache__/llvm_codegen_signals.cpython-313.pyc differ diff --git a/ritz/llvm_codegen_signals.py b/ritz/llvm_codegen_signals.py index 46d640f..3f89362 100644 --- a/ritz/llvm_codegen_signals.py +++ b/ritz/llvm_codegen_signals.py @@ -247,6 +247,29 @@ class SignalLLVMIRGenerator: elif expr["type"] == "constant": # Return constant inline return str(expr["value"]) + elif expr["type"] == "compare": + # Handle comparison (e.g., count > 5) + left_var = self._emit_expr(expr["left"]) + right_var = self._emit_expr(expr["comparators"][0]) + + # Map Python comparison ops to LLVM icmp predicates + op_map = { + "Gt": "sgt", # signed greater than + "Lt": "slt", # signed less than + "GtE": "sge", # signed greater or equal + "LtE": "sle", # signed less or equal + "Eq": "eq", # equal + "NotEq": "ne", # not equal + } + + icmp_op = op_map.get(expr["op"], "eq") + result_var = self._new_var() + self.lines.append(f" %{result_var} = icmp {icmp_op} i32 %{left_var}, {right_var}") + + # Convert i1 to i32 for compatibility + result_i32 = self._new_var() + self.lines.append(f" %{result_i32} = zext i1 %{result_var} to i32") + return result_i32 else: # Unknown expression type return "0"