|
| 1 | +// RUN: circt-opt %s --synth-maximum-and-cover | FileCheck %s |
| 2 | + |
| 3 | +// CHECK-LABEL: @SingleFanoutCollapse |
| 4 | +hw.module @SingleFanoutCollapse(in %a: i1, in %b: i1, in %c: i1, in %d: i1, out o1: i1) { |
| 5 | + // CHECK-NEXT: %[[AND:.+]] = synth.aig.and_inv %a, %b, %c, %d : i1 |
| 6 | + // CHECK-NEXT: hw.output %[[AND]] : i1 |
| 7 | + %0 = synth.aig.and_inv %a, %b : i1 |
| 8 | + %1 = synth.aig.and_inv %0, %c, %d : i1 |
| 9 | + hw.output %1 : i1 |
| 10 | +} |
| 11 | + |
| 12 | +// CHECK-LABEL: @MultiFanoutNoCollapse |
| 13 | +hw.module @MultiFanoutNoCollapse(in %a: i1, in %b: i1, in %c: i1, out o1: i1, out o2: i1) { |
| 14 | + // CHECK-NEXT: %[[AND0:.+]] = synth.aig.and_inv %a, %b : i1 |
| 15 | + // CHECK-NEXT: %[[AND1:.+]] = synth.aig.and_inv %[[AND0]], %c : i1 |
| 16 | + // CHECK-NEXT: hw.output %[[AND0]], %[[AND1]] : i1, i1 |
| 17 | + %0 = synth.aig.and_inv %a, %b : i1 |
| 18 | + %1 = synth.aig.and_inv %0, %c : i1 |
| 19 | + hw.output %0, %1 : i1, i1 |
| 20 | +} |
| 21 | + |
| 22 | +// CHECK-LABEL: @InvertedNoCollapse |
| 23 | +hw.module @InvertedNoCollapse(in %a: i1, in %b: i1, in %c: i1, out o1: i1) { |
| 24 | + // CHECK-NEXT: %[[AND0:.+]] = synth.aig.and_inv %a, %b : i1 |
| 25 | + // CHECK-NEXT: %[[AND1:.+]] = synth.aig.and_inv not %[[AND0]], %c : i1 |
| 26 | + // CHECK-NEXT: hw.output %[[AND1]] : i1 |
| 27 | + %0 = synth.aig.and_inv %a, %b : i1 |
| 28 | + %1 = synth.aig.and_inv not %0, %c : i1 |
| 29 | + hw.output %1 : i1 |
| 30 | +} |
| 31 | + |
| 32 | +// CHECK-LABEL: @ComplexTree |
| 33 | +hw.module @ComplexTree(in %a: i1, in %b: i1, in %c: i1, in %d: i1, in %e: i1, in %f: i1, in %g: i1, out o1: i1) { |
| 34 | + // CHECK-NEXT: %[[AND0:.+]] = synth.aig.and_inv %d, not %e : i1 |
| 35 | + // CHECK-NEXT: %[[AND1:.+]] = synth.aig.and_inv not %c, not %[[AND0]], %f : i1 |
| 36 | + // CHECK-NEXT: %[[AND2:.+]] = synth.aig.and_inv %a, not %b, not %[[AND1]], %g : i1 |
| 37 | + // CHECK-NEXT: hw.output %[[AND2]] : i1 |
| 38 | + |
| 39 | + %1 = synth.aig.and_inv %a, not %b : i1 |
| 40 | + %2 = synth.aig.and_inv %d, not %e : i1 |
| 41 | + %3 = synth.aig.and_inv not %2, %f : i1 |
| 42 | + %4 = synth.aig.and_inv not %c, %3 : i1 |
| 43 | + %5 = synth.aig.and_inv %1, not %4 : i1 |
| 44 | + %6 = synth.aig.and_inv %5, %g : i1 |
| 45 | + |
| 46 | + hw.output %6 : i1 |
| 47 | +} |
0 commit comments