Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Sync from noir #6138

Merged
merged 33 commits into from
May 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
ee35080
[1 changes] fix: Require for all foldable functions to use distinct r…
AztecBot May 1, 2024
4798f16
chore: standard changes
TomAFrench May 1, 2024
b9fd923
Merge branch 'master' into sync-noir
TomAFrench May 1, 2024
2438b0c
chore: fix merge issues
TomAFrench May 1, 2024
27766c0
chore: remove usage of `distinct`
TomAFrench May 1, 2024
99cfa7b
chore: clippy
TomAFrench May 1, 2024
9b93613
Update noir-projects/noir-protocol-circuits/crates/parity-root/src/ma…
vezenovm May 1, 2024
7d9968c
Update noir-projects/noir-protocol-circuits/crates/private-kernel-ini…
vezenovm May 1, 2024
e7e01ec
Update noir-projects/noir-protocol-circuits/crates/private-kernel-ini…
vezenovm May 1, 2024
785ed22
Update noir-projects/noir-protocol-circuits/crates/private-kernel-inn…
vezenovm May 1, 2024
1af66e3
Update noir-projects/noir-protocol-circuits/crates/private-kernel-inn…
vezenovm May 1, 2024
d0c03e0
Update noir-projects/noir-protocol-circuits/crates/public-kernel-setu…
vezenovm May 1, 2024
1bda160
Update noir-projects/noir-protocol-circuits/crates/public-kernel-tail…
vezenovm May 1, 2024
ecc4a50
Update noir-projects/noir-protocol-circuits/crates/public-kernel-tail…
vezenovm May 1, 2024
1fd1367
Update noir-projects/noir-protocol-circuits/crates/public-kernel-tear…
vezenovm May 1, 2024
5465355
Update noir-projects/noir-protocol-circuits/crates/public-kernel-tear…
vezenovm May 1, 2024
5e6f867
Update noir-projects/noir-protocol-circuits/crates/private-kernel-tai…
vezenovm May 1, 2024
2c460be
Update noir-projects/noir-protocol-circuits/crates/private-kernel-tai…
vezenovm May 1, 2024
7b4b41a
Update noir-projects/noir-protocol-circuits/crates/private-kernel-tai…
vezenovm May 1, 2024
bf17347
Update noir-projects/noir-protocol-circuits/crates/private-kernel-tai…
vezenovm May 1, 2024
527bb03
Update noir-projects/noir-protocol-circuits/crates/public-kernel-app-…
vezenovm May 1, 2024
16fd256
Update noir-projects/noir-protocol-circuits/crates/public-kernel-app-…
vezenovm May 1, 2024
d9e5a3b
Update noir-projects/noir-protocol-circuits/crates/public-kernel-setu…
vezenovm May 1, 2024
de20d56
fixup avm-transpiler opcode checks
vezenovm May 1, 2024
d31807e
filter out generate unique return witness on brillig funcs
vezenovm May 1, 2024
79cdb6e
clippy on noir
vezenovm May 1, 2024
6adf62d
Merge branch 'master' into sync-noir
vezenovm May 1, 2024
b56778a
move opcodes len check before match
vezenovm May 1, 2024
5428e6e
remove bad .
vezenovm May 1, 2024
b6ee6a5
Merge remote-tracking branch 'origin/sync-noir' into sync-noir
vezenovm May 1, 2024
fe85b27
chore: increase timeout
TomAFrench May 1, 2024
f340063
temp skip witness_compression test, it breaks with prove_then_verify_…
vezenovm May 1, 2024
f6fdd1e
Merge remote-tracking branch 'origin/sync-noir' into sync-noir
vezenovm May 1, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .noir-sync-commit
Original file line number Diff line number Diff line change
@@ -1 +1 @@
8aad2e45acbe08afc3902db95a83324f822c35eb
d4c68066ab35ce1c52510cf0c038fb627a0677c3
9 changes: 5 additions & 4 deletions avm-transpiler/src/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,17 @@ pub fn extract_brillig_from_acir_program(program: &Program) -> &[BrilligOpcode]
assert_eq!(
program.functions.len(),
1,
"An AVM program should have only a single ACIR function flagged as 'BrilligCall'"
"An AVM program should have only a single ACIR function with a 'BrilligCall'"
);
let opcodes = &program.functions[0].opcodes;
let main_function = &program.functions[0];
let opcodes = &main_function.opcodes;
assert_eq!(
opcodes.len(),
1,
"An AVM program should have only a single ACIR function flagged as 'BrilligCall'"
"An AVM program should only have a single `BrilligCall`"
);
match opcodes[0] {
Opcode::BrilligCall { .. } => {}
Opcode::BrilligCall { id, .. } => assert_eq!(id, 0, "The ID of the `BrilligCall` must be 0 as we have a single `Brillig` function"),
_ => panic!("Tried to extract a Brillig program from its ACIR wrapper opcode, but the opcode doesn't contain Brillig!"),
}
assert_eq!(
Expand Down
2 changes: 1 addition & 1 deletion barretenberg/acir_tests/run_acir_tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ export BIN CRS_PATH VERBOSE BRANCH
cd acir_tests

# Convert them to array
SKIP_ARRAY=(diamond_deps_0 workspace workspace_default_member)
SKIP_ARRAY=(diamond_deps_0 workspace workspace_default_member witness_compression)

function test() {
cd $1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ contract DocsExample {
b: Field // The actual return type of our circuit is the PrivateCircuitPublicInputs struct, this will be the
// input to our kernel!
// docs:start:context-example-return
) -> distinct pub PrivateCircuitPublicInputs {
) -> pub PrivateCircuitPublicInputs {
// docs:end:context-example-return
// ************************************************************
// The hasher is a structure used to generate a hash of the circuits inputs.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::parity_lib::{BaseParityInputs, ParityPublicInputs};

#[recursive]
fn main(inputs: BaseParityInputs) -> distinct pub ParityPublicInputs {
fn main(inputs: BaseParityInputs) -> pub ParityPublicInputs {
inputs.base_parity_circuit()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::parity_lib::{RootParityInputs, ParityPublicInputs};

#[recursive]
fn main(inputs: RootParityInputs) -> distinct pub ParityPublicInputs {
fn main(inputs: RootParityInputs) -> pub ParityPublicInputs {
inputs.root_parity_circuit()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::private_kernel_lib::PrivateKernelInitCircuitPrivateInputs;
use dep::types::PrivateKernelCircuitPublicInputs;

unconstrained fn main(input: PrivateKernelInitCircuitPrivateInputs) -> distinct pub PrivateKernelCircuitPublicInputs {
unconstrained fn main(input: PrivateKernelInitCircuitPrivateInputs) -> pub PrivateKernelCircuitPublicInputs {
input.native_private_kernel_circuit_initial()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::private_kernel_lib::PrivateKernelInitCircuitPrivateInputs;
use dep::types::PrivateKernelCircuitPublicInputs;

fn main(input: PrivateKernelInitCircuitPrivateInputs) -> distinct pub PrivateKernelCircuitPublicInputs {
fn main(input: PrivateKernelInitCircuitPrivateInputs) -> pub PrivateKernelCircuitPublicInputs {
input.native_private_kernel_circuit_initial()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::private_kernel_lib::PrivateKernelInnerCircuitPrivateInputs;
use dep::types::PrivateKernelCircuitPublicInputs;

unconstrained fn main(input: PrivateKernelInnerCircuitPrivateInputs) -> distinct pub PrivateKernelCircuitPublicInputs {
unconstrained fn main(input: PrivateKernelInnerCircuitPrivateInputs) -> pub PrivateKernelCircuitPublicInputs {
input.native_private_kernel_circuit_inner()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::private_kernel_lib::PrivateKernelInnerCircuitPrivateInputs;
use dep::types::PrivateKernelCircuitPublicInputs;

fn main(input: PrivateKernelInnerCircuitPrivateInputs) -> distinct pub PrivateKernelCircuitPublicInputs {
fn main(input: PrivateKernelInnerCircuitPrivateInputs) -> pub PrivateKernelCircuitPublicInputs {
input.native_private_kernel_circuit_inner()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::private_kernel_lib::PrivateKernelTailCircuitPrivateInputs;
use dep::types::KernelCircuitPublicInputs;

unconstrained fn main(input: PrivateKernelTailCircuitPrivateInputs) -> distinct pub KernelCircuitPublicInputs {
unconstrained fn main(input: PrivateKernelTailCircuitPrivateInputs) -> pub KernelCircuitPublicInputs {
input.native_private_kernel_circuit_tail()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::private_kernel_lib::PrivateKernelTailToPublicCircuitPrivateInputs;
use dep::types::PublicKernelCircuitPublicInputs;

unconstrained fn main(input: PrivateKernelTailToPublicCircuitPrivateInputs) -> distinct pub PublicKernelCircuitPublicInputs {
unconstrained fn main(input: PrivateKernelTailToPublicCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs {
input.execute()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::private_kernel_lib::PrivateKernelTailToPublicCircuitPrivateInputs;
use dep::types::PublicKernelCircuitPublicInputs;

fn main(input: PrivateKernelTailToPublicCircuitPrivateInputs) -> distinct pub PublicKernelCircuitPublicInputs {
fn main(input: PrivateKernelTailToPublicCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs {
input.execute()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::private_kernel_lib::PrivateKernelTailCircuitPrivateInputs;
use dep::types::KernelCircuitPublicInputs;

fn main(input: PrivateKernelTailCircuitPrivateInputs) -> distinct pub KernelCircuitPublicInputs {
fn main(input: PrivateKernelTailCircuitPrivateInputs) -> pub KernelCircuitPublicInputs {
input.native_private_kernel_circuit_tail()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::public_kernel_lib::PublicKernelAppLogicCircuitPrivateInputs;
use dep::types::PublicKernelCircuitPublicInputs;

unconstrained fn main(input: PublicKernelAppLogicCircuitPrivateInputs) -> distinct pub PublicKernelCircuitPublicInputs {
unconstrained fn main(input: PublicKernelAppLogicCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs {
input.public_kernel_app_logic()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::public_kernel_lib::PublicKernelAppLogicCircuitPrivateInputs;
use dep::types::PublicKernelCircuitPublicInputs;

fn main(input: PublicKernelAppLogicCircuitPrivateInputs) -> distinct pub PublicKernelCircuitPublicInputs {
fn main(input: PublicKernelAppLogicCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs {
input.public_kernel_app_logic()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::public_kernel_lib::PublicKernelSetupCircuitPrivateInputs;
use dep::types::PublicKernelCircuitPublicInputs;

unconstrained fn main(input: PublicKernelSetupCircuitPrivateInputs) -> distinct pub PublicKernelCircuitPublicInputs {
unconstrained fn main(input: PublicKernelSetupCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs {
input.public_kernel_setup()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::public_kernel_lib::PublicKernelSetupCircuitPrivateInputs;
use dep::types::PublicKernelCircuitPublicInputs;

fn main(input: PublicKernelSetupCircuitPrivateInputs) -> distinct pub PublicKernelCircuitPublicInputs {
fn main(input: PublicKernelSetupCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs {
input.public_kernel_setup()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::public_kernel_lib::PublicKernelTailCircuitPrivateInputs;
use dep::types::KernelCircuitPublicInputs;

unconstrained fn main(input: PublicKernelTailCircuitPrivateInputs) -> distinct pub KernelCircuitPublicInputs {
unconstrained fn main(input: PublicKernelTailCircuitPrivateInputs) -> pub KernelCircuitPublicInputs {
input.public_kernel_tail()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::public_kernel_lib::PublicKernelTailCircuitPrivateInputs;
use dep::types::KernelCircuitPublicInputs;

fn main(input: PublicKernelTailCircuitPrivateInputs) -> distinct pub KernelCircuitPublicInputs {
fn main(input: PublicKernelTailCircuitPrivateInputs) -> pub KernelCircuitPublicInputs {
input.public_kernel_tail()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::public_kernel_lib::PublicKernelTeardownCircuitPrivateInputs;
use dep::types::PublicKernelCircuitPublicInputs;

unconstrained fn main(input: PublicKernelTeardownCircuitPrivateInputs) -> distinct pub PublicKernelCircuitPublicInputs {
unconstrained fn main(input: PublicKernelTeardownCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs {
input.public_kernel_teardown()
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use dep::public_kernel_lib::PublicKernelTeardownCircuitPrivateInputs;
use dep::types::PublicKernelCircuitPublicInputs;

fn main(input: PublicKernelTeardownCircuitPrivateInputs) -> distinct pub PublicKernelCircuitPublicInputs {
fn main(input: PublicKernelTeardownCircuitPrivateInputs) -> pub PublicKernelCircuitPublicInputs {
input.public_kernel_teardown()
}
2 changes: 2 additions & 0 deletions noir/noir-repo/.github/workflows/docs-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,8 @@ jobs:
run: yarn workspace docs version::stables

- name: Build docs
env:
MATOMO_ENV: staging # not really a secret, it will show in the footer anyway
run: yarn workspaces foreach -Rpt --from docs run build

- name: Upload artifact
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,8 @@ jobs:
- name: Run tests
run: |
cargo nextest run --archive-file nextest-archive.tar.zst \
--partition count:${{ matrix.partition }}/4
--partition count:${{ matrix.partition }}/4 \
--no-fail-fast
# This is a job which depends on all test jobs and reports the overall status.
# This allows us to add/remove test jobs without having to update the required workflows.
Expand Down
3 changes: 2 additions & 1 deletion noir/noir-repo/.github/workflows/test-rust-workspace.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ jobs:
- name: Run tests
run: |
cargo nextest run --archive-file nextest-archive.tar.zst \
--partition count:${{ matrix.partition }}/4
--partition count:${{ matrix.partition }}/4 \
--no-fail-fast
# This is a job which depends on all test jobs and reports the overall status.
# This allows us to add/remove test jobs without having to update the required workflows.
Expand Down
9 changes: 2 additions & 7 deletions noir/noir-repo/aztec_macros/src/transforms/functions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use convert_case::{Case, Casing};
use noirc_errors::Span;
use noirc_frontend::ast;
use noirc_frontend::ast::{
BlockExpression, ConstrainKind, ConstrainStatement, Distinctness, Expression, ExpressionKind,
BlockExpression, ConstrainKind, ConstrainStatement, Expression, ExpressionKind,
ForLoopStatement, ForRange, FunctionReturnType, Ident, Literal, NoirFunction, NoirStruct,
Param, PathKind, Pattern, Signedness, Statement, StatementKind, UnresolvedType,
UnresolvedTypeData, Visibility,
Expand Down Expand Up @@ -104,13 +104,8 @@ pub fn transform_function(
func.def.return_visibility = Visibility::Public;
}

// Distinct return types are only required for private functions
// Public functions should have unconstrained auto-inferred
match ty {
"Private" => func.def.return_distinctness = Distinctness::Distinct,
"Public" | "Avm" => func.def.is_unconstrained = true,
_ => (),
}
func.def.is_unconstrained = matches!(ty, "Public" | "Avm");

Ok(())
}
Expand Down
7 changes: 4 additions & 3 deletions noir/noir-repo/compiler/noirc_evaluator/src/ssa.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,6 @@ pub(crate) fn optimize_into_acir(
force_brillig_output: bool,
print_timings: bool,
) -> Result<Artifacts, RuntimeError> {
let abi_distinctness = program.return_distinctness;

let ssa_gen_span = span!(Level::TRACE, "ssa_generation");
let ssa_gen_span_guard = ssa_gen_span.enter();
let ssa = SsaBuilder::new(program, print_passes, force_brillig_output, print_timings)?
Expand All @@ -67,6 +65,9 @@ pub(crate) fn optimize_into_acir(
.run_pass(Ssa::remove_bit_shifts, "After Removing Bit Shifts:")
// Run mem2reg once more with the flattened CFG to catch any remaining loads/stores
.run_pass(Ssa::mem2reg, "After Mem2Reg:")
// Run the inlining pass again to handle functions with `InlineType::NoPredicates`.
// Before flattening is run, we treat functions marked with the `InlineType::NoPredicates` as an entry point.
.run_pass(Ssa::inline_functions_with_no_predicates, "After Inlining:")
.run_pass(Ssa::fold_constants, "After Constant Folding:")
.run_pass(Ssa::remove_enable_side_effects, "After EnableSideEffects removal:")
.run_pass(Ssa::fold_constants_using_constraints, "After Constraint Folding:")
Expand All @@ -78,7 +79,7 @@ pub(crate) fn optimize_into_acir(

drop(ssa_gen_span_guard);

time("SSA to ACIR", print_timings, || ssa.into_acir(&brillig, abi_distinctness))
time("SSA to ACIR", print_timings, || ssa.into_acir(&brillig))
}

// Helper to time SSA passes
Expand Down
Loading
Loading