diff --git a/kernel/cellaigs.cc b/kernel/cellaigs.cc index 292af3f51..6246e59c7 100644 --- a/kernel/cellaigs.cc +++ b/kernel/cellaigs.cc @@ -385,6 +385,26 @@ Aig::Aig(Cell *cell) goto optimize; } + if (cell->type.in({ID($lt), ID($gt), ID($le), ID($ge)})) + { + int width = std::max(GetSize(cell->getPort(ID::A)), + GetSize(cell->getPort(ID::B))) + 1; + vector A = mk.inport_vec(ID::A, width); + vector B = mk.inport_vec(ID::B, width); + + if (cell->type.in({ID($gt), ID($ge)})) + std::swap(A, B); + + int carry = mk.bool_node(!cell->type.in({ID($le), ID($ge)})); + for (auto &n : B) + n = mk.not_gate(n); + vector Y = mk.adder(A, B, carry); + mk.outport(Y.back(), ID::Y); + for (int i = 1; i < GetSize(cell->getPort(ID::Y)); i++) + mk.outport(mk.bool_node(false), ID::Y, i); + goto optimize; + } + if (cell->type == ID($alu)) { int width = GetSize(cell->getPort(ID::Y));