mirror of https://github.com/llvm/circt.git
44 lines
1.2 KiB
MLIR
44 lines
1.2 KiB
MLIR
// RUN: circt-opt %s --canonicalize | FileCheck %s
|
|
|
|
// CHECK-LABEL: @And
|
|
hw.module @And(in %a: i4, in %b: i4, out o1: i4, out o2: i4,
|
|
out o3: i4, out o4: i4, out o5: i4, out o6: i4, out o7: i4,
|
|
out o8: i4) {
|
|
// CHECK-NEXT: %c-1_i4 = hw.constant -1 : i4
|
|
// CHECK-NEXT: %c0_i4 = hw.constant 0 : i4
|
|
// CHECK-NEXT: %c5_i4 = hw.constant 5 : i4
|
|
// CHECK-NEXT: %[[TMP1:.+]] = aig.and_inv %a, %c5_i4 : i4
|
|
// CHECK-NEXT: %[[TMP2:.+]] = aig.and_inv %a, %b : i4
|
|
// CHECK-NEXT: hw.output %c0_i4, %[[TMP1]], %a, %a, %c0_i4, %[[TMP2]], %c0_i4, %c-1_i4 : i4, i4, i4, i4, i4, i4, i4, i4
|
|
%c0 = hw.constant 0 : i4
|
|
%c2 = hw.constant 2 : i4
|
|
%c7 = hw.constant 7 : i4
|
|
%c15 = hw.constant 15 : i4
|
|
|
|
// a & 0 -> 0
|
|
%0 = aig.and_inv %a, %c0 : i4
|
|
|
|
// a & 7 & ~2 -> a & 5
|
|
%1 = aig.and_inv %a, %c7, not %c2 : i4
|
|
|
|
// a & 15 -> a
|
|
%2 = aig.and_inv %a, %c15 : i4
|
|
|
|
// a & ~0 -> a
|
|
%3 = aig.and_inv %a, not %c0 : i4
|
|
|
|
// a & ~15 -> 0
|
|
%4 = aig.and_inv %a, not %c15 : i4
|
|
|
|
// a & a & b -> a & b
|
|
%5 = aig.and_inv %a, %a, %b : i4
|
|
|
|
// a & ~a & b -> 0
|
|
%6 = aig.and_inv %a, not %a, %b : i4
|
|
|
|
// 15 & 15 -> 15
|
|
%7 = aig.and_inv %c15, %c15 : i4
|
|
|
|
hw.output %0, %1, %2, %3, %4, %5, %6, %7 : i4, i4, i4, i4, i4, i4, i4, i4
|
|
}
|