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

Acir Opcode count less with additional print statement after unused variable #6432

Open
jzaki opened this issue Nov 1, 2024 · 3 comments
Open
Assignees
Labels
bug Something isn't working

Comments

@jzaki
Copy link
Contributor

jzaki commented Nov 1, 2024

Aim

Measure gates of a lib's use, so need to understand when an unused variable is optimised out of a program (or not) for realistic benchmarks.

Expected Behavior

Adding a println after an unused variable should not have less acir opcodes.

Bug

Program (with unused variable) has: "acir_opcodes": 410,
Program where unused variable is followed by printing it: "acir_opcodes": 334,

To Reproduce

  1. clone noir/noir-examples repo, branch jz/base64_example
  2. cd lib_examples/base64_example
  3. nargo e -p Prover_SHORT.toml base64_example_SHORT
  4. bb gates -b ../target/base64_example.json -w ../target/base64_example_SHORT, (Note acir_opcodes)
  5. after the unused _encoded variable line (here), add println(_encoded);
  6. repeat 3, 4 (Note acir_opcodes is less)

Workaround

None

Workaround Description

No response

Additional Context

Related to noir-lang/noir-examples#28

Project Impact

None

Blocker Context

No response

Nargo Version

noirc version = 0.36.0+801c71880ecf8386a26737a5d8bb5b4cb164b2ab

NoirJS Version

No response

Proving Backend Tooling & Version

Barretenberg - bb CLI - 0.58.0%

Would you like to submit a PR for this Issue?

None

Support Needs

No response

@jzaki jzaki added the bug Something isn't working label Nov 1, 2024
@github-project-automation github-project-automation bot moved this to 📋 Backlog in Noir Nov 1, 2024
@TomAFrench
Copy link
Member

This is shown by the program

fn main(input: str<U>, base64_encoded: str<B>) {
    let _encoded: [u8; B] = BASE64_ENCODER.encode(input.as_bytes());
    println(_encoded);
}

Without the print we get

Compiled ACIR for main (unoptimized):
func 0
current witness index : 99
private parameters indices : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]
public parameters indices : []
return value indices : []
BLACKBOX::RANGE [(0)] [ ]
BLACKBOX::RANGE [(1)] [ ]
BLACKBOX::RANGE [(2)] [ ]
BLACKBOX::RANGE [(3)] [ ]
BLACKBOX::RANGE [(4)] [ ]
BLACKBOX::RANGE [(5)] [ ]
BLACKBOX::RANGE [(6)] [ ]
BLACKBOX::RANGE [(7)] [ ]
BLACKBOX::RANGE [(8)] [ ]
BLACKBOX::RANGE [(9)] [ ]
BLACKBOX::RANGE [(10)] [ ]
BLACKBOX::RANGE [(11)] [ ]
BLACKBOX::RANGE [(12)] [ ]
BLACKBOX::RANGE [(13)] [ ]
BLACKBOX::RANGE [(14)] [ ]
BLACKBOX::RANGE [(15)] [ ]
BLACKBOX::RANGE [(16)] [ ]
BLACKBOX::RANGE [(17)] [ ]
BLACKBOX::RANGE [(18)] [ ]
BLACKBOX::RANGE [(19)] [ ]
BLACKBOX::RANGE [(20)] [ ]
BLACKBOX::RANGE [(21)] [ ]
BLACKBOX::RANGE [(22)] [ ]
BLACKBOX::RANGE [(23)] [ ]
BLACKBOX::RANGE [(24)] [ ]
BLACKBOX::RANGE [(25)] [ ]
BLACKBOX::RANGE [(26)] [ ]
BLACKBOX::RANGE [(27)] [ ]
DIR::TORADIX (_%EXPR [ (6901746346790563787434755862277025452451108972170386555162524223799296, _0) (26959946667150639794667015087019630673637144422540572481103610249216, _1) (105312291668557186697918027683670432318895095400549111254310977536, _2) (411376139330301510538742295639337626245683966408394965837152256, _3) (1606938044258990275541962092341162602522202993782792835301376, _4) (6277101735386680763835789423207666416102355444464034512896, _5) (24519928653854221733733552434404946937899825954937634816, _6) (95780971304118053647396689196894323976171195136475136, _7) (374144419156711147060143317175368453031918731001856, _8) (1461501637330902918203684832716283019655932542976, _9) (5708990770823839524233143877797980545530986496, _10) (22300745198530623141535718272648361505980416, _11) 0 ]%, [_28..._67] )
BLACKBOX::RANGE [(28)] [ ]
BLACKBOX::RANGE [(29)] [ ]
BLACKBOX::RANGE [(30)] [ ]
BLACKBOX::RANGE [(31)] [ ]
BLACKBOX::RANGE [(32)] [ ]
BLACKBOX::RANGE [(33)] [ ]
BLACKBOX::RANGE [(34)] [ ]
BLACKBOX::RANGE [(35)] [ ]
BLACKBOX::RANGE [(36)] [ ]
BLACKBOX::RANGE [(37)] [ ]
BLACKBOX::RANGE [(38)] [ ]
BLACKBOX::RANGE [(39)] [ ]
BLACKBOX::RANGE [(40)] [ ]
BLACKBOX::RANGE [(41)] [ ]
BLACKBOX::RANGE [(42)] [ ]
BLACKBOX::RANGE [(43)] [ ]
BLACKBOX::RANGE [(44)] [ ]
BLACKBOX::RANGE [(45)] [ ]
BLACKBOX::RANGE [(46)] [ ]
BLACKBOX::RANGE [(47)] [ ]
BLACKBOX::RANGE [(48)] [ ]
BLACKBOX::RANGE [(49)] [ ]
BLACKBOX::RANGE [(50)] [ ]
BLACKBOX::RANGE [(51)] [ ]
BLACKBOX::RANGE [(52)] [ ]
BLACKBOX::RANGE [(53)] [ ]
BLACKBOX::RANGE [(54)] [ ]
BLACKBOX::RANGE [(55)] [ ]
BLACKBOX::RANGE [(56)] [ ]
BLACKBOX::RANGE [(57)] [ ]
BLACKBOX::RANGE [(58)] [ ]
BLACKBOX::RANGE [(59)] [ ]
BLACKBOX::RANGE [(60)] [ ]
BLACKBOX::RANGE [(61)] [ ]
BLACKBOX::RANGE [(62)] [ ]
BLACKBOX::RANGE [(63)] [ ]
BLACKBOX::RANGE [(64)] [ ]
BLACKBOX::RANGE [(65)] [ ]
BLACKBOX::RANGE [(66)] [ ]
BLACKBOX::RANGE [(67)] [ ]
EXPR [ (6901746346790563787434755862277025452451108972170386555162524223799296, _0) (26959946667150639794667015087019630673637144422540572481103610249216, _1) (105312291668557186697918027683670432318895095400549111254310977536, _2) (411376139330301510538742295639337626245683966408394965837152256, _3) (1606938044258990275541962092341162602522202993782792835301376, _4) (6277101735386680763835789423207666416102355444464034512896, _5) (24519928653854221733733552434404946937899825954937634816, _6) (95780971304118053647396689196894323976171195136475136, _7) (374144419156711147060143317175368453031918731001856, _8) (1461501637330902918203684832716283019655932542976, _9) (5708990770823839524233143877797980545530986496, _10) (22300745198530623141535718272648361505980416, _11) (-1, _28) (-64, _29) (-4096, _30) (-262144, _31) (-16777216, _32) (-1073741824, _33) (-68719476736, _34) (-4398046511104, _35) (-281474976710656, _36) (-18014398509481984, _37) (-1152921504606846976, _38) (-73786976294838206464, _39) (-4722366482869645213696, _40) (-302231454903657293676544, _41) (-19342813113834066795298816, _42) (-1237940039285380274899124224, _43) (-79228162514264337593543950336, _44) (-5070602400912917605986812821504, _45) (-324518553658426726783156020576256, _46) (-20769187434139310514121985316880384, _47) (-1329227995784915872903807060280344576, _48) (-85070591730234615865843651857942052864, _49) (-5444517870735015415413993718908291383296, _50) (-348449143727040986586495598010130648530944, _51) (-22300745198530623141535718272648361505980416, _52) (-1427247692705959881058285969449495136382746624, _53) (-91343852333181432387730302044767688728495783936, _54) (-5846006549323611672814739330865132078623730171904, _55) (-374144419156711147060143317175368453031918731001856, _56) (-23945242826029513411849172299223580994042798784118784, _57) (-1532495540865888858358347027150309183618739122183602176, _58) (-98079714615416886934934209737619787751599303819750539264, _59) (-6277101735386680763835789423207666416102355444464034512896, _60) (-401734511064747568885490523085290650630550748445698208825344, _61) (-25711008708143844408671393477458601640355247900524685364822016, _62) (-1645504557321206042154969182557350504982735865633579863348609024, _63) (-105312291668557186697918027683670432318895095400549111254310977536, _64) (-6739986666787659948666753771754907668409286105635143120275902562304, _65) (-431359146674410236714672241392314090778194310760649159697657763987456, _66) (-27606985387162255149739023449108101809804435888681546220650096895197184, _67) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(67))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(68)), Simple(Witness(69))]
BLACKBOX::RANGE [(69)] [ ]
EXPR [ (1, _67) (-4294967296, _68) (-1, _69) 4294967232 ]
EXPR [ (-1, _68) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(66))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(70)), Simple(Witness(71))]
BLACKBOX::RANGE [(71)] [ ]
EXPR [ (1, _66) (-4294967296, _70) (-1, _71) 4294967232 ]
EXPR [ (-1, _70) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(65))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(72)), Simple(Witness(73))]
BLACKBOX::RANGE [(73)] [ ]
EXPR [ (1, _65) (-4294967296, _72) (-1, _73) 4294967232 ]
EXPR [ (-1, _72) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(64))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(74)), Simple(Witness(75))]
BLACKBOX::RANGE [(75)] [ ]
EXPR [ (1, _64) (-4294967296, _74) (-1, _75) 4294967232 ]
EXPR [ (-1, _74) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(63))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(76)), Simple(Witness(77))]
BLACKBOX::RANGE [(77)] [ ]
EXPR [ (1, _63) (-4294967296, _76) (-1, _77) 4294967232 ]
EXPR [ (-1, _76) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(62))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(78)), Simple(Witness(79))]
BLACKBOX::RANGE [(79)] [ ]
EXPR [ (1, _62) (-4294967296, _78) (-1, _79) 4294967232 ]
EXPR [ (-1, _78) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(61))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(80)), Simple(Witness(81))]
BLACKBOX::RANGE [(81)] [ ]
EXPR [ (1, _61) (-4294967296, _80) (-1, _81) 4294967232 ]
EXPR [ (-1, _80) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(60))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(82)), Simple(Witness(83))]
BLACKBOX::RANGE [(83)] [ ]
EXPR [ (1, _60) (-4294967296, _82) (-1, _83) 4294967232 ]
EXPR [ (-1, _82) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(59))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(84)), Simple(Witness(85))]
BLACKBOX::RANGE [(85)] [ ]
EXPR [ (1, _59) (-4294967296, _84) (-1, _85) 4294967232 ]
EXPR [ (-1, _84) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(58))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(86)), Simple(Witness(87))]
BLACKBOX::RANGE [(87)] [ ]
EXPR [ (1, _58) (-4294967296, _86) (-1, _87) 4294967232 ]
EXPR [ (-1, _86) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(57))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(88)), Simple(Witness(89))]
BLACKBOX::RANGE [(89)] [ ]
EXPR [ (1, _57) (-4294967296, _88) (-1, _89) 4294967232 ]
EXPR [ (-1, _88) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(56))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(90)), Simple(Witness(91))]
BLACKBOX::RANGE [(91)] [ ]
EXPR [ (1, _56) (-4294967296, _90) (-1, _91) 4294967232 ]
EXPR [ (-1, _90) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(55))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(92)), Simple(Witness(93))]
BLACKBOX::RANGE [(93)] [ ]
EXPR [ (1, _55) (-4294967296, _92) (-1, _93) 4294967232 ]
EXPR [ (-1, _92) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(54))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(94)), Simple(Witness(95))]
BLACKBOX::RANGE [(95)] [ ]
EXPR [ (1, _54) (-4294967296, _94) (-1, _95) 4294967232 ]
EXPR [ (-1, _94) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(53))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(96)), Simple(Witness(97))]
BLACKBOX::RANGE [(97)] [ ]
EXPR [ (1, _53) (-4294967296, _96) (-1, _97) 4294967232 ]
EXPR [ (-1, _96) 0 ]
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [(1, Witness(52))], q_c: 4294967232 }), Single(Expression { mul_terms: [], linear_combinations: [], q_c: 4294967296 })], outputs: [Simple(Witness(98)), Simple(Witness(99))]
BLACKBOX::RANGE [(99)] [ ]
EXPR [ (1, _52) (-4294967296, _98) (-1, _99) 4294967232 ]
EXPR [ (-1, _98) 0 ]

unconstrained func 0
[Const { destination: Direct(10), bit_size: Integer(U32), value: 2 }, Const { destination: Direct(11), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(0), size_address: Direct(10), offset_address: Direct(11) }, BinaryFieldOp { destination: Direct(2), op: IntegerDiv, lhs: Direct(0), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Mul, lhs: Direct(2), rhs: Direct(1) }, BinaryFieldOp { destination: Direct(1), op: Sub, lhs: Direct(0), rhs: Direct(1) }, Mov { destination: Direct(0), source: Direct(2) }, Stop { return_data_offset: 0, return_data_size: 2 }]

and with the print we get

Compiled ACIR for main (unoptimized):
func 0
current witness index : 147
private parameters indices : [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27]
public parameters indices : []
return value indices : []
BLACKBOX::RANGE [(0)] [ ]
BLACKBOX::RANGE [(1)] [ ]
BLACKBOX::RANGE [(2)] [ ]
BLACKBOX::RANGE [(3)] [ ]
BLACKBOX::RANGE [(4)] [ ]
BLACKBOX::RANGE [(5)] [ ]
BLACKBOX::RANGE [(6)] [ ]
BLACKBOX::RANGE [(7)] [ ]
BLACKBOX::RANGE [(8)] [ ]
BLACKBOX::RANGE [(9)] [ ]
BLACKBOX::RANGE [(10)] [ ]
BLACKBOX::RANGE [(11)] [ ]
BLACKBOX::RANGE [(12)] [ ]
BLACKBOX::RANGE [(13)] [ ]
BLACKBOX::RANGE [(14)] [ ]
BLACKBOX::RANGE [(15)] [ ]
BLACKBOX::RANGE [(16)] [ ]
BLACKBOX::RANGE [(17)] [ ]
BLACKBOX::RANGE [(18)] [ ]
BLACKBOX::RANGE [(19)] [ ]
BLACKBOX::RANGE [(20)] [ ]
BLACKBOX::RANGE [(21)] [ ]
BLACKBOX::RANGE [(22)] [ ]
BLACKBOX::RANGE [(23)] [ ]
BLACKBOX::RANGE [(24)] [ ]
BLACKBOX::RANGE [(25)] [ ]
BLACKBOX::RANGE [(26)] [ ]
BLACKBOX::RANGE [(27)] [ ]
DIR::TORADIX (_%EXPR [ (6901746346790563787434755862277025452451108972170386555162524223799296, _0) (26959946667150639794667015087019630673637144422540572481103610249216, _1) (105312291668557186697918027683670432318895095400549111254310977536, _2) (411376139330301510538742295639337626245683966408394965837152256, _3) (1606938044258990275541962092341162602522202993782792835301376, _4) (6277101735386680763835789423207666416102355444464034512896, _5) (24519928653854221733733552434404946937899825954937634816, _6) (95780971304118053647396689196894323976171195136475136, _7) (374144419156711147060143317175368453031918731001856, _8) (1461501637330902918203684832716283019655932542976, _9) (5708990770823839524233143877797980545530986496, _10) (22300745198530623141535718272648361505980416, _11) 0 ]%, [_28..._67] )
BLACKBOX::RANGE [(28)] [ ]
BLACKBOX::RANGE [(29)] [ ]
BLACKBOX::RANGE [(30)] [ ]
BLACKBOX::RANGE [(31)] [ ]
BLACKBOX::RANGE [(32)] [ ]
BLACKBOX::RANGE [(33)] [ ]
BLACKBOX::RANGE [(34)] [ ]
BLACKBOX::RANGE [(35)] [ ]
BLACKBOX::RANGE [(36)] [ ]
BLACKBOX::RANGE [(37)] [ ]
BLACKBOX::RANGE [(38)] [ ]
BLACKBOX::RANGE [(39)] [ ]
BLACKBOX::RANGE [(40)] [ ]
BLACKBOX::RANGE [(41)] [ ]
BLACKBOX::RANGE [(42)] [ ]
BLACKBOX::RANGE [(43)] [ ]
BLACKBOX::RANGE [(44)] [ ]
BLACKBOX::RANGE [(45)] [ ]
BLACKBOX::RANGE [(46)] [ ]
BLACKBOX::RANGE [(47)] [ ]
BLACKBOX::RANGE [(48)] [ ]
BLACKBOX::RANGE [(49)] [ ]
BLACKBOX::RANGE [(50)] [ ]
BLACKBOX::RANGE [(51)] [ ]
BLACKBOX::RANGE [(52)] [ ]
BLACKBOX::RANGE [(53)] [ ]
BLACKBOX::RANGE [(54)] [ ]
BLACKBOX::RANGE [(55)] [ ]
BLACKBOX::RANGE [(56)] [ ]
BLACKBOX::RANGE [(57)] [ ]
BLACKBOX::RANGE [(58)] [ ]
BLACKBOX::RANGE [(59)] [ ]
BLACKBOX::RANGE [(60)] [ ]
BLACKBOX::RANGE [(61)] [ ]
BLACKBOX::RANGE [(62)] [ ]
BLACKBOX::RANGE [(63)] [ ]
BLACKBOX::RANGE [(64)] [ ]
BLACKBOX::RANGE [(65)] [ ]
BLACKBOX::RANGE [(66)] [ ]
BLACKBOX::RANGE [(67)] [ ]
EXPR [ (6901746346790563787434755862277025452451108972170386555162524223799296, _0) (26959946667150639794667015087019630673637144422540572481103610249216, _1) (105312291668557186697918027683670432318895095400549111254310977536, _2) (411376139330301510538742295639337626245683966408394965837152256, _3) (1606938044258990275541962092341162602522202993782792835301376, _4) (6277101735386680763835789423207666416102355444464034512896, _5) (24519928653854221733733552434404946937899825954937634816, _6) (95780971304118053647396689196894323976171195136475136, _7) (374144419156711147060143317175368453031918731001856, _8) (1461501637330902918203684832716283019655932542976, _9) (5708990770823839524233143877797980545530986496, _10) (22300745198530623141535718272648361505980416, _11) (-1, _28) (-64, _29) (-4096, _30) (-262144, _31) (-16777216, _32) (-1073741824, _33) (-68719476736, _34) (-4398046511104, _35) (-281474976710656, _36) (-18014398509481984, _37) (-1152921504606846976, _38) (-73786976294838206464, _39) (-4722366482869645213696, _40) (-302231454903657293676544, _41) (-19342813113834066795298816, _42) (-1237940039285380274899124224, _43) (-79228162514264337593543950336, _44) (-5070602400912917605986812821504, _45) (-324518553658426726783156020576256, _46) (-20769187434139310514121985316880384, _47) (-1329227995784915872903807060280344576, _48) (-85070591730234615865843651857942052864, _49) (-5444517870735015415413993718908291383296, _50) (-348449143727040986586495598010130648530944, _51) (-22300745198530623141535718272648361505980416, _52) (-1427247692705959881058285969449495136382746624, _53) (-91343852333181432387730302044767688728495783936, _54) (-5846006549323611672814739330865132078623730171904, _55) (-374144419156711147060143317175368453031918731001856, _56) (-23945242826029513411849172299223580994042798784118784, _57) (-1532495540865888858358347027150309183618739122183602176, _58) (-98079714615416886934934209737619787751599303819750539264, _59) (-6277101735386680763835789423207666416102355444464034512896, _60) (-401734511064747568885490523085290650630550748445698208825344, _61) (-25711008708143844408671393477458601640355247900524685364822016, _62) (-1645504557321206042154969182557350504982735865633579863348609024, _63) (-105312291668557186697918027683670432318895095400549111254310977536, _64) (-6739986666787659948666753771754907668409286105635143120275902562304, _65) (-431359146674410236714672241392314090778194310760649159697657763987456, _66) (-27606985387162255149739023449108101809804435888681546220650096895197184, _67) 0 ]
EXPR [ (-1, _68) 65 ]
EXPR [ (-1, _69) 66 ]
EXPR [ (-1, _70) 67 ]
EXPR [ (-1, _71) 68 ]
EXPR [ (-1, _72) 69 ]
EXPR [ (-1, _73) 70 ]
EXPR [ (-1, _74) 71 ]
EXPR [ (-1, _75) 72 ]
EXPR [ (-1, _76) 73 ]
EXPR [ (-1, _77) 74 ]
EXPR [ (-1, _78) 75 ]
EXPR [ (-1, _79) 76 ]
EXPR [ (-1, _80) 77 ]
EXPR [ (-1, _81) 78 ]
EXPR [ (-1, _82) 79 ]
EXPR [ (-1, _83) 80 ]
EXPR [ (-1, _84) 81 ]
EXPR [ (-1, _85) 82 ]
EXPR [ (-1, _86) 83 ]
EXPR [ (-1, _87) 84 ]
EXPR [ (-1, _88) 85 ]
EXPR [ (-1, _89) 86 ]
EXPR [ (-1, _90) 87 ]
EXPR [ (-1, _91) 88 ]
EXPR [ (-1, _92) 89 ]
EXPR [ (-1, _93) 90 ]
EXPR [ (-1, _94) 97 ]
EXPR [ (-1, _95) 98 ]
EXPR [ (-1, _96) 99 ]
EXPR [ (-1, _97) 100 ]
EXPR [ (-1, _98) 101 ]
EXPR [ (-1, _99) 102 ]
EXPR [ (-1, _100) 103 ]
EXPR [ (-1, _101) 104 ]
EXPR [ (-1, _102) 105 ]
EXPR [ (-1, _103) 106 ]
EXPR [ (-1, _104) 107 ]
EXPR [ (-1, _105) 108 ]
EXPR [ (-1, _106) 109 ]
EXPR [ (-1, _107) 110 ]
EXPR [ (-1, _108) 111 ]
EXPR [ (-1, _109) 112 ]
EXPR [ (-1, _110) 113 ]
EXPR [ (-1, _111) 114 ]
EXPR [ (-1, _112) 115 ]
EXPR [ (-1, _113) 116 ]
EXPR [ (-1, _114) 117 ]
EXPR [ (-1, _115) 118 ]
EXPR [ (-1, _116) 119 ]
EXPR [ (-1, _117) 120 ]
EXPR [ (-1, _118) 121 ]
EXPR [ (-1, _119) 122 ]
EXPR [ (-1, _120) 48 ]
EXPR [ (-1, _121) 49 ]
EXPR [ (-1, _122) 50 ]
EXPR [ (-1, _123) 51 ]
EXPR [ (-1, _124) 52 ]
EXPR [ (-1, _125) 53 ]
EXPR [ (-1, _126) 54 ]
EXPR [ (-1, _127) 55 ]
EXPR [ (-1, _128) 56 ]
EXPR [ (-1, _129) 57 ]
EXPR [ (-1, _130) 43 ]
EXPR [ (-1, _131) 47 ]
INIT (id: 3, len: 64) 
MEM (id: 3, read at: x67, value: x132) 
MEM (id: 3, read at: x66, value: x133) 
MEM (id: 3, read at: x65, value: x134) 
MEM (id: 3, read at: x64, value: x135) 
MEM (id: 3, read at: x63, value: x136) 
MEM (id: 3, read at: x62, value: x137) 
MEM (id: 3, read at: x61, value: x138) 
MEM (id: 3, read at: x60, value: x139) 
MEM (id: 3, read at: x59, value: x140) 
MEM (id: 3, read at: x58, value: x141) 
MEM (id: 3, read at: x57, value: x142) 
MEM (id: 3, read at: x56, value: x143) 
MEM (id: 3, read at: x55, value: x144) 
MEM (id: 3, read at: x54, value: x145) 
MEM (id: 3, read at: x53, value: x146) 
MEM (id: 3, read at: x52, value: x147) 
BRILLIG CALL func 0: inputs: [Single(Expression { mul_terms: [], linear_combinations: [], q_c: 1 }), Array([Expression { mul_terms: [], linear_combinations: [(1, Witness(132))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(133))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(134))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(135))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(136))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(137))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(138))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(139))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(140))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(141))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(142))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(143))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(144))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(145))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(146))], q_c: 0 }, Expression { mul_terms: [], linear_combinations: [(1, Witness(147))], q_c: 0 }])], outputs: []

unconstrained func 0
[Const { destination: Direct(2), bit_size: Integer(U32), value: 1 }, Const { destination: Direct(1), bit_size: Integer(U32), value: 32852 }, Const { destination: Direct(0), bit_size: Integer(U32), value: 3 }, Const { destination: Relative(3), bit_size: Integer(U32), value: 17 }, Const { destination: Relative(4), bit_size: Integer(U32), value: 0 }, CalldataCopy { destination_address: Direct(32835), size_address: Relative(3), offset_address: Relative(4) }, Cast { destination: Direct(32835), source: Direct(32835), bit_size: Integer(U1) }, Cast { destination: Direct(32836), source: Direct(32836), bit_size: Integer(U8) }, Cast { destination: Direct(32837), source: Direct(32837), bit_size: Integer(U8) }, Cast { destination: Direct(32838), source: Direct(32838), bit_size: Integer(U8) }, Cast { destination: Direct(32839), source: Direct(32839), bit_size: Integer(U8) }, Cast { destination: Direct(32840), source: Direct(32840), bit_size: Integer(U8) }, Cast { destination: Direct(32841), source: Direct(32841), bit_size: Integer(U8) }, Cast { destination: Direct(32842), source: Direct(32842), bit_size: Integer(U8) }, Cast { destination: Direct(32843), source: Direct(32843), bit_size: Integer(U8) }, Cast { destination: Direct(32844), source: Direct(32844), bit_size: Integer(U8) }, Cast { destination: Direct(32845), source: Direct(32845), bit_size: Integer(U8) }, Cast { destination: Direct(32846), source: Direct(32846), bit_size: Integer(U8) }, Cast { destination: Direct(32847), source: Direct(32847), bit_size: Integer(U8) }, Cast { destination: Direct(32848), source: Direct(32848), bit_size: Integer(U8) }, Cast { destination: Direct(32849), source: Direct(32849), bit_size: Integer(U8) }, Cast { destination: Direct(32850), source: Direct(32850), bit_size: Integer(U8) }, Cast { destination: Direct(32851), source: Direct(32851), bit_size: Integer(U8) }, Mov { destination: Relative(1), source: Direct(32835) }, Const { destination: Relative(2), bit_size: Integer(U32), value: 32836 }, Const { destination: Relative(4), bit_size: Integer(U32), value: 16 }, Mov { destination: Relative(3), source: Direct(1) }, Const { destination: Relative(5), bit_size: Integer(U32), value: 17 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(5) }, IndirectConst { destination_pointer: Relative(3), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(5), op: Add, bit_size: U32, lhs: Relative(3), rhs: Direct(2) }, Mov { destination: Direct(32771), source: Relative(2) }, Mov { destination: Direct(32772), source: Relative(5) }, Mov { destination: Direct(32773), source: Relative(4) }, Call { location: 38 }, Mov { destination: Relative(2), source: Relative(3) }, Call { location: 49 }, Stop { return_data_offset: 32852, return_data_size: 0 }, BinaryIntOp { destination: Direct(32775), op: Add, bit_size: U32, lhs: Direct(32771), rhs: Direct(32773) }, Mov { destination: Direct(32776), source: Direct(32771) }, Mov { destination: Direct(32777), source: Direct(32772) }, BinaryIntOp { destination: Direct(32778), op: Equals, bit_size: U32, lhs: Direct(32776), rhs: Direct(32775) }, JumpIf { condition: Direct(32778), location: 48 }, Load { destination: Direct(32774), source_pointer: Direct(32776) }, Store { destination_pointer: Direct(32777), source: Direct(32774) }, BinaryIntOp { destination: Direct(32776), op: Add, bit_size: U32, lhs: Direct(32776), rhs: Direct(2) }, BinaryIntOp { destination: Direct(32777), op: Add, bit_size: U32, lhs: Direct(32777), rhs: Direct(2) }, Jump { location: 41 }, Return, Call { location: 228 }, Const { destination: Relative(3), bit_size: Integer(U8), value: 125 }, Const { destination: Relative(4), bit_size: Integer(U8), value: 115 }, Const { destination: Relative(5), bit_size: Integer(U8), value: 54 }, Const { destination: Relative(6), bit_size: Integer(U8), value: 116 }, Const { destination: Relative(7), bit_size: Integer(U8), value: 108 }, Const { destination: Relative(8), bit_size: Integer(U8), value: 114 }, Const { destination: Relative(9), bit_size: Integer(U8), value: 100 }, Const { destination: Relative(10), bit_size: Integer(U8), value: 107 }, Const { destination: Relative(11), bit_size: Integer(U1), value: 0 }, Const { destination: Relative(12), bit_size: Integer(U8), value: 56 }, Const { destination: Relative(13), bit_size: Integer(U8), value: 117 }, Const { destination: Relative(14), bit_size: Integer(U8), value: 49 }, Const { destination: Relative(15), bit_size: Integer(U8), value: 103 }, Const { destination: Relative(16), bit_size: Integer(U8), value: 44 }, Const { destination: Relative(17), bit_size: Integer(U8), value: 97 }, Const { destination: Relative(18), bit_size: Integer(U8), value: 110 }, Const { destination: Relative(19), bit_size: Integer(U8), value: 34 }, Mov { destination: Relative(20), source: Direct(1) }, Const { destination: Relative(21), bit_size: Integer(U32), value: 73 }, BinaryIntOp { destination: Direct(1), op: Add, bit_size: U32, lhs: Direct(1), rhs: Relative(21) }, IndirectConst { destination_pointer: Relative(20), bit_size: Integer(U32), value: 1 }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, Mov { destination: Relative(22), source: Relative(21) }, Const { destination: Relative(23), bit_size: Integer(U8), value: 123 }, Store { destination_pointer: Relative(22), source: Relative(23) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(10) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Const { destination: Relative(24), bit_size: Integer(U8), value: 105 }, Store { destination_pointer: Relative(22), source: Relative(24) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(18) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(9) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Const { destination: Relative(25), bit_size: Integer(U8), value: 58 }, Store { destination_pointer: Relative(22), source: Relative(25) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(17) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(8) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(8) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(17) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Const { destination: Relative(26), bit_size: Integer(U8), value: 121 }, Store { destination_pointer: Relative(22), source: Relative(26) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(16) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(7) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Const { destination: Relative(27), bit_size: Integer(U8), value: 101 }, Store { destination_pointer: Relative(22), source: Relative(27) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(18) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(15) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(6) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Const { destination: Relative(28), bit_size: Integer(U8), value: 104 }, Store { destination_pointer: Relative(22), source: Relative(28) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(25) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(14) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(5) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(16) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(6) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(26) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Const { destination: Relative(29), bit_size: Integer(U8), value: 112 }, Store { destination_pointer: Relative(22), source: Relative(29) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(27) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(25) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(23) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(10) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(24) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(18) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(9) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(25) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(13) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(18) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(4) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(24) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(15) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(18) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(27) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(9) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(24) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(18) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(6) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(27) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(15) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(27) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(8) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(16) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Const { destination: Relative(30), bit_size: Integer(U8), value: 119 }, Store { destination_pointer: Relative(22), source: Relative(30) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(24) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(9) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(6) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(28) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(19) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(25) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(12) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(3) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(22), rhs: Direct(2) }, Store { destination_pointer: Relative(22), source: Relative(3) }, BinaryIntOp { destination: Relative(21), op: Add, bit_size: U32, lhs: Relative(2), rhs: Direct(2) }, BinaryIntOp { destination: Relative(22), op: Add, bit_size: U32, lhs: Relative(20), rhs: Direct(2) }, ForeignCall { function: "print", destinations: [], destination_value_types: [], inputs: [MemoryAddress(Relative(1)), HeapArray(HeapArray { pointer: Relative(21), size: 16 }), HeapArray(HeapArray { pointer: Relative(22), size: 72 }), MemoryAddress(Relative(11))], input_value_types: [Simple(Integer(U1)), Array { value_types: [Simple(Integer(U8))], size: 16 }, Array { value_types: [Simple(Integer(U8))], size: 72 }, Simple(Integer(U1))] }, Return, Const { destination: Direct(32772), bit_size: Integer(U32), value: 30720 }, BinaryIntOp { destination: Direct(32771), op: LessThan, bit_size: U32, lhs: Direct(0), rhs: Direct(32772) }, JumpIf { condition: Direct(32771), location: 233 }, Const { destination: Direct(32772), bit_size: Integer(U32), value: 0 }, Trap { revert_data: HeapVector { pointer: Direct(0), size: Direct(32772) } }, Return]


@TomAFrench
Copy link
Member

Cleaner repro

[package]
name = "temp"
type = "bin"
authors = [""]

[dependencies]
base64 = { git = "https://github.com/noir-lang/noir_base64", tag = "v0.3.1" }
use base64::BASE64_ENCODER;

fn main(input: str<1>) {
    let _encoded: [u8; 4] = BASE64_ENCODER.encode(input.as_bytes());
    println(_encoded);
}

@TomAFrench
Copy link
Member

@guipublic can you take a look at this when you've got some bandwidth? I'm guessing this is due to unused array gets being replaced with explicit bounds checks?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
Status: 📋 Backlog
Development

No branches or pull requests

3 participants