Skip to content

Instantly share code, notes, and snippets.

@j2kun
Created November 18, 2023 05:49
Show Gist options
  • Save j2kun/46ee5fdd21ee6d660df1f4ab83dcdfa7 to your computer and use it in GitHub Desktop.
Save j2kun/46ee5fdd21ee6d660df1f4ab83dcdfa7 to your computer and use it in GitHub Desktop.
bazel run //tools:heir-opt -- --pass-pipeline='builtin.module(func.func(secret.generic(yosys-optimizer)), secret-distribute-generic)' $PWD/tests/yosys_optimizer/add_one_generic.mlir
module {
func.func @add_one(%arg0: !secret.secret<i8>) -> !secret.secret<i8> {
%c1_i8 = arith.constant 1 : i8
%false = arith.constant false
%0 = secret.generic ins(%arg0 : !secret.secret<i8>) {
^bb0(%arg1: i8):
%32 = comb.extract %arg1 from 0 : (i8) -> i1
secret.yield %32 : i1
} -> !secret.secret<i1>
%1 = comb.extract %c1_i8 from 0 : (i8) -> i1
%2 = secret.generic ins(%0, %1, %false : !secret.secret<i1>, i1, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 8 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%3 = secret.generic ins(%arg0 : !secret.secret<i8>) {
^bb0(%arg1: i8):
%32 = comb.extract %arg1 from 1 : (i8) -> i1
secret.yield %32 : i1
} -> !secret.secret<i1>
%4 = comb.extract %c1_i8 from 1 : (i8) -> i1
%5 = secret.generic ins(%2, %3, %4 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 150 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%6 = secret.generic ins(%2, %3, %4 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 23 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%7 = secret.generic ins(%arg0 : !secret.secret<i8>) {
^bb0(%arg1: i8):
%32 = comb.extract %arg1 from 2 : (i8) -> i1
secret.yield %32 : i1
} -> !secret.secret<i1>
%8 = comb.extract %c1_i8 from 2 : (i8) -> i1
%9 = secret.generic ins(%6, %7, %8 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 43 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%10 = secret.generic ins(%arg0 : !secret.secret<i8>) {
^bb0(%arg1: i8):
%32 = comb.extract %arg1 from 3 : (i8) -> i1
secret.yield %32 : i1
} -> !secret.secret<i1>
%11 = comb.extract %c1_i8 from 3 : (i8) -> i1
%12 = secret.generic ins(%9, %10, %11 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 43 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%13 = secret.generic ins(%arg0 : !secret.secret<i8>) {
^bb0(%arg1: i8):
%32 = comb.extract %arg1 from 4 : (i8) -> i1
secret.yield %32 : i1
} -> !secret.secret<i1>
%14 = comb.extract %c1_i8 from 4 : (i8) -> i1
%15 = secret.generic ins(%12, %13, %14 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 43 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%16 = secret.generic ins(%arg0 : !secret.secret<i8>) {
^bb0(%arg1: i8):
%32 = comb.extract %arg1 from 5 : (i8) -> i1
secret.yield %32 : i1
} -> !secret.secret<i1>
%17 = comb.extract %c1_i8 from 5 : (i8) -> i1
%18 = secret.generic ins(%15, %16, %17 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 43 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%19 = secret.generic ins(%arg0 : !secret.secret<i8>) {
^bb0(%arg1: i8):
%32 = comb.extract %arg1 from 6 : (i8) -> i1
secret.yield %32 : i1
} -> !secret.secret<i1>
%20 = comb.extract %c1_i8 from 6 : (i8) -> i1
%21 = secret.generic ins(%18, %19, %20 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 105 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%22 = secret.generic ins(%18, %19, %20 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 43 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%23 = secret.generic ins(%arg0 : !secret.secret<i8>) {
^bb0(%arg1: i8):
%32 = comb.extract %arg1 from 7 : (i8) -> i1
secret.yield %32 : i1
} -> !secret.secret<i1>
%24 = comb.extract %c1_i8 from 7 : (i8) -> i1
%25 = secret.generic ins(%22, %23, %24 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 105 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%26 = secret.generic ins(%0, %1, %false : !secret.secret<i1>, i1, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 6 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%27 = secret.generic ins(%6, %7, %8 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 105 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%28 = secret.generic ins(%9, %10, %11 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 105 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%29 = secret.generic ins(%12, %13, %14 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 105 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%30 = secret.generic ins(%15, %16, %17 : !secret.secret<i1>, !secret.secret<i1>, i1) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1):
%32 = comb.truth_table %arg1, %arg2, %arg3 -> 105 : ui8
secret.yield %32 : i1
} -> !secret.secret<i1>
%31 = secret.generic ins(%5, %21, %25, %26, %27, %28, %29, %30 : !secret.secret<i1>, !secret.secret<i1>, !secret.secret<i1>, !secret.secret<i1>, !secret.secret<i1>, !secret.secret<i1>, !secret.secret<i1>, !secret.secret<i1>) {
^bb0(%arg1: i1, %arg2: i1, %arg3: i1, %arg4: i1, %arg5: i1, %arg6: i1, %arg7: i1, %arg8: i1):
%32 = comb.concat %arg3, %arg2, %arg8, %arg7, %arg6, %arg5, %arg1, %arg4 : i1, i1, i1, i1, i1, i1, i1, i1
secret.yield %32 : i8
} -> !secret.secret<i8>
return %31 : !secret.secret<i8>
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment