Commit Graph

73 Commits

Author SHA1 Message Date
Edward Chen
29e9b2f648 updated c frontend to support ordered arguments, fixed array init bug 2023-05-01 13:20:27 -04:00
Edward Chen
eb6f98755b passes rust check 2023-03-21 14:45:01 -04:00
Edward Chen
9d3e3041bc merge 2023-03-21 00:01:10 -04:00
Alex Ozdemir
706405fd4f Committed witnesses & randomness in Z# (& tests) (#154)
A basic implementation of committed witnesses & volatile RAM extraction in the Z# front-end.

The passes in question are still a bit brittle, so I left them behind a flag.
2023-03-15 16:28:19 -07:00
Edward Chen
06a34c8cc5 Linker Optimization Pass (#152) 2023-03-15 15:03:51 -04:00
Alex Ozdemir
450c37b896 Add extension operators and new operators (#150)
modifies some opt passes w/ new ops
2023-03-14 01:09:46 -07:00
Edward Chen
9813eef19c working through def-use-graph and linker 2023-03-13 12:55:44 -04:00
Alex Ozdemir
77e7040047 Mirage, variable rounds, randomness, zk opt (#146)
Adds:

    an implementation of the Mirage proof system
        generalized to multiple round of interaction
    a notion of rounds for variables
    a notion of randomness for variables
    to the R1CS layer:
        committed witnesses
        rounds
    new witness computation machinery (to support multiple rounds)
2023-02-06 09:58:19 -08:00
Edward Chen
c06e938c41 Introducing SV Comp-style tests for C Frontend (#140)
Integrating SV comp tests for C Frontend

---------

Co-authored-by: Alex Ozdemir <aozdemir@hmc.edu>
2023-01-29 21:30:55 -05:00
Edward Chen
20b91a6601 Clippy: uninlined_format_args (#141) 2023-01-29 21:05:15 -05:00
Alex Ozdemir
5e36d4ba03 features: add bellman, spartan, aby (#139)
Also, add ./driver --check-all, which checks every single-feature build.
2023-01-19 00:13:09 -08:00
Alex Ozdemir
d15db74f04 change metadata serialization & representation (#137)
In the new approach, all variable metadata is stored per-variable.

This makes it easier to add new kinds of metadata, and to serialize that metadata.
2023-01-18 11:22:43 -08:00
Alex Ozdemir
5f3d2b95fe Split hash-consing into its own crate & reimplement (#134)
I split the hash-consing implementation into its own crate and re-implemented it.

In the new implementation, the table is thread-local. Terms are not Send, but linear terms are.

Decreased used of atomics gives a non-trivial speed-up. I tested on Z#'s sha2 round function, with an exit after IR optimization:

Benchmark #1: ./circ-old third_party/ZoKrates/zokrates_stdlib/stdlib/hashes/sha256/shaRound.zok r1cs
  Time (mean ± σ):     236.2 ms ±  16.1 ms    [User: 223.3 ms, System: 12.4 ms]
  Range (min … max):   221.1 ms … 264.1 ms    11 runs

Benchmark #2: ./circ-new third_party/ZoKrates/zokrates_stdlib/stdlib/hashes/sha256/shaRound.zok r1cs
  Time (mean ± σ):     141.8 ms ±  13.1 ms    [User: 131.3 ms, System: 10.0 ms]
  Range (min … max):   125.4 ms … 160.4 ms    18 runs

Summary
  './circ-new third_party/ZoKrates/zokrates_stdlib/stdlib/hashes/sha256/shaRound.zok r1cs' ran
    1.67 ± 0.19 times faster than './circ-old third_party/ZoKrates/zokrates_stdlib/stdlib/hashes/sha256/shaRound.zok r1cs'
2023-01-17 02:17:58 -08:00
Alex Ozdemir
838b8a6791 Include Anna's test cases and fix (#131)
The first bug is a disagreement between our bellman circuit and our bellman
verify function. The circuit omit unused variables (public or private). The
verify function includes unused public variables.

Now, the circuit includes unused public variables.

The second bug is related to large BV comparisons. The fix is to emit a
bitwise comparator. We could optimize further in the future.

closes #125
2023-01-09 23:00:35 -08:00
Alex Ozdemir
ebfd6853d3 Avoid R1CS copy (#130)
Co-authored-by: Riad S. Wahby <rsw@jfet.org>
2023-01-06 09:11:27 -08:00
Alex Ozdemir
1a1cdc5858 Add option to panic on OOB PfToBv (#129) 2023-01-05 19:57:04 -08:00
Alex Ozdemir
f9bedf0787 Alternative formatter (#128)
* Configuration system. Kill DFL_T

* add circ::cfg::CircCfg that holds cfg info
   * it's constructible from circ_opt::CircOpt
      * implements clap::Args, so you can set it from your compiler's
        CLI/envvars
      * defined in external crate to keep clap out of our main build
      * organized by circ module, but not feature gated
         *  no point: the build wouldn't meaningfully change
      * includes a way to set the default field
* added circ::cfg::set and circ::cfg::cfg
   * also circ::cfg::set_default and circ::cfg::set_cfg
   * access a sync::once_cell, static configuration
* killed DFL_T

* workflows
   * unit-tested component probably need to not read circ::cfg::cfg.
   * compilers need to call circ::cfg::set or circ::cfg::set_default.

* rm dead features

* WIP

* Alternate formatting machinery.

* fmt & lint

* rm Letified

* ilp
2023-01-03 21:51:28 -08:00
Alex Ozdemir
be8741c615 Configuration system. Kill DFL_T (#127)
* Configuration system. Kill DFL_T

* add circ::cfg::CircCfg that holds cfg info
   * it's constructible from circ_opt::CircOpt
      * implements clap::Args, so you can set it from your compiler's
        CLI/envvars
      * defined in external crate to keep clap out of our main build
      * organized by circ module, but not feature gated
         *  no point: the build wouldn't meaningfully change
      * includes a way to set the default field
* added circ::cfg::set and circ::cfg::cfg
   * also circ::cfg::set_default and circ::cfg::set_cfg
   * access a sync::once_cell, static configuration
* killed DFL_T

* workflows
   * unit-tested component probably need to not read circ::cfg::cfg.
   * compilers need to call circ::cfg::set or circ::cfg::set_default.

* rm dead features
2022-12-25 20:53:27 -08:00
Alex Ozdemir
051809a554 Better serde for Computation, PreComp, R1cs (#120)
The previous implementation for all 3 structures would separately serialize each term in a precomputation. This was very bad, because precomputations can be quite large, and the different terms typically share large numbers of sub-terms. This can be quadratic blowup.

Change list:

    add input/output type metadata to PreComp (this makes the type of variables in a PreComp clear)
    add textual serialization and parsing for PreComp (and include this in Computation)
    add serde implementations for Computation and PreCop based on the text formats.
    modify the R1cs serde derive so that the Vec<Term> is tuplized before serde

This reduces our prover-key size for verifyEddsa.zok from wildly large (>450GB) to 171MB.

Collin and Anna first observed this bug. Collin's PR #118 works around it (among other improvements).
2022-11-08 15:47:51 -08:00
Jess Woods
25773910e5 Spartan Backend (#70) 2022-11-07 10:11:58 -08:00
Edward Chen
90f6b2ff35 Unsigned (#115)
Support `unsigned` in the C frontend
2022-11-01 23:46:08 -04:00
Edward Chen
1290ad09f8 Function Abstraction, end-to-end testing with MPC backend (#114)
Updated MPC unit tests to use function abstractions. Most of these updates are made to the C frontend and MPC lowering pass. Additional optimization and ILP solving passes need to be updated.

The assignment and cost model passes now need to factor in Array and Tuple semantics. This requires changes to the CostModel assignments. This also requires the the def-use-graph implementation for constant-index propagation.

Work-around:
- disabled HyCC benchmark tests
- disabled tests that use Op::Select / Op::Store
2022-10-31 15:33:36 -04:00
Alex Ozdemir
a8f512aff3 Improve conditional matrix mult with 3 opts (#116)
We received a benchmark from Lef which essentially checked the
following:

   (cond ? A*B : A*C)[i] == v

where A, B, C are 4 by 4 matrices, cond is a bool, i is an index, and v
a value.

The expected number of constraints is n^3: order 64 , but compile time
and constraint count were in the thousands.

I investigated finding a number of things:
* the Z# front-end entered a conditional branch for the ternary, causing
  the MM to happen in a conditional context
* while the MM has an oblivious access pattern, since `i` is variable,
  the oblivious pass wasn't really helping
* there were some weird non-constant indices floating around like
  (ite cond 0 0)

The three optimizations fix these problems:
* If the Z# frontend isn't in assertion isolation mode, don't enter a
  conditional branch for an ITE
* Constant folding: add the rewrite (ite cond a a) -> a
* Linear-scan array eliminator: for each operation, check if the index
  is constant. If so, skip the scan (for that access only)
2022-10-27 13:02:44 -07:00
Edward Chen
f1dbab65ab Function Abstractions (#113)
Initial commit for support function abstractions.

`Computations` are maps of function names `str` to computation `Computation`. 

Updates:
- Frontend `Gen` returns `Computations` with only a single main `Computation`.
- Optimizations take in `Computations` instead of a single `Computation`. Optimizations are applied to each `Computation`. 
- Backends take in only the main `Computation`.
2022-10-18 21:27:58 -04:00
Edward Chen
a6bedd4f2d Boilerplate for C AstWalker (#109) 2022-10-18 10:14:03 -04:00
Edward Chen
e2edbadd0d Clone audit of the C frontend (#106) 2022-10-12 11:55:44 -07:00
Alex Ozdemir
15eadb6110 Fix Linter Warnings (#103) 2022-09-12 16:04:23 +02:00
Riad S. Wahby
20198e9012 add.c: mpc_main -> main (#96) 2022-08-03 17:38:18 -04:00
Alex Ozdemir
0b3c936a40 Integers (#91)
We already had sorts and values. Now we have operators too. These are only really in the SMT backend right now.
2022-07-26 15:12:14 -07:00
Alex Ozdemir
8bd4dbaeed ZoKrates assertion bugfix and option to isolate (#89) 2022-06-23 22:14:58 -07:00
Edward Chen
7693d30975 Updates to C Frontend (#67)
Supporting:
- structs
- ptrs
- n-dimension arrays
- nested structs
- typedef
- sizeof
- shift operations

Benchmarks:
- Original HyCC kmeans testcase (without recursion).
- Original HyCC gauss testcase.

Co-authored-by: Alex Ozdemir <aozdemir@hmc.edu>
Co-authored-by: Ubuntu <ubuntu@neptune2.maas>
2022-05-20 02:20:36 -04:00
Alex Ozdemir
c1293464d2 Precomputations (or, as-known-for-proofs, witness extension) (#80)
Co-authored-by: Riad S. Wahby <rsw@jfet.org>
2022-05-17 08:54:04 -07:00
Riad S. Wahby
a3fa232ba2 improve memory consumption ; add Z# strict unary op, ternary ?:, and type aliases (#77)
* update TODO

* add quiet mode to zxc

* Drop and garbage collection

This commit adds Drop instances and related functionality that force
garbage collection at life cycle end of various structs that contain
Terms.

I didn't implement Drop for Computation because its Terms are generally
moved into a converter. This means that back-ends are responsible for
garbage collecting (see new functionality in ILP, R1cs, and ABY).

* collect the cfold table, too

* prevent double-panic as a result of garbage_collect()

* z# parser: zx is a default extension too

* update Cargo.lock

* strictness un-op #()

also added err messages for asserts and ?: ternary support from ZoK upstream

* for assignments, strict rhs => strict lhs

* zsharp: type definitions WIP

Still missing monomorphization.

* type defns: generic inference

* struct monomorphization for type aliased structs

* different approach: no monomorphization, just canonicalize aliases

* canonicalize struct names

* typedef tests

things work except that importing an alias and not its referent breaks typechecking

* add error message about needing to import referent structs

* update hashconsing pointer in Cargo.toml

* maybe_garbage_collect should also return early when panicking

Co-authored-by: Alex Ozdemir <aozdemir@hmc.edu>
2022-05-04 10:08:23 -07:00
Alex Ozdemir
0b42f26089 Improve non-recursive type-checking (#74)
In *non-recursive* type-checking, perhaps better called *type computing*
we perform a minimal traversal in order to compute the type of a term,
without recursively type-checking it. Informally, we assume it is well
typed, and do the minimal amount of work needed to compute its type.

Two improvements:
1. No longer implemented with recursion.
2. Caches all intermediate results.

Implementation:
* `check_dependencies(Term) -> Vec<Term>`: maps a terms to the immediate
  children of it whose types are needed to compute its type.
* `check_raw_step(Term, TypeTable) -> Sort`: assumes those children have
  their types in the table, and computes this term's type.
* `check_raw`: glues the two above functions together into a suitable
  traversal. Similar to `rec_check_raw`, but the traversal isn't total.

Significance:

Previously, we had a non-recursive implementation for array stores that
*didn't cache intermediate results* which could cause quadratic
type-checking time (if the type-check callee was doing a top-down
traversal). Edward sent me a benchmark that was experiencing this,
resulting in 74.1% of total compilation time being spent type-checking.
Now it's down to 0.4% of total compilation time.
2022-04-11 11:41:02 -07:00
Edward Chen
63e3bea1b8 Adding benchmark scripts and logging for ABY backend (#72) 2022-04-06 04:04:52 -04:00
Riad S. Wahby
8c8e704914 field flexibility ; add limit for linearity reduction (#66)
Co-authored-by: Alex Ozdemir <aozdemir@hmc.edu>
2022-03-25 15:03:09 -07:00
Edward Chen
8fed29bd32 ABY VM and Interpreter (#47)
Updated ABY testing framework with an ABY bytecode and interpreter
2022-02-28 19:47:50 -05:00
Edward Chen
b9526234ac Updating build system (#44)
`python3 driver.py -h`
2022-02-25 17:13:10 -05:00
Edward Chen
76539bf05d Function and Import support for C Frontend (#45)
Co-authored-by: Alex Ozdemir <aozdemir@hmc.edu>
Co-authored-by: Ubuntu <ubuntu@neptune2.maas>
2022-02-16 12:15:51 -05:00
Riad S. Wahby
52f793f3a0 feature branch: zsharp (#30)
* macos deps script (broken on M1 for now)

* arch dep should be coin-or-cbc

* ZoK 0.7.6 support megat status-commit

- bring in ZoK 0.7.6 libraries

- port in diffs from old thirdparty

- first-cut const and literal support

- add toposort for includes so that we can resolve const values in next pass

- statement handling, include-walking fix

- type should cover u64 case, too

- structs: store for now

- const handling

- flatten import map up-front to make later derefs easier to handle

- stash note

- need array consts, too

- rough in const array support, I think

- error message

- small cleanups: change type of ZGen::constants and make comments more meaningful

- generics in fn calls

- small: better error message

- need to resolve exprs as const in const_type_

- wip simple typing pass

- ast visitor wip

- zokrates ast visitor 1st cut

- double check that we cover all product types

- const typing visitor ; visitor error handling

- reorg visit_files ; unification infra wip

- unification infra wip

- need to walk accesses for an assignment

- walk_accesses wip

- small q

- refactor: data structs should be Hash(Hash), not flat

- walk_accesses wip

- monomorphize structs on LHS of declarations

- check identifiers when monomorphizing structs

- unification wip

- unification wip

- inline struct members must declare all fields

- unification for array_initializer

- unify postfix

- unify fdef with call

- ZExpressionTyper wip

- ZExpressionTyper wip

- ZExpressionTyper first cut

- type equality first cut

- type equality improved

- update struct handling

- stash note

- zok_fe trivial

- error msg fix

- params in scope during stmt visiting

- stash note

- and_then rather than unwrap in flatten_import_map

- handle special names (e.g. EMBED) in toposort

- types for EMBED

- EMBED is now a valid file in stdlib

- rewriter should handle Types, too

- need to rewrite literals on LHS of def stmts

- iteration: fix type of iter var

- for now, allow indexing with both Field and u*

- add warning for indexing with Field

- impl pow

- don't add ITE when unconditionally assigning

- oops, Uint takes bv_lit not pf_lit

- simplify

- fix arg order to bv_lit, improve new_<integral> functions

- use constant folding for term::const_int

- EMBED rework wip

- EMBED rework wip

- EMBED rework wip

- EMBED rework wip

- EMBED rework wip

- prep for generic inf push

- generic inf wip

- generic inf wip

- generic inf wip

- struct generic inference

- struct array inference wip

- make const_expr_ return Result<> rather than blowing up

- finish first-cut generic inf for Array

- turn on fn generic inf

- rework struct monomorphization code

- add support for const asserts

- process declarations lexically

    previously we'd processed all consts, then structs, then fns.
    now we want to add const initialization via function call,
    which is easiest to implement if we simply process declarations
    in-order as they appear in the file and require that all uses
    follow defs lexically.

    This seems to rule out mutual recursion, so we may want to revisit.

- add const initialization via ternary

- const fn call wip

- ZGen interior mutability

    this lets us call expr, const_expr_ without mut ref.
    this seems to be the right way to go here.

- small touches after rebase

- reorganize zvisit code

- generic lookup: should go through whole stack! (and not panic if stack is empty)

- wip bugfixes

- const_identifier_ should consult generics ; generic_lookup shouldn't traverse the whole stack

- expr type inf for array accesses

- small

- const_stmt_ infra

- const_stmt_ most var infra in place

- cvar_assign handles AssigneeAccesses now

- split type_ and const_type_ using const generics

- cvar_assign: build up list of accesses before resolving them, so that we don't try to double-borrow cvars_stack

- interpreter intf

- zoki --- zok interpreter front-end

- const_expr direct access vs through term impl

- very quick zsharp readme

- feature gate ILP back-end

    this makes it easier to build CirC on M1 macs (otherwise,
    need to build coin-or from source, which is not hard but
    is annoying)

- rename zokrates to zsharp

- heavy hitting stuff here

- update z# readme

- turn off ci for zsharp branch

- small

- add cfg to switch to bn254 curve

- zsharp readme quick

- struct consts

- handle literals on LHS of const decls

- typechecker: ! can take U*, too

- refactor typechecking in InlineStructExpression handling, const_eexpr_ (this is going to move, though)

- support inline structs in ZConstLiteralRewriter

- really turn of ci this time, don't just induce a failure

- don't build circ or opa_bench examples when 'lp' option is off ; fix example builds given renamed zokrates module

- unify_inline_array: respect array dims!

- better InlineArray len handling

- check fn return type

- small, plus a few tiny test cases

- redefinition is an error

- update thinking / status on uglinesses

- explicit generic literals are U32

- remove redundant typechecking in InlineStruct const expr handling

- array and struct equality

- generic-in-generic const test

- inline array and struct generic tests

- small

- sticky notes

- stash note

- small cleanup in zstmtwalker

- support ZSHARP_STDLIB_PATH envvar in ZStdLib

- get_field_size in EMBED ; field comparisons

- test runner

- hex literal fix

- inconsistent array test

- literals test

- TODO quick update

* generic inf refactor wip

* generic inf refactor

- keep plugging away at revamped generic inference

- generic inf refactor wip

- generic inf rework wip

- stash note about divrem

- generic inf wip

- build up one term rather than a vec; walk struct members; remove old crap

- small

- generic inf rework wip

- generic inf refactor wip

- partially hook up new generic inf

- zgenericinf: invoke solver, return result

- ZGenericInf hooked up

- stash a note

- find_unique_model function

- enable incremental mode for find_unique_model

- hook up find_unique_model in zgenericinf

* go over TODOs and small cleanup

* field %

- field to bv should use full width

- need to make sure MSB is 0 when lowering to R1CS\!

* update todos

* unify const and non-const code paths

- unify function_call and const_function_call

- unify stmt and const_stmt

- type_impl_ returns Result<>

- unify expr and const_expr

* update TODO

* rework after rebase

* fix circ example and clippies

* constant folding for array select and store

* cfold: Tuple and extend Eq

* more informative generic params error message in function call

* array accesses should be Field if not otherwise typed

* support Uxx array indexing (automatic type coercion) ; check array index and value for consistency

* tuple const folding

* stash note about array construction

* todos

* more todos

* IR tuple repr: use boxed slices rather than vecs

this enforces the invariant that tuple lengths cannot be changed

closes #39

* IR tuple typing checks

the value in a given tuple slot has a fixed type.
this invariant isn't fully captured right now---it's
up to front- and back-ends to enforce this.

[ EDIT: I think the above is wrong. `ir::term::ty::rec_check_raw`
  appears to enforce this. ]

I've added a couple extra safety checks for this.

* todo update

* const fold bvconcat and booltobv

* IR array key_sort and bounds checks

* array oob todos / tests

* ZGenericInf early exit for monomorphized calls

* self.unwrap cleanup

* cache generic inference results

* small debug/assert

* array construction optimization

when constructing an array, push leaf terms directly into the array
rather than building up a huge term. This reduces memory pressure and
reduces constant folding cost in the (common) case of large const
arrays

* todos

* clippy

* bit order consistency fix / tests

to_bits and from_bits functions use msb0 ordering
(i.e., index 0 of the bool array is the MSB)

* clippy small

* update TODOs

* clippy for zsharp frontend

* cargo fmt ; pretty-printing T

* add span for error context in expr and stmt

* update TODOs

* add s_divisible and s_remainder in 'field' in stdlib

* comment on signed field fns

* superfluous front-end example

* zxi unused imports

* zxc first cut

* zxc: in count mode, dump out constraints

* sidestep stack blowup in ir::term::ty::check_raw

* add option to skip linearity reduction in zxc with -L

* debug messages... darn

* lru caching for cfold

* unbounded/bounded cache

unbounded during a single fold_cache call, bounded between

* rebase fixes

feature gate aby back-end with lp
changes in zxi/zxc, and some clippies

* don't check-in non-top-level Cargo.lock

* increase LRU cache size for cfold to avoid n^2 behavior

* heuristic term/type cache collector

* tidy

* fmt

* small bugfix

* small fixes ; move zx_tests

* re-enable ci

* fmt

* tentative obliv-fix

* more obliv-fix

* clippy (for tests)

* Polish the obliv fix a bit. Document

* Addressing my unsolicited comment

* fix build

* typo

* stash Alex's idea about modeling RAM transformations

* back to upstream hashconsing

Co-authored-by: Alex Ozdemir <aozdemir@hmc.edu>

Co-authored-by: Riad S. Wahby <rsw@jfet.org>
Co-authored-by: Alex Ozdemir <aozdemir@hmc.edu>
2022-02-06 22:47:30 -05:00
Edward Chen
75572c6a2c C Frontend (#22) 2022-01-20 10:16:27 -08:00
Alex Ozdemir
f2744e0c06 IR-based Zokrates front-end (#33)
The ZoKrates front-end now represents ZoK arrays as IR arrays, and ZoK structures as (type-tagged) IR tuples.

During this change, I discovered that IR support for eliminating tuples and arrays was not complete.

Thus the change list is:

    The ZoK front-end uses IR arrays and tuples
    Improve IR passes for array and tuple elimination
    Enforce cargo fmt in CI
    Bugfix: handle ZoK accessors in L-values in the correct order
    Bugfix: add array evaluation to the IR

This PR does not:

    implement an array flattening pass
    implement permutation-based memory-checking

Benefits:

    The ZoK->R1CS compiler is now ~5.88x faster (as defined by the time it takes to run the tests in master's scripts/zokrates_test.zsh script: this goes from 8.59s to 1.46s)
        For benchmarks with multi-dimensional arrays, the ZoK->R1CS compiler can now compile them with reasonable speed. Before it it would time out on even tiny examples.
    The ZoK->R1CS compiler will be able to benefit from future memory-checking improvements
    IR support for arrays and tuples is complete now, making those parts of the IR more accessible to future front-ends.

alex-ozdemir added 21 commits 11 days ago
2022-01-01 11:44:56 -08:00
Alex Ozdemir
8914c007cd Public inputs for proofs. (#27) 2021-12-10 13:09:05 -08:00
Alex Ozdemir
4ffa05fca6 Datalog (#26)
Support a datalog variant.
2021-11-30 13:26:25 -08:00
Alex Ozdemir
8a05a107ed Deterministic compilation & better CLI (#25)
This PR makes compilation deterministic (by switching to fxhash) and improves the CLI.

Technically, the std-based hash tables cannot be guaranteed to have the deterministic iteration order that we need, regardless of what hash you use, so I've added some micro-tests for the property that we need. I'm not optimistic about getting better guarantees from std, but I'll try.

The CLI has also changed.
2021-11-29 15:17:32 -08:00
Alex Ozdemir
efe0d62263 Proof of high-value & tests 2021-10-18 15:29:37 -07:00
Edward Chen
991c710cea Support lowering loops to ABY (#19)
* loops for ABY!
2021-09-03 11:24:53 -04:00
Edward Chen
92cff0a119 Integrated EZPC helper file (#18)
* Added EZPC helper file, updated output, added shift tests
2021-09-02 18:08:08 -04:00
Edward Chen
d9d66896b3 Added support for multiple outputs in test cases (#17) 2021-08-31 19:24:14 -07:00
Edward Chen
fd2a7e4bf2 Added Conversion Gates & Integrated with OPA SharingMap (#16)
* OPA-by-ILP benchmark example

* Reverted unverified push to master branch

* Added conversion gates and integrated ABY lowering with SharingMap

Co-authored-by: Alex Ozdemir <aozdemir@hmc.edu>
2021-08-25 22:38:50 -07:00