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

[VAN-718] extract large array param init to new function #59

Merged
merged 2 commits into from
Oct 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions circom/src/compilation_user.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ pub fn compile(config: CompilerConfig, program_archive: ProgramArchive, prime: &
// Only run the passes if we are going to generate LLVM code
let pm = PassManager::new();
circuit = pm
.schedule_const_arg_deduplication_pass()
.schedule_loop_unroll_pass()
.schedule_conditional_flattening_pass()
.schedule_mapped_to_indexed_pass()
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/call_inside_loop.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

//arena = { a[0], a[1], n, b, c, d, e, f, g}
function fun(a, n, b, c, d, e, f, g) {
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_conditional_1.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// IF condition can be known via in-place unrolling but not when body is extracted to a new function
template InnerConditional1(N) {
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_conditional_2.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// if condition is known constant
template InnerConditional2(N, T) {
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_conditional_3.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// if condition is NOT known
template InnerConditional3(N) {
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_conditional_4.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// if condition can be known via unrolling, arrays used inside indexed on iteration variable
template InnerConditional4(N) {
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_conditional_5.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// if condition is known constant, arrays used inside indexed on iteration variable
template InnerConditional5(N, T) {
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_conditional_6.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// if condition is NOT known, arrays used inside indexed on iteration variable
// UPDATE: Circom compiler does not allow the commented block
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_conditional_7.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template InnerConditional7(N) {
signal output out;
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_conditional_8.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// like inner_conditional_7 but with 'i' and 'j' uses swapped
template InnerConditional8(N) {
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_conditional_9.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template InnerConditional9(N) {
signal output out;
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_loop_simple.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template InnerLoops(n, m) {
signal input in[m];
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_loops.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template InnerLoops(n) {
signal input a[n];
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_loops2.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template InnerLoops(n) {
signal input a[n];
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_loops3.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template InnerLoops(n) {
signal input a[n];
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_loops4.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template InnerLoops(n) {
signal input a[n];
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_loops5.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// %0 (i.e. signal arena) = [ out, in ]
// %lvars = [ n, temp, i, j ]
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/inner_loops6.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// %0 (i.e. signal arena) = [ out[0], out[1], out[2], out[3], in ]
// %lvars = [ n, i, j ]
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/simple_variant_idx.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template SimpleVariantIdx(n) {
signal input in;
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/vanguard-uc-comp.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template Num2Bits(n) {
signal input in;
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/variant_idx_in_loop_A.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template VariantIndex(n) {
signal input in;
Expand Down
1 change: 1 addition & 0 deletions circom/tests/loops/variant_idx_in_loop_B.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template VariantIndex(n) {
signal input in;
Expand Down
157 changes: 157 additions & 0 deletions circom/tests/subcmps/large_array_param.circom
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
pragma circom 2.0.0;

// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope

function create_large_array(t) {
if (t == 2) {
return [
11,
22,
33,
44
];
} else if (t == 3) {
return [
11,
22,
33,
44,
55,
66,
77,
88,
99
];
} else {
assert(0);
return [0];
}
}

template Mixer(t, S, r) {
signal input inp;
signal output out;

var lc = 0;
for (var i = 0; i < t; i++) {
lc += S[t*r+i] * inp;
}
out <== lc;
}

template Main(t) {
signal input inp;
signal output out;

var S[t*t] = create_large_array(t);

component mix[t];
var lc = 0;
for (var r = 0; r < t; r++) {
mix[r] = Mixer(t, S, r);
mix[r].inp <-- inp;
lc += mix[r].out;
}
out <-- lc;
}

component main = Main(2);

//CHECK-LABEL: define void @..generated..array.param.
//CHECK-SAME: [[$F_ID_1:[0-9]+]]([0 x i256]* %lvars){{.*}} {
//CHECK-NEXT: ..generated..array.param.[[$F_ID_1]]:
//CHECK-NEXT: br label %store1
//CHECK-EMPTY:
//CHECK-NEXT: store1:
//CHECK-NEXT: %0 = getelementptr [0 x i256], [0 x i256]* %lvars, i32 0, i32 0
//CHECK-NEXT: store i256 11, i256* %0, align 4
//CHECK-NEXT: br label %store2
//CHECK-EMPTY:
//CHECK-NEXT: store2:
//CHECK-NEXT: %1 = getelementptr [0 x i256], [0 x i256]* %lvars, i32 0, i32 1
//CHECK-NEXT: store i256 22, i256* %1, align 4
//CHECK-NEXT: br label %store3
//CHECK-EMPTY:
//CHECK-NEXT: store3:
//CHECK-NEXT: %2 = getelementptr [0 x i256], [0 x i256]* %lvars, i32 0, i32 2
//CHECK-NEXT: store i256 33, i256* %2, align 4
//CHECK-NEXT: br label %store4
//CHECK-EMPTY:
//CHECK-NEXT: store4:
//CHECK-NEXT: %3 = getelementptr [0 x i256], [0 x i256]* %lvars, i32 0, i32 3
//CHECK-NEXT: store i256 44, i256* %3, align 4
//CHECK-NEXT: br label %return5
//CHECK-EMPTY:
//CHECK-NEXT: return5:
//CHECK-NEXT: ret void
//CHECK-NEXT: }
//
//There is only 1 produced, no duplicates
//CHECK-NOT: define void @..generated..array.param.
//
//CHECK-LABEL: define void @Mixer_{{[0-9]+}}_run([0 x i256]* %0){{.*}} {
//CHECK-NEXT: prelude:
//CHECK-NEXT: %lvars = alloca [8 x i256], align 8
//CHECK-NEXT: %subcmps = alloca [0 x { [0 x i256]*, i32 }], align 8
//CHECK-NEXT: br label %call1
//CHECK-EMPTY:
//CHECK-NEXT: call1:
//CHECK-NEXT: %1 = bitcast [8 x i256]* %lvars to [0 x i256]*
//CHECK-NEXT: call void @..generated..array.param.[[$F_ID_1]]([0 x i256]* %1)
//CHECK-NEXT: br label %store2
//CHECK-EMPTY:
//CHECK-NEXT: store2:
//CHECK-NEXT: %2 = getelementptr [8 x i256], [8 x i256]* %lvars, i32 0, i32 4
//CHECK-NEXT: store i256 0, i256* %2, align 4
//CHECK-NEXT: br label %store3
//CHECK-EMPTY:
//CHECK-NEXT: store3:
//CHECK-NEXT: %3 = getelementptr [8 x i256], [8 x i256]* %lvars, i32 0, i32 5
//CHECK-NEXT: store i256 2, i256* %3, align 4
//CHECK-NEXT: br label %store4
//CHECK-EMPTY:
//CHECK-NEXT: store4:
//CHECK-NEXT: %4 = getelementptr [8 x i256], [8 x i256]* %lvars, i32 0, i32 6
//CHECK-NEXT: store i256 0, i256* %4, align 4
//CHECK-NEXT: br label %store5
//CHECK-EMPTY:
//CHECK-NEXT: store5:
//CHECK-NEXT: %5 = getelementptr [8 x i256], [8 x i256]* %lvars, i32 0, i32 7
//CHECK-NEXT: store i256 0, i256* %5, align 4
//CHECK-NEXT: br label %unrolled_loop6
//CHECK-EMPTY:
//CHECK-NEXT: unrolled_loop6:
//
//CHECK-LABEL: define void @Mixer_{{[0-9]+}}_run([0 x i256]* %0){{.*}} {
//CHECK-NEXT: prelude:
//CHECK-NEXT: %lvars = alloca [8 x i256], align 8
//CHECK-NEXT: %subcmps = alloca [0 x { [0 x i256]*, i32 }], align 8
//CHECK-NEXT: br label %call1
//CHECK-EMPTY:
//CHECK-NEXT: call1:
//CHECK-NEXT: %1 = bitcast [8 x i256]* %lvars to [0 x i256]*
//CHECK-NEXT: call void @..generated..array.param.[[$F_ID_1]]([0 x i256]* %1)
//CHECK-NEXT: br label %store2
//CHECK-EMPTY:
//CHECK-NEXT: store2:
//CHECK-NEXT: %2 = getelementptr [8 x i256], [8 x i256]* %lvars, i32 0, i32 4
//CHECK-NEXT: store i256 1, i256* %2, align 4
//CHECK-NEXT: br label %store3
//CHECK-EMPTY:
//CHECK-NEXT: store3:
//CHECK-NEXT: %3 = getelementptr [8 x i256], [8 x i256]* %lvars, i32 0, i32 5
//CHECK-NEXT: store i256 2, i256* %3, align 4
//CHECK-NEXT: br label %store4
//CHECK-EMPTY:
//CHECK-NEXT: store4:
//CHECK-NEXT: %4 = getelementptr [8 x i256], [8 x i256]* %lvars, i32 0, i32 6
//CHECK-NEXT: store i256 0, i256* %4, align 4
//CHECK-NEXT: br label %store5
//CHECK-EMPTY:
//CHECK-NEXT: store5:
//CHECK-NEXT: %5 = getelementptr [8 x i256], [8 x i256]* %lvars, i32 0, i32 7
//CHECK-NEXT: store i256 0, i256* %5, align 4
//CHECK-NEXT: br label %unrolled_loop6
//CHECK-EMPTY:
//CHECK-NEXT: unrolled_loop6:
1 change: 1 addition & 0 deletions circom/tests/subcmps/subcmps0A.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// Like SubCmps1 but simpler (no constraints and fewer operations)
template IsZero() {
Expand Down
1 change: 1 addition & 0 deletions circom/tests/subcmps/subcmps0B.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

// Like SubCmps1 but simpler (no constraints and fewer operations)
template IsZero() {
Expand Down
1 change: 1 addition & 0 deletions circom/tests/subcmps/subcmps0C.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template IsZero() {
signal input in;
Expand Down
1 change: 1 addition & 0 deletions circom/tests/subcmps/subcmps0D.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template Add() {
signal input in1;
Expand Down
1 change: 1 addition & 0 deletions circom/tests/subcmps/subcmps1.circom
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
pragma circom 2.0.0;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // TEMPORARY: because EXTRACT_LOOP_BODY_TO_NEW_FUNC == false

template IsZero() {
signal input in; // subcmp signal 1
Expand Down
1 change: 0 additions & 1 deletion circom/tests/subcmps/subcmps2.circom
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
pragma circom 2.0.6;
// REQUIRES: circom
// RUN: rm -rf %t && mkdir %t && %circom --llvm -o %t %s | sed -n 's/.*Written successfully:.* \(.*\)/\1/p' | xargs cat | FileCheck %s --enable-var-scope
// XFAIL:.* // pending https://veridise.atlassian.net/browse/VAN-670

template Sum(n) {
signal input inp[n];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use compiler::circuit_design::function::FunctionCode;
use compiler::circuit_design::template::TemplateCode;
use crate::bucket_interpreter::BucketInterpreter;
use crate::bucket_interpreter::value::Value;
use crate::passes::LOOP_BODY_FN_PREFIX;
use crate::passes::loop_unroll::LOOP_BODY_FN_PREFIX;
use crate::passes::loop_unroll::body_extractor::LoopBodyExtractor;
use super::{Env, LibraryAccess};

Expand Down
Loading