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

Don't replace abstract state of higher order functions with bottom when we can avoid it (now guarded by --fancy-and-powerful-but-exponentially-slow-bounds-analysis) #1761

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

JasonGross
Copy link
Collaborator

@JasonGross JasonGross commented Dec 2, 2023

Partial progress towards #1609.

Reworked value type to more closely match the possible spec.

Deduplicated interp_ident / abstract_interp_ident overlapped state.

The specification of reify and reflect has been simplified to more
closely match the intuition: reify's spec no longer talks about output
bounds, only interpretation, and a companion lemma
abstraction_relation_of_related_bounded_value' shows that the spec of
reflect is effectively one direction of an isomorphism between
interpreted-values bounded by abstract state, and values which are in
relationship with the given interpreted-value. Not really sure how best
to describe this in words yet, probably needs some digesting work.

There's some interesting lemmas where we have an equivalency between two
ways of representing things only for up-to-second-order types, and an
implication for up-to-third-order types, which is currently all the
identifiers. But this means that if we add fourth-order identifiers,
we'll have to deal with two different sorts of Proper abstraction
relations (one used by Assembly/Symbolic and one used by bounds
analysis, though it's possible the Assembly/Symbolic one can be
adapted).

Timing info coming soon

Remaining admits:

  • wf_interp (this is a big one, but hopefully nothing too surprising)
  • always_strip_annotation_related
  • interp_eval_with_bound (requires fixing a mismatch between abstraction_relation and type.related_hetero abstraction_relation', maybe some other stuff)
  • interp_eta_expand_with_bound
  • Interp_EvalWithBound (requires dealing with newly introduced ToFlat / FromFlat round-trip)
  • interp_strip_annotations
  • Interp_PartialEvaluateWithBounds_bounded
  • CheckedPartialEvaluateWithBounds_Correct

Note that, other than the wf_interp lemma, I expect most of these to just be figuring out some gluing.

cc @andres-erbsen

@JasonGross JasonGross force-pushed the dont-bottomify branch 6 times, most recently from 695a51f to b90ce96 Compare December 3, 2023 02:07
JasonGross added a commit to JasonGross/rewriter that referenced this pull request Dec 3, 2023
JasonGross added a commit to mit-plv/rewriter that referenced this pull request Dec 3, 2023
JasonGross added a commit to JasonGross/fiat-crypto that referenced this pull request Dec 3, 2023
JasonGross added a commit to JasonGross/fiat-crypto that referenced this pull request Dec 3, 2023
JasonGross added a commit that referenced this pull request Dec 4, 2023
@JasonGross JasonGross force-pushed the dont-bottomify branch 3 times, most recently from f98b4ca to e0022a8 Compare December 4, 2023 04:42
@JasonGross JasonGross changed the title [WIP] Don't replace abstract state of higher order functions with bottom when we can avoid it Don't replace abstract state of higher order functions with bottom when we can avoid it Dec 4, 2023
JasonGross added a commit to JasonGross/fiat-crypto that referenced this pull request Dec 4, 2023
JasonGross added a commit to JasonGross/fiat-crypto that referenced this pull request Dec 4, 2023
JasonGross added a commit to JasonGross/fiat-crypto that referenced this pull request Dec 4, 2023
JasonGross added a commit to JasonGross/fiat-crypto that referenced this pull request Dec 4, 2023
Copy link
Collaborator Author

@JasonGross JasonGross left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I found the source of the performance issue.

Comment on lines 99 to 107
=> (let f := state_of_value f_e in
f_e <-- project_value' f_e;
Base
(λ x , UnderLets.to_expr
(let sv := @reflect annotate_with_state _ (expr.Var x) sv in
let sx := state_of_value sv in
x <-- project_value' sv;
fx <-- f_e (sx, x)%core;
@reify annotate_with_state false _ (f sx, Base fx)%core dv)))
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is one source of bad asymptotics: we run the abstract state twice, both as f sx and as f_e (sx, x). I guess the computation needs to be shared?

Comment on lines 115 to 120
=> Base_value'
(absf,
(fun v
=> rv <-- @reify annotate_with_state false s (Base_value' v) bottom_for_each_lhs_of_arrow;
(* TODO: Should we be feeding in [fst v], or should we bottom out the arguments to [fst v]? *)
project_value' (@reflect annotate_with_state d (e @ rv) (absf (fst v)))%expr))
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possibly the duplication of absf here is bad, not sure

Comment on lines 151 to 158
| expr.Abs s d f
=> fun fe_st
=> let f_st := expr_interp fe_st in
let fe_st := Option.value (invert_Abs fe_st) ((* should never happen *)fun _ => DefaultValue.type.base.defaultv) in
Base_value'
(f_st,
(fun x
=> project_value' (@interp annotate_with_state d (f (Base_value' x)) (fe_st (fst x)))))
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here we interpret the entire state expression at every abstraction node, seems like a likely source of asymptotic blowup.

Comment on lines 165 to 173
| expr.LetIn (type.base A' as A) B x f
=> fun st
=> let '(x_st, f_st) := invert_default' A (invert_LetIn st) in
let x := @interp annotate_with_state _ x x_st in
let x_st := state_of_value x in
let fx_st := f_st x_st in
(expr_interp fx_st,
x <-- reify annotate_with_state true (* this forces a let-binder here *) x tt;
project_value' (@interp annotate_with_state _ (f (reflect annotate_with_state x x_st)) fx_st))
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even more clearly, we interpret the entire remainder of the expression at every let-in. Almost certainly this is giving us asymptotic blowup.

JasonGross added a commit to JasonGross/fiat-crypto that referenced this pull request Dec 6, 2023
JasonGross added a commit to JasonGross/fiat-crypto that referenced this pull request Dec 6, 2023
For mit-plv#1761

We make use of a slightly different abstraction relation that seems to
have better properties with `reify` and `reflect` when we don't
bottomify.
@JasonGross JasonGross force-pushed the dont-bottomify branch 3 times, most recently from 8b23cf5 to 6c6792d Compare December 6, 2023 05:45
@JasonGross JasonGross changed the title Don't replace abstract state of higher order functions with bottom when we can avoid it Don't replace abstract state of higher order functions with bottom when we can avoid it (now guarded by --fancy-and-powerful-but-exponentially-slow-bounds-analysis) Dec 6, 2023
@JasonGross JasonGross marked this pull request as ready for review December 6, 2023 05:45
Comment on lines +420 to +423
Definition fancy_and_powerful_but_exponentially_slow_bounds_analysis_spec : named_argT
:= ([Arg.long_key "fancy-and-powerful-but-exponentially-slow-bounds-analysis"],
Arg.Unit,
["Use a more powerful bound analysis implementation that is unfortunately exponentially slow in the number of lines of code. If you know how to implement PHOAS passes of type [expr var -> var * expr var] or if you want to reimplement our bounds analysis pass in a first-order expression representation instead of PHOAS, please contact us! See https://github.com/mit-plv/fiat-crypto/pull/1761 for more details."]).
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@andres-erbsen What do you think of this? 😝

In preparation for making a fancier but slower bounds analysis pass.
Note that this commit does not build on its own, and is here purely to
make `git` notice renaming/copying of files.
Reworked value type to more closely match the possible spec.

Deduplicated `interp_ident` / `abstract_interp_ident` overlapped state.

The specification of `reify` and `reflect` has been simplified to more
closely match the intuition: `reify`'s spec no longer talks about output
bounds, only interpretation, and a companion lemma
`abstraction_relation_of_related_bounded_value'` shows that the spec of
`reflect` is effectively one direction of an isomorphism between
interpreted-values bounded by abstract state, and `value`s which are in
relationship with the given interpreted-value.  Not really sure how best
to describe this in words yet, probably needs some digesting work.

There's some interesting lemmas where we have an equivalency between two
ways of representing things only for up-to-second-order types, and an
implication for up-to-third-order types, which is currently all the
identifiers.  But this means that if we add fourth-order identifiers,
we'll have to deal with two different sorts of `Proper` abstraction
relations (one used by `Assembly/Symbolic` and one used by bounds
analysis, though it's possible the `Assembly/Symbolic` one can be
adapted).

* Guard exponentially slow bounds analysis with a flag

With `--fancy-and-powerful-but-exponentially-slow-bounds-analysis`

Idk how to implement a non-exponential PHOAS passe for this.

<details><summary>Timing Diff before guarding with flag</summary>
<p>

```
      After |   Peak Mem | File Name                                                         |     Before |   Peak Mem ||       Change || Change (mem) |   % Change | % Change (mem)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
5494m57.81s | 2858552 ko | Total Time / Peak Mem                                             | 120m21.13s | 2852328 ko || +5374m36.68s ||      6224 ko |  +4465.73% |         +0.21%
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 352m04.93s | 1781524 ko | fiat-rust/src/p384_scalar_32.rs                                   |   1m53.74s | 1628856 ko ||  +350m11.18s ||    152668 ko | +18472.99% |         +9.37%
 351m13.49s | 1916288 ko | fiat-java/src/FiatP384Scalar.java                                 |   1m53.23s | 1620248 ko ||  +349m20.26s ||    296040 ko | +18511.22% |        +18.27%
 344m52.23s | 1666100 ko | fiat-go/32/p384scalar/p384scalar.go                               |   1m53.04s | 1734424 ko ||  +342m59.18s ||    -68324 ko | +18205.22% |         -3.93%
 343m32.96s | 1898556 ko | fiat-c/src/p384_scalar_32.c                                       |   1m51.27s | 1627512 ko ||  +341m41.68s ||    271044 ko | +18425.17% |        +16.65%
 341m26.05s | 1834040 ko | fiat-json/src/p384_scalar_32.json                                 |   1m46.90s | 1802484 ko ||  +339m39.14s ||     31556 ko | +19063.75% |         +1.75%
 336m05.54s | 1870632 ko | fiat-rust/src/p384_32.rs                                          |   1m50.16s | 1709428 ko ||  +334m15.38s ||    161204 ko | +18205.68% |         +9.43%
 334m29.07s | 1989180 ko | fiat-java/src/FiatP384.java                                       |   1m52.50s | 1817848 ko ||  +332m36.56s ||    171332 ko | +17739.17% |         +9.42%
 333m35.10s | 1806688 ko | fiat-json/src/p384_32.json                                        |   1m53.94s | 1629284 ko ||  +331m41.15s ||    177404 ko | +17466.35% |        +10.88%
 328m36.71s | 1779836 ko | fiat-bedrock2/src/p384_scalar_32.c                                |   1m48.68s | 1758232 ko ||  +326m48.02s ||     21604 ko | +18041.98% |         +1.22%
 328m39.19s | 1662676 ko | fiat-go/32/p384/p384.go                                           |   1m53.01s | 1625684 ko ||  +326m46.18s ||     36992 ko | +17349.06% |         +2.27%
 321m01.71s | 1709592 ko | fiat-c/src/p384_32.c                                              |   1m49.66s | 2029588 ko ||  +319m12.04s ||   -319996 ko | +17464.93% |        -15.76%
 320m33.13s | 1872256 ko | fiat-bedrock2/src/p384_32.c                                       |   1m48.69s | 1687840 ko ||  +318m44.44s ||    184416 ko | +17595.39% |        +10.92%
 318m14.38s | 2079716 ko | fiat-zig/src/p384_scalar_32.zig                                   |   1m54.15s | 1960684 ko ||  +316m20.22s ||    119032 ko | +16627.44% |         +6.07%
 308m20.28s | 1645516 ko | fiat-zig/src/p384_32.zig                                          |   1m52.66s | 1948020 ko ||  +306m27.61s ||   -302504 ko | +16321.33% |        -15.52%
 140m13.96s | 2858552 ko | Bedrock/Field/Synthesis/Examples/p224_64_new.vo                   |   5m29.46s | 2852328 ko ||  +134m44.49s ||      6224 ko |  +2453.86% |         +0.21%
  15m08.73s |  412980 ko | fiat-zig/src/secp256k1_montgomery_scalar_32.zig                   |   0m17.06s |  365400 ko ||   +14m51.67s ||     47580 ko |  +5226.67% |        +13.02%
  15m07.92s |  444232 ko | fiat-rust/src/secp256k1_montgomery_scalar_32.rs                   |   0m16.58s |  413372 ko ||   +14m51.33s ||     30860 ko |  +5375.99% |         +7.46%
  15m07.44s |  447232 ko | fiat-bedrock2/src/secp256k1_montgomery_scalar_32.c                |   0m17.59s |  396628 ko ||   +14m49.85s ||     50604 ko |  +5058.84% |        +12.75%
  15m05.89s |  413980 ko | fiat-zig/src/p256_scalar_32.zig                                   |   0m17.13s |  404448 ko ||   +14m48.75s ||      9532 ko |  +5188.32% |         +2.35%
  15m00.09s |  462000 ko | fiat-json/src/secp256k1_montgomery_scalar_32.json                 |   0m17.14s |  372928 ko ||   +14m42.95s ||     89072 ko |  +5151.40% |        +23.88%
  14m59.00s |  383440 ko | fiat-go/32/secp256k1montgomeryscalar/secp256k1montgomeryscalar.go |   0m16.75s |  439368 ko ||   +14m42.25s ||    -55928 ko |  +5267.16% |        -12.72%
  14m58.83s |  417168 ko | fiat-java/src/FiatSecp256K1MontgomeryScalar.java                  |   0m17.43s |  335352 ko ||   +14m41.40s ||     81816 ko |  +5056.79% |        +24.39%
  14m57.88s |  378000 ko | fiat-go/32/p256scalar/p256scalar.go                               |   0m16.89s |  362996 ko ||   +14m40.99s ||     15004 ko |  +5216.04% |         +4.13%
  14m43.11s |  453008 ko | fiat-bedrock2/src/curve25519_scalar_32.c                          |   0m16.87s |  404488 ko ||   +14m26.24s ||     48520 ko |  +5134.79% |        +11.99%
  14m42.26s |  423172 ko | fiat-zig/src/curve25519_scalar_32.zig                             |   0m16.75s |  338768 ko ||   +14m25.50s ||     84404 ko |  +5167.22% |        +24.91%
  14m34.97s |  386392 ko | fiat-java/src/FiatSecp256K1Montgomery.java                        |   0m16.92s |  375048 ko ||   +14m18.05s ||     11344 ko |  +5071.21% |         +3.02%
  14m35.14s |  439764 ko | fiat-bedrock2/src/p256_scalar_32.c                                |   0m17.47s |  466176 ko ||   +14m17.66s ||    -26412 ko |  +4909.38% |         -5.66%
  14m33.96s |  418052 ko | fiat-c/src/p256_scalar_32.c                                       |   0m16.30s |  433696 ko ||   +14m17.66s ||    -15644 ko |  +5261.71% |         -3.60%
  14m32.17s |  379176 ko | fiat-zig/src/secp256k1_montgomery_32.zig                          |   0m16.64s |  440088 ko ||   +14m15.52s ||    -60912 ko |  +5141.40% |        -13.84%
  14m32.26s |  386104 ko | fiat-java/src/FiatP256Scalar.java                                 |   0m17.60s |  395220 ko ||   +14m14.65s ||     -9116 ko |  +4856.02% |         -2.30%
  14m20.14s |  476544 ko | fiat-json/src/secp256k1_montgomery_32.json                        |   0m16.80s |  384668 ko ||   +14m03.34s ||     91876 ko |  +5019.88% |        +23.88%
  14m18.94s |  380196 ko | fiat-java/src/FiatCurve25519Scalar.java                           |   0m16.99s |  369068 ko ||   +14m01.95s ||     11128 ko |  +4955.56% |         +3.01%
  14m14.20s |  438032 ko | fiat-bedrock2/src/secp256k1_montgomery_32.c                       |   0m16.55s |  414072 ko ||   +13m57.65s ||     23960 ko |  +5061.32% |         +5.78%
  14m10.18s |  382024 ko | fiat-c/src/secp256k1_montgomery_scalar_32.c                       |   0m16.48s |  349956 ko ||   +13m53.69s ||     32068 ko |  +5058.85% |         +9.16%
  14m07.30s |  380804 ko | fiat-go/32/secp256k1montgomery/secp256k1montgomery.go             |   0m15.85s |  343344 ko ||   +13m51.44s ||     37460 ko |  +5245.74% |        +10.91%
  14m05.83s |  384216 ko | fiat-rust/src/p256_scalar_32.rs                                   |   0m16.99s |  347112 ko ||   +13m48.84s ||     37104 ko |  +4878.39% |        +10.68%
  14m02.24s |  421196 ko | fiat-rust/src/secp256k1_montgomery_32.rs                          |   0m16.59s |  342720 ko ||   +13m45.64s ||     78476 ko |  +4976.79% |        +22.89%
  13m55.86s |  416884 ko | fiat-bedrock2/src/p256_32.c                                       |   0m15.76s |  363984 ko ||   +13m40.10s ||     52900 ko |  +5203.68% |        +14.53%
  13m49.51s |  435140 ko | fiat-zig/src/p256_32.zig                                          |   0m15.90s |  375036 ko ||   +13m33.61s ||     60104 ko |  +5117.04% |        +16.02%
  13m48.55s |  402868 ko | fiat-json/src/curve25519_scalar_32.json                           |   0m16.09s |  444636 ko ||   +13m32.45s ||    -41768 ko |  +5049.47% |         -9.39%
  13m47.62s |  374572 ko | fiat-c/src/curve25519_scalar_32.c                                 |   0m15.90s |  352232 ko ||   +13m31.72s ||     22340 ko |  +5105.15% |         +6.34%
  13m40.58s |  411000 ko | fiat-c/src/secp256k1_montgomery_32.c                              |   0m15.54s |  361600 ko ||   +13m25.04s ||     49400 ko |  +5180.43% |        +13.66%
  13m38.90s |  391764 ko | fiat-java/src/FiatP256.java                                       |   0m15.69s |  392176 ko ||   +13m23.20s ||      -412 ko |  +5119.24% |         -0.10%
  13m28.98s |  382116 ko | fiat-go/32/p256/p256.go                                           |   0m15.69s |  361040 ko ||   +13m13.28s ||     21076 ko |  +5056.02% |         +5.83%
  13m24.91s |  408552 ko | fiat-rust/src/p256_32.rs                                          |   0m15.57s |  405540 ko ||   +13m09.33s ||      3012 ko |  +5069.62% |         +0.74%
  13m25.05s |  424812 ko | fiat-rust/src/curve25519_scalar_32.rs                             |   0m16.29s |  429536 ko ||   +13m08.75s ||     -4724 ko |  +4841.98% |         -1.09%
  13m23.56s |  408716 ko | fiat-json/src/p256_scalar_32.json                                 |   0m17.19s |  433976 ko ||   +13m06.36s ||    -25260 ko |  +4574.57% |         -5.82%
  13m06.66s |  379524 ko | fiat-go/32/curve25519scalar/curve25519scalar.go                   |   0m16.39s |  325156 ko ||   +12m50.26s ||     54368 ko |  +4699.63% |        +16.72%
  13m01.92s |  376048 ko | fiat-c/src/p256_32.c                                              |   0m15.20s |  359812 ko ||   +12m46.71s ||     16236 ko |  +5044.21% |         +4.51%
  12m49.57s |  423456 ko | fiat-json/src/p256_32.json                                        |   0m15.99s |  429740 ko ||   +12m33.58s ||     -6284 ko |  +4712.82% |         -1.46%
   7m46.98s |  284096 ko | fiat-zig/src/p434_64.zig                                          |   0m18.66s |  250696 ko ||    +7m28.31s ||     33400 ko |  +2402.57% |        +13.32%
   7m42.79s |  333916 ko | fiat-json/src/p434_64.json                                        |   0m18.88s |  286668 ko ||    +7m23.91s ||     47248 ko |  +2351.21% |        +16.48%
   7m42.28s |  277712 ko | fiat-go/64/p434/p434.go                                           |   0m18.69s |  239700 ko ||    +7m23.58s ||     38012 ko |  +2373.40% |        +15.85%
   7m34.48s |  367696 ko | fiat-bedrock2/src/p434_64.c                                       |   0m18.03s |  373868 ko ||    +7m16.45s ||     -6172 ko |  +2420.68% |         -1.65%
   7m30.04s |  281384 ko | fiat-c/src/p434_64.c                                              |   0m18.12s |  237136 ko ||    +7m11.92s ||     44248 ko |  +2383.66% |        +18.65%
   7m24.16s |  273604 ko | fiat-rust/src/p434_64.rs                                          |   0m18.41s |  246432 ko ||    +7m05.75s ||     27172 ko |  +2312.60% |        +11.02%
   5m07.03s |  256280 ko | fiat-java/src/FiatP224.java                                       |   0m09.02s |  261688 ko ||    +4m58.00s ||     -5408 ko |  +3303.88% |         -2.06%
   5m00.31s |  238104 ko | fiat-go/32/p224/p224.go                                           |   0m09.01s |  223612 ko ||    +4m51.30s ||     14492 ko |  +3233.07% |         +6.48%
   4m59.60s |  240328 ko | fiat-zig/src/p224_32.zig                                          |   0m09.37s |  225308 ko ||    +4m50.23s ||     15020 ko |  +3097.43% |         +6.66%
   4m57.44s |  288372 ko | fiat-json/src/p224_32.json                                        |   0m09.08s |  283848 ko ||    +4m48.36s ||      4524 ko |  +3175.77% |         +1.59%
   4m57.40s |  239760 ko | fiat-rust/src/p224_32.rs                                          |   0m09.10s |  269448 ko ||    +4m48.29s ||    -29688 ko |  +3168.13% |        -11.01%
   4m48.57s |  310468 ko | fiat-bedrock2/src/p224_32.c                                       |   0m08.99s |  282600 ko ||    +4m39.57s ||     27868 ko |  +3109.89% |         +9.86%
   4m48.27s |  239228 ko | fiat-c/src/p224_32.c                                              |   0m08.96s |  230412 ko ||    +4m39.31s ||      8816 ko |  +3117.29% |         +3.82%
   2m48.44s |  184568 ko | fiat-json/src/p384_scalar_64.json                                 |   0m11.23s |  168860 ko ||    +2m37.21s ||     15708 ko |  +1399.91% |         +9.30%
   2m48.14s |  167980 ko | fiat-zig/src/p384_scalar_64.zig                                   |   0m11.15s |  193456 ko ||    +2m36.98s ||    -25476 ko |  +1407.98% |        -13.16%
   2m43.61s |  213748 ko | fiat-bedrock2/src/p384_scalar_64.c                                |   0m11.14s |  192024 ko ||    +2m32.47s ||     21724 ko |  +1368.67% |        +11.31%
   2m43.36s |  167968 ko | fiat-rust/src/p384_scalar_64.rs                                   |   0m11.11s |  148400 ko ||    +2m32.25s ||     19568 ko |  +1370.38% |        +13.18%
   2m41.95s |  184636 ko | fiat-c/src/p384_scalar_64.c                                       |   0m10.86s |  154744 ko ||    +2m31.08s ||     29892 ko |  +1391.25% |        +19.31%
   2m37.83s |  178156 ko | fiat-go/64/p384scalar/p384scalar.go                               |   0m11.15s |  193256 ko ||    +2m26.67s ||    -15100 ko |  +1315.51% |         -7.81%
   2m29.44s |  166896 ko | fiat-zig/src/p384_64.zig                                          |   0m09.52s |  154632 ko ||    +2m19.91s ||     12264 ko |  +1469.74% |         +7.93%
   2m28.98s |  184900 ko | fiat-json/src/p384_64.json                                        |   0m09.31s |  171972 ko ||    +2m19.66s ||     12928 ko |  +1500.21% |         +7.51%
   2m26.58s |  176112 ko | fiat-go/64/p384/p384.go                                           |   0m09.47s |  181568 ko ||    +2m17.10s ||     -5456 ko |  +1447.83% |         -3.00%
   2m25.35s |  175320 ko | fiat-c/src/p384_64.c                                              |   0m09.21s |  151936 ko ||    +2m16.13s ||     23384 ko |  +1478.17% |        +15.39%
   2m23.86s |  189000 ko | fiat-rust/src/p384_64.rs                                          |   0m09.49s |  145760 ko ||    +2m14.37s ||     43240 ko |  +1415.91% |        +29.66%
   2m23.35s |  211804 ko | fiat-bedrock2/src/p384_64.c                                       |   0m09.35s |  189388 ko ||    +2m14.00s ||     22416 ko |  +1433.15% |        +11.83%
   2m29.46s | 2135192 ko | SlowPrimeSynthesisExamples.vo                                     |   1m28.36s | 2041032 ko ||    +1m01.10s ||     94160 ko |    +69.14% |         +4.61%
   8m55.13s | 2650896 ko | Bedrock/End2End/X25519/GarageDoor.vo                              |   8m25.15s | 2656564 ko ||    +0m29.98s ||     -5668 ko |     +5.93% |         -0.21%
    N/A     |    N/A     | PerfTesting/PerfTestSearch.vo                                     |   0m25.13s | 1373644 ko ||    -0m25.12s ||  -1373644 ko |   -100.00% |       -100.00%
   1m22.31s |  941440 ko | AbstractInterpretation/Wf.vo                                      |   1m00.63s |  875644 ko ||    +0m21.67s ||     65796 ko |    +35.75% |         +7.51%
   0m48.67s |  773988 ko | AbstractInterpretation/Proofs.vo                                  |   0m29.24s |  702092 ko ||    +0m19.43s ||     71896 ko |    +66.45% |        +10.24%
    N/A     |    N/A     | PerfTesting/PerfTestSearchPattern.vo                              |   0m17.89s | 1373708 ko ||    -0m17.89s ||  -1373708 ko |   -100.00% |       -100.00%
   2m05.77s | 1631168 ko | Bedrock/End2End/X25519/Field25519.vo                              |   1m51.28s | 1594648 ko ||    +0m14.48s ||     36520 ko |    +13.02% |         +2.29%
   0m14.59s |   64448 ko | fiat-rust/src/secp256k1_montgomery_scalar_64.rs                   |   0m02.67s |   60756 ko ||    +0m11.92s ||      3692 ko |   +446.44% |         +6.07%
   0m14.52s |   62432 ko | fiat-zig/src/secp256k1_montgomery_scalar_64.zig                   |   0m02.76s |   58520 ko ||    +0m11.75s ||      3912 ko |   +426.08% |         +6.68%
   0m14.45s |   67272 ko | fiat-zig/src/p256_scalar_64.zig                                   |   0m02.73s |   61128 ko ||    +0m11.71s ||      6144 ko |   +429.30% |        +10.05%
   0m14.25s |   62036 ko | fiat-rust/src/p256_scalar_64.rs                                   |   0m02.73s |   59396 ko ||    +0m11.51s ||      2640 ko |   +421.97% |         +4.44%
   0m14.21s |   72352 ko | fiat-json/src/secp256k1_montgomery_scalar_64.json                 |   0m02.82s |   70904 ko ||    +0m11.39s ||      1448 ko |   +403.90% |         +2.04%
   0m14.16s |   62316 ko | fiat-c/src/secp256k1_montgomery_scalar_64.c                       |   0m02.69s |   61008 ko ||    +0m11.47s ||      1308 ko |   +426.39% |         +2.14%
   0m14.02s |   72660 ko | fiat-json/src/p256_scalar_64.json                                 |   0m02.79s |   73116 ko ||    +0m11.23s ||      -456 ko |   +402.50% |         -0.62%
   0m14.01s |   61848 ko | fiat-c/src/p256_scalar_64.c                                       |   0m02.67s |   61148 ko ||    +0m11.33s ||       700 ko |   +424.71% |         +1.14%
   0m13.61s |   67516 ko | fiat-go/64/p256scalar/p256scalar.go                               |   0m02.75s |   71172 ko ||    +0m10.85s ||     -3656 ko |   +394.90% |         -5.13%
   0m13.51s |   85796 ko | fiat-bedrock2/src/p256_scalar_64.c                                |   0m02.80s |   84480 ko ||    +0m10.71s ||      1316 ko |   +382.50% |         +1.55%
   0m13.33s |   66312 ko | fiat-go/64/secp256k1montgomeryscalar/secp256k1montgomeryscalar.go |   0m02.77s |   62180 ko ||    +0m10.56s ||      4132 ko |   +381.22% |         +6.64%
   0m13.20s |   88340 ko | fiat-bedrock2/src/secp256k1_montgomery_scalar_64.c                |   0m02.79s |   84980 ko ||    +0m10.41s ||      3360 ko |   +373.11% |         +3.95%
   0m13.16s |   70728 ko | fiat-json/src/secp256k1_montgomery_64.json                        |   0m02.49s |   75256 ko ||    +0m10.67s ||     -4528 ko |   +428.51% |         -6.01%
   0m12.74s |   65292 ko | fiat-zig/src/secp256k1_montgomery_64.zig                          |   0m02.42s |   59724 ko ||    +0m10.32s ||      5568 ko |   +426.44% |         +9.32%
   0m12.72s |   60072 ko | fiat-zig/src/curve25519_scalar_64.zig                             |   0m02.33s |   55908 ko ||    +0m10.39s ||      4164 ko |   +445.92% |         +7.44%
   0m12.66s |   61844 ko | fiat-rust/src/secp256k1_montgomery_64.rs                          |   0m02.44s |   64784 ko ||    +0m10.22s ||     -2940 ko |   +418.85% |         -4.53%
   0m44.36s |   60596 ko | fiat-zig/src/p521_32.zig                                          |   0m34.44s |   60684 ko ||    +0m09.92s ||       -88 ko |    +28.80% |         -0.14%
   0m44.26s |  112564 ko | fiat-json/src/p521_32.json                                        |   0m34.64s |  106924 ko ||    +0m09.61s ||      5640 ko |    +27.77% |         +5.27%
   0m44.00s |   64936 ko | fiat-java/src/FiatP521.java                                       |   0m34.40s |   59656 ko ||    +0m09.60s ||      5280 ko |    +27.90% |         +8.85%
   0m12.18s |   66900 ko | fiat-rust/src/curve25519_scalar_64.rs                             |   0m02.32s |   60304 ko ||    +0m09.85s ||      6596 ko |   +425.00% |        +10.93%
   0m12.07s |   67140 ko | fiat-c/src/secp256k1_montgomery_64.c                              |   0m02.43s |   59524 ko ||    +0m09.64s ||      7616 ko |   +396.70% |        +12.79%
   0m12.06s |   60364 ko | fiat-c/src/curve25519_scalar_64.c                                 |   0m02.27s |   60644 ko ||    +0m09.79s ||      -280 ko |   +431.27% |         -0.46%
   0m12.03s |   68432 ko | fiat-json/src/curve25519_scalar_64.json                           |   0m02.36s |   67732 ko ||    +0m09.67s ||       700 ko |   +409.74% |         +1.03%
   0m11.92s |   84348 ko | fiat-bedrock2/src/secp256k1_montgomery_64.c                       |   0m02.45s |   88860 ko ||    +0m09.46s ||     -4512 ko |   +386.53% |         -5.07%
   0m11.92s |   67724 ko | fiat-go/64/secp256k1montgomery/secp256k1montgomery.go             |   0m02.52s |   71412 ko ||    +0m09.40s ||     -3688 ko |   +373.01% |         -5.16%
   0m11.58s |   64176 ko | fiat-go/64/curve25519scalar/curve25519scalar.go                   |   0m02.32s |   67952 ko ||    +0m09.25s ||     -3776 ko |   +399.13% |         -5.55%
   0m11.37s |   84500 ko | fiat-bedrock2/src/curve25519_scalar_64.c                          |   0m02.28s |   80992 ko ||    +0m09.08s ||      3508 ko |   +398.68% |         +4.33%
   0m10.91s |   60548 ko | fiat-c/src/p224_64.c                                              |   0m01.82s |   61764 ko ||    +0m09.08s ||     -1216 ko |   +499.45% |         -1.96%
   0m10.82s |   65748 ko | fiat-zig/src/p224_64.zig                                          |   0m01.84s |   62532 ko ||    +0m08.98s ||      3216 ko |   +488.04% |         +5.14%
   0m10.55s |   60692 ko | fiat-rust/src/p224_64.rs                                          |   0m01.84s |   61180 ko ||    +0m08.71s ||      -488 ko |   +473.36% |         -0.79%
   0m10.52s |   73812 ko | fiat-json/src/p224_64.json                                        |   0m01.88s |   70604 ko ||    +0m08.64s ||      3208 ko |   +459.57% |         +4.54%
   0m10.37s |   64696 ko | fiat-go/64/p224/p224.go                                           |   0m01.92s |   62144 ko ||    +0m08.44s ||      2552 ko |   +440.10% |         +4.10%
   0m10.11s |   83476 ko | fiat-bedrock2/src/p224_64.c                                       |   0m01.91s |   80568 ko ||    +0m08.19s ||      2908 ko |   +429.31% |         +3.60%
   0m15.25s |  124888 ko | fiat-json/src/p448_solinas_32.json                                |   0m08.23s |  116848 ko ||    +0m07.01s ||      8040 ko |    +85.29% |         +6.88%
   0m09.70s |   75056 ko | fiat-json/src/p256_64.json                                        |   0m01.88s |   66596 ko ||    +0m07.81s ||      8460 ko |   +415.95% |        +12.70%
   0m09.59s |   61964 ko | fiat-zig/src/p256_64.zig                                          |   0m01.79s |   58052 ko ||    +0m07.79s ||      3912 ko |   +435.75% |         +6.73%
   0m09.50s |   82532 ko | fiat-bedrock2/src/p256_64.c                                       |   0m01.84s |   77096 ko ||    +0m07.66s ||      5436 ko |   +416.30% |         +7.05%
   0m09.43s |   61676 ko | fiat-rust/src/p256_64.rs                                          |   0m01.80s |   59200 ko ||    +0m07.62s ||      2476 ko |   +423.88% |         +4.18%
   0m09.40s |   65020 ko | fiat-go/64/p256/p256.go                                           |   0m01.84s |   68656 ko ||    +0m07.56s ||     -3636 ko |   +410.86% |         -5.29%
   0m08.91s |   65360 ko | fiat-c/src/p256_64.c                                              |   0m01.74s |   61792 ko ||    +0m07.16s ||      3568 ko |   +412.06% |         +5.77%
   0m14.66s |   59488 ko | fiat-zig/src/p448_solinas_32.zig                                  |   0m08.21s |   58580 ko ||    +0m06.44s ||       908 ko |    +78.56% |         +1.55%
   0m14.42s |   60808 ko | fiat-rust/src/p448_solinas_32.rs                                  |   0m08.12s |   57972 ko ||    +0m06.30s ||      2836 ko |    +77.58% |         +4.89%
   0m43.35s |   62524 ko | fiat-rust/src/p521_32.rs                                          |   0m38.15s |   60356 ko ||    +0m05.20s ||      2168 ko |    +13.63% |         +3.59%
   0m42.96s |  148852 ko | fiat-bedrock2/src/p521_32.c                                       |   0m38.63s |  145628 ko ||    +0m04.32s ||      3224 ko |    +11.20% |         +2.21%
   0m42.44s |   63004 ko | fiat-c/src/p521_32.c                                              |   0m37.82s |   59428 ko ||    +0m04.61s ||      3576 ko |    +12.21% |         +6.01%
   0m12.71s |   60360 ko | fiat-c/src/p448_solinas_32.c                                      |   0m08.16s |   58932 ko ||    +0m04.55s ||      1428 ko |    +55.75% |         +2.42%
   1m51.21s | 2339376 ko | Fancy/Barrett256.vo                                               |   1m48.02s | 2417076 ko ||    +0m03.18s ||    -77700 ko |     +2.95% |         -3.21%
   0m49.17s | 1960112 ko | Fancy/Montgomery256.vo                                            |   0m46.03s | 1758768 ko ||    +0m03.14s ||    201344 ko |     +6.82% |        +11.44%
   0m39.42s | 1319164 ko | Bedrock/End2End/X25519/GarageDoorTop.vo                           |   0m36.42s | 1319624 ko ||    +0m03.00s ||      -460 ko |     +8.23% |         -0.03%
    N/A     |    N/A     | Bedrock/Everything.vo                                             |   0m03.96s | 1502884 ko ||    -0m03.96s ||  -1502884 ko |   -100.00% |       -100.00%
    N/A     |    N/A     | Everything.vo                                                     |   0m03.45s | 1363476 ko ||    -0m03.45s ||  -1363476 ko |   -100.00% |       -100.00%
    N/A     |    N/A     | PerfTesting/PerfTestPrint.vo                                      |   0m02.94s | 1346788 ko ||    -0m02.94s ||  -1346788 ko |   -100.00% |       -100.00%
   3m59.87s | 2553740 ko | Assembly/WithBedrock/Proofs.vo                                    |   4m01.45s | 2553452 ko ||    -0m01.57s ||       288 ko |     -0.65% |         +0.01%
   1m54.05s | 1916900 ko | Bedrock/End2End/X25519/AddPrecomputed.vo                          |   1m52.31s | 1916820 ko ||    +0m01.73s ||        80 ko |     +1.54% |         +0.00%
   0m43.02s |   64392 ko | fiat-go/32/p521/p521.go                                           |   0m41.64s |   61532 ko ||    +0m01.38s ||      2860 ko |     +3.31% |         +4.64%
   0m38.48s | 2146800 ko | ExtractionOCaml/word_by_word_montgomery                           |   0m40.27s | 2146720 ko ||    -0m01.79s ||        80 ko |     -4.44% |         +0.00%
   0m37.41s | 1617480 ko | ExtractionOCaml/bedrock2_base_conversion                          |   0m36.32s | 1620388 ko ||    +0m01.08s ||     -2908 ko |     +3.00% |         -0.17%
   0m34.27s | 1554400 ko | ExtractionOCaml/dettman_multiplication                            |   0m35.58s | 1556408 ko ||    -0m01.30s ||     -2008 ko |     -3.68% |         -0.12%
   0m33.95s | 1537192 ko | ExtractionOCaml/saturated_solinas                                 |   0m35.03s | 1536764 ko ||    -0m01.07s ||       428 ko |     -3.08% |         +0.02%
   0m33.09s | 1531652 ko | ExtractionOCaml/base_conversion                                   |   0m34.83s | 1534488 ko ||    -0m01.73s ||     -2836 ko |     -4.99% |         -0.18%
   0m18.85s | 1135808 ko | Bedrock/End2End/Poly1305/Field1305.vo                             |   0m17.21s | 1129728 ko ||    +0m01.64s ||      6080 ko |     +9.52% |         +0.53%
   0m06.04s |   52332 ko | fiat-json/src/p521_64.json                                        |   0m04.95s |   50248 ko ||    +0m01.08s ||      2084 ko |    +22.02% |         +4.14%
   0m05.99s |   37064 ko | fiat-zig/src/p521_64.zig                                          |   0m04.90s |   36028 ko ||    +0m01.08s ||      1036 ko |    +22.24% |         +2.87%
   3m13.72s | 2603328 ko | Bedrock/End2End/RupicolaCrypto/ChaCha20.vo                        |   3m12.79s | 2602764 ko ||    +0m00.93s ||       564 ko |     +0.48% |         +0.02%
   1m20.21s | 1524980 ko | Assembly/EquivalenceProofs.vo                                     |   1m19.93s | 1530348 ko ||    +0m00.28s ||     -5368 ko |     +0.35% |         -0.35%
   1m08.96s | 1437312 ko | Assembly/WithBedrock/SymbolicProofs.vo                            |   1m09.05s | 1433128 ko ||    -0m00.08s ||      4184 ko |     -0.13% |         +0.29%
   0m52.36s |  849360 ko | AbstractInterpretation/ZRangeProofs.vo                            |   0m52.56s |  848576 ko ||    -0m00.20s ||       784 ko |     -0.38% |         +0.09%
   0m47.18s | 1522816 ko | Assembly/Symbolic.vo                                              |   0m46.85s | 1519280 ko ||    +0m00.32s ||      3536 ko |     +0.70% |         +0.23%
   0m45.33s | 1104720 ko | Bedrock/Field/Translation/Proofs/ValidComputable/Expr.vo          |   0m45.27s | 1102688 ko ||    +0m00.05s ||      2032 ko |     +0.13% |         +0.18%
   0m44.21s | 2147564 ko | ExtractionOCaml/bedrock2_solinas_reduction                        |   0m43.87s | 2147536 ko ||    +0m00.34s ||        28 ko |     +0.77% |         +0.00%
   0m43.12s | 2147892 ko | ExtractionOCaml/with_bedrock2_word_by_word_montgomery             |   0m42.35s | 2147764 ko ||    +0m00.76s ||       128 ko |     +1.81% |         +0.00%
   0m42.80s | 2147776 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery                  |   0m42.72s | 2147720 ko ||    +0m00.07s ||        56 ko |     +0.18% |         +0.00%
   0m41.90s | 2146676 ko | ExtractionOCaml/solinas_reduction                                 |   0m40.99s | 2146676 ko ||    +0m00.90s ||         0 ko |     +2.22% |         +0.00%
   0m41.07s | 2148200 ko | ExtractionOCaml/bedrock2_unsaturated_solinas                      |   0m41.03s | 2148284 ko ||    +0m00.03s ||       -84 ko |     +0.09% |         -0.00%
   0m41.02s | 2148244 ko | ExtractionOCaml/with_bedrock2_unsaturated_solinas                 |   0m40.67s | 2148388 ko ||    +0m00.35s ||      -144 ko |     +0.86% |         -0.00%
   0m38.93s | 1016196 ko | Bedrock/Group/ScalarMult/MontgomeryLadder.vo                      |   0m38.63s | 1016156 ko ||    +0m00.29s ||        40 ko |     +0.77% |         +0.00%
   0m38.12s | 1640756 ko | ExtractionOCaml/bedrock2_dettman_multiplication                   |   0m38.27s | 1642204 ko ||    -0m00.15s ||     -1448 ko |     -0.39% |         -0.08%
   0m37.73s | 1623836 ko | ExtractionOCaml/unsaturated_solinas                               |   0m36.98s | 1653884 ko ||    +0m00.75s ||    -30048 ko |     +2.02% |         -1.81%
   0m37.59s | 1621000 ko | ExtractionOCaml/with_bedrock2_dettman_multiplication              |   0m37.00s | 1623732 ko ||    +0m00.59s ||     -2732 ko |     +1.59% |         -0.16%
   0m37.56s | 1622616 ko | ExtractionOCaml/bedrock2_saturated_solinas                        |   0m37.36s | 1622804 ko ||    +0m00.20s ||      -188 ko |     +0.53% |         -0.01%
   0m37.50s | 1621644 ko | ExtractionOCaml/with_bedrock2_solinas_reduction                   |   0m36.64s | 1624384 ko ||    +0m00.85s ||     -2740 ko |     +2.34% |         -0.16%
   0m37.48s | 1621204 ko | ExtractionOCaml/with_bedrock2_saturated_solinas                   |   0m36.73s | 1622828 ko ||    +0m00.75s ||     -1624 ko |     +2.04% |         -0.10%
   0m37.41s | 1617420 ko | ExtractionOCaml/with_bedrock2_base_conversion                     |   0m36.52s | 1618732 ko ||    +0m00.88s ||     -1312 ko |     +2.43% |         -0.08%
   0m34.91s | 1279244 ko | Bedrock/End2End/X25519/MontgomeryLadder.vo                        |   0m34.52s | 1284212 ko ||    +0m00.38s ||     -4968 ko |     +1.12% |         -0.38%
   0m34.14s | 2240972 ko | ExtractionOCaml/bedrock2_solinas_reduction.ml                     |   0m34.09s | 2237916 ko ||    +0m00.04s ||      3056 ko |     +0.14% |         +0.13%
   0m33.11s | 2212924 ko | ExtractionOCaml/with_bedrock2_word_by_word_montgomery.ml          |   0m33.05s | 2204728 ko ||    +0m00.06s ||      8196 ko |     +0.18% |         +0.37%
   0m33.01s | 2213528 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery.ml               |   0m33.12s | 2204912 ko ||    -0m00.10s ||      8616 ko |     -0.33% |         +0.39%
   0m32.68s | 2150644 ko | ExtractionOCaml/solinas_reduction.ml                              |   0m32.56s | 2139728 ko ||    +0m00.11s ||     10916 ko |     +0.36% |         +0.51%
   0m31.47s | 2122940 ko | ExtractionOCaml/word_by_word_montgomery.ml                        |   0m31.58s | 2120080 ko ||    -0m00.10s ||      2860 ko |     -0.34% |         +0.13%
   0m30.56s | 2114916 ko | ExtractionOCaml/bedrock2_unsaturated_solinas.ml                   |   0m30.25s | 2134076 ko ||    +0m00.30s ||    -19160 ko |     +1.02% |         -0.89%
   0m30.28s | 1232236 ko | ExtractionOCaml/perf_word_by_word_montgomery                      |   0m29.68s | 1232100 ko ||    +0m00.60s ||       136 ko |     +2.02% |         +0.01%
   0m30.23s | 1232188 ko | ExtractionOCaml/perf_unsaturated_solinas                          |   0m29.28s | 1232224 ko ||    +0m00.94s ||       -36 ko |     +3.24% |         -0.00%
   0m30.11s | 2114248 ko | ExtractionOCaml/with_bedrock2_unsaturated_solinas.ml              |   0m30.11s | 2132752 ko ||    +0m00.00s ||    -18504 ko |     +0.00% |         -0.86%
   0m29.92s | 1526264 ko | StandaloneDebuggingExamples.vo                                    |   0m30.25s | 1518384 ko ||    -0m00.32s ||      7880 ko |     -1.09% |         +0.51%
   0m28.53s | 2051912 ko | ExtractionOCaml/unsaturated_solinas.ml                            |   0m28.57s | 2032036 ko ||    -0m00.03s ||     19876 ko |     -0.14% |         +0.97%
   0m27.17s | 2040956 ko | ExtractionOCaml/bedrock2_dettman_multiplication.ml                |   0m27.20s | 2071528 ko ||    -0m00.02s ||    -30572 ko |     -0.11% |         -1.47%
   0m26.36s | 2009348 ko | ExtractionOCaml/with_bedrock2_base_conversion.ml                  |   0m26.30s | 2038044 ko ||    +0m00.05s ||    -28696 ko |     +0.22% |         -1.40%
   0m26.34s | 2019688 ko | ExtractionOCaml/with_bedrock2_saturated_solinas.ml                |   0m26.08s | 1996180 ko ||    +0m00.26s ||     23508 ko |     +0.99% |         +1.17%
   0m26.32s | 2018796 ko | ExtractionOCaml/bedrock2_saturated_solinas.ml                     |   0m26.30s | 1997428 ko ||    +0m00.01s ||     21368 ko |     +0.07% |         +1.06%
   0m26.18s | 2009056 ko | ExtractionOCaml/bedrock2_base_conversion.ml                       |   0m26.28s | 2037624 ko ||    -0m00.10s ||    -28568 ko |     -0.38% |         -1.40%
   0m26.13s | 2019564 ko | ExtractionOCaml/with_bedrock2_solinas_reduction.ml                |   0m26.06s | 1996408 ko ||    +0m00.07s ||     23156 ko |     +0.26% |         +1.15%
   0m26.05s | 2016864 ko | ExtractionOCaml/with_bedrock2_dettman_multiplication.ml           |   0m25.95s | 1997412 ko ||    +0m00.10s ||     19452 ko |     +0.38% |         +0.97%
   0m25.24s | 1952220 ko | ExtractionOCaml/dettman_multiplication.ml                         |   0m25.47s | 1939744 ko ||    -0m00.23s ||     12476 ko |     -0.90% |         +0.64%
   0m24.71s | 1944464 ko | ExtractionOCaml/saturated_solinas.ml                              |   0m24.58s | 1934196 ko ||    +0m00.13s ||     10268 ko |     +0.52% |         +0.53%
   0m24.68s | 1914120 ko | ExtractionOCaml/base_conversion.ml                                |   0m25.18s | 1922504 ko ||    -0m00.50s ||     -8384 ko |     -1.98% |         -0.43%
   0m23.73s | 1184052 ko | PushButtonSynthesis/UnsaturatedSolinas.vo                         |   0m23.70s | 1185516 ko ||    +0m00.03s ||     -1464 ko |     +0.12% |         -0.12%
   0m21.52s | 1354084 ko | Bedrock/End2End/RupicolaCrypto/Low.vo                             |   0m21.31s | 1350968 ko ||    +0m00.21s ||      3116 ko |     +0.98% |         +0.23%
   0m20.49s | 1158932 ko | PushButtonSynthesis/WordByWordMontgomery.vo                       |   0m20.38s | 1160828 ko ||    +0m00.10s ||     -1896 ko |     +0.53% |         -0.16%
   0m20.15s |  794468 ko | Bedrock/Field/Translation/Proofs/Expr.vo                          |   0m20.23s |  794720 ko ||    -0m00.08s ||      -252 ko |     -0.39% |         -0.03%
   0m18.98s | 1821220 ko | ExtractionOCaml/perf_unsaturated_solinas.ml                       |   0m18.91s | 1826352 ko ||    +0m00.07s ||     -5132 ko |     +0.37% |         -0.28%
   0m18.80s | 1843872 ko | ExtractionOCaml/perf_word_by_word_montgomery.ml                   |   0m18.84s | 1867344 ko ||    -0m00.03s ||    -23472 ko |     -0.21% |         -1.25%
   0m18.64s |  737284 ko | Bedrock/Field/Translation/Proofs/LoadStoreList.vo                 |   0m18.64s |  740312 ko ||    +0m00.00s ||     -3028 ko |     +0.00% |         -0.40%
   0m18.55s | 1128568 ko | Bedrock/Field/Translation/Proofs/Func.vo                          |   0m18.89s | 1129264 ko ||    -0m00.33s ||      -696 ko |     -1.79% |         -0.06%
   0m17.93s | 1207216 ko | Bedrock/Field/Synthesis/New/Signature.vo                          |   0m17.32s | 1210248 ko ||    +0m00.60s ||     -3032 ko |     +3.52% |         -0.25%
   0m16.37s | 1144804 ko | Bedrock/Field/Translation/Proofs/Cmd.vo                           |   0m17.11s | 1146536 ko ||    -0m00.73s ||     -1732 ko |     -4.32% |         -0.15%
   0m16.36s | 2063348 ko | ExtractionHaskell/with_bedrock2_solinas_reduction.hs              |   0m16.35s | 2096996 ko ||    +0m00.00s ||    -33648 ko |     +0.06% |         -1.60%
   0m16.26s | 2063264 ko | ExtractionHaskell/bedrock2_solinas_reduction.hs                   |   0m16.52s | 2095492 ko ||    -0m00.25s ||    -32228 ko |     -1.57% |         -1.53%
   0m16.16s | 2023412 ko | ExtractionHaskell/with_bedrock2_word_by_word_montgomery.hs        |   0m16.00s | 2007884 ko ||    +0m00.16s ||     15528 ko |     +1.00% |         +0.77%
   0m16.12s | 2021956 ko | ExtractionHaskell/bedrock2_word_by_word_montgomery.hs             |   0m16.13s | 2010240 ko ||    -0m00.00s ||     11716 ko |     -0.06% |         +0.58%
   0m16.08s | 2028764 ko | ExtractionHaskell/solinas_reduction.hs                            |   0m15.49s | 1949544 ko ||    +0m00.58s ||     79220 ko |     +3.80% |         +4.06%
   0m15.71s | 1962892 ko | ExtractionHaskell/word_by_word_montgomery.hs                      |   0m15.47s | 1985472 ko ||    +0m00.24s ||    -22580 ko |     +1.55% |         -1.13%
   0m15.59s | 2009872 ko | ExtractionHaskell/bedrock2_unsaturated_solinas.hs                 |   0m15.14s | 1950900 ko ||    +0m00.44s ||     58972 ko |     +2.97% |         +3.02%
   0m15.21s | 2008904 ko | ExtractionHaskell/with_bedrock2_unsaturated_solinas.hs            |   0m15.24s | 1949824 ko ||    -0m00.02s ||     59080 ko |     -0.19% |         +3.03%
   0m14.63s | 1934444 ko | ExtractionHaskell/bedrock2_saturated_solinas.hs                   |   0m14.22s | 1862544 ko ||    +0m00.41s ||     71900 ko |     +2.88% |         +3.86%
   0m14.47s | 1879068 ko | ExtractionHaskell/bedrock2_dettman_multiplication.hs              |   0m14.36s | 1889216 ko ||    +0m00.11s ||    -10148 ko |     +0.76% |         -0.53%
   0m14.38s | 1879364 ko | ExtractionHaskell/with_bedrock2_dettman_multiplication.hs         |   0m14.28s | 1886884 ko ||    +0m00.10s ||     -7520 ko |     +0.70% |         -0.39%
   0m14.37s | 1927472 ko | ExtractionHaskell/unsaturated_solinas.hs                          |   0m14.53s | 1928704 ko ||    -0m00.16s ||     -1232 ko |     -1.10% |         -0.06%
   0m14.32s | 1917200 ko | ExtractionHaskell/with_bedrock2_base_conversion.hs                |   0m14.11s | 1932764 ko ||    +0m00.21s ||    -15564 ko |     +1.48% |         -0.80%
   0m14.30s | 1935052 ko | ExtractionHaskell/with_bedrock2_saturated_solinas.hs              |   0m14.12s | 1861568 ko ||    +0m00.18s ||     73484 ko |     +1.27% |         +3.94%
   0m14.20s | 1917124 ko | ExtractionHaskell/bedrock2_base_conversion.hs                     |   0m14.22s | 1911084 ko ||    -0m00.02s ||      6040 ko |     -0.14% |         +0.31%
   0m14.06s | 1864296 ko | ExtractionHaskell/dettman_multiplication.hs                       |   0m13.20s | 1856724 ko ||    +0m00.86s ||      7572 ko |     +6.51% |         +0.40%
   0m13.78s | 1840872 ko | ExtractionHaskell/saturated_solinas.hs                            |   0m13.71s | 1846748 ko ||    +0m00.06s ||     -5876 ko |     +0.51% |         -0.31%
   0m13.68s |  602488 ko | Bedrock/Field/Common/Util.vo                                      |   0m13.68s |  602420 ko ||    +0m00.00s ||        68 ko |     +0.00% |         +0.01%
   0m13.36s |  663048 ko | Bedrock/Group/AdditionChains.vo                                   |   0m13.42s |  662928 ko ||    -0m00.06s ||       120 ko |     -0.44% |         +0.01%
   0m13.12s |  667092 ko | Bedrock/Group/ScalarMult/LadderStep.vo                            |   0m13.04s |  667048 ko ||    +0m00.08s ||        44 ko |     +0.61% |         +0.00%
   0m13.11s | 1845960 ko | ExtractionHaskell/base_conversion.hs                              |   0m13.55s | 1851580 ko ||    -0m00.44s ||     -5620 ko |     -3.24% |         -0.30%
   0m11.84s | 1029560 ko | BoundsPipeline.vo                                                 |   0m11.88s | 1028872 ko ||    -0m00.04s ||       688 ko |     -0.33% |         +0.06%
   0m11.31s | 1699940 ko | Bedrock/Field/Synthesis/New/WordByWordMontgomery.vo               |   0m11.11s | 1698268 ko ||    +0m00.20s ||      1672 ko |     +1.80% |         +0.09%
   0m10.27s | 1297740 ko | Bedrock/End2End/X25519/MontgomeryLadderProperties.vo              |   0m10.36s | 1296660 ko ||    -0m00.08s ||      1080 ko |     -0.86% |         +0.08%
   0m09.88s |  600056 ko | Stringification/IR.vo                                             |   0m09.90s |  601448 ko ||    -0m00.01s ||     -1392 ko |     -0.20% |         -0.23%
   0m09.74s |  624024 ko | Bedrock/Field/Translation/Proofs/Flatten.vo                       |   0m09.73s |  624068 ko ||    +0m00.00s ||       -44 ko |     +0.10% |         -0.00%
   0m09.34s | 1032068 ko | PushButtonSynthesis/BaseConversion.vo                             |   0m09.37s | 1035460 ko ||    -0m00.02s ||     -3392 ko |     -0.32% |         -0.32%
   0m09.19s |  661364 ko | Bedrock/Group/ScalarMult/CSwap.vo                                 |   0m08.96s |  661296 ko ||    +0m00.22s ||        68 ko |     +2.56% |         +0.01%
   0m08.41s | 1044384 ko | PushButtonSynthesis/Primitives.vo                                 |   0m08.56s | 1045468 ko ||    -0m00.15s ||     -1084 ko |     -1.75% |         -0.10%
   0m08.33s | 1000952 ko | PushButtonSynthesis/SmallExamples.vo                              |   0m08.13s | 1001028 ko ||    +0m00.19s ||       -76 ko |     +2.46% |         -0.00%
   0m07.39s |  911356 ko | Bedrock/Field/Translation/Proofs/EquivalenceProperties.vo         |   0m07.43s |  912204 ko ||    -0m00.04s ||      -848 ko |     -0.53% |         -0.09%
   0m07.17s | 1033520 ko | PushButtonSynthesis/SolinasReduction.vo                           |   0m07.24s | 1033476 ko ||    -0m00.07s ||        44 ko |     -0.96% |         +0.00%
   0m06.67s |   51208 ko | fiat-go/64/p521/p521.go                                           |   0m06.32s |   49224 ko ||    +0m00.34s ||      1984 ko |     +5.53% |         +4.03%
   0m06.40s | 1040660 ko | PushButtonSynthesis/BarrettReduction.vo                           |   0m06.42s | 1041508 ko ||    -0m00.01s ||      -848 ko |     -0.31% |         -0.08%
   0m06.27s | 1121320 ko | CLI.vo                                                            |   0m06.40s | 1121288 ko ||    -0m00.13s ||        32 ko |     -2.03% |         +0.00%
   0m05.98s | 1130956 ko | Bedrock/Field/Synthesis/New/UnsaturatedSolinas.vo                 |   0m06.11s | 1130988 ko ||    -0m00.12s ||       -32 ko |     -2.12% |         -0.00%
   0m05.92s |   68612 ko | fiat-bedrock2/src/p521_64.c                                       |   0m04.98s |   66368 ko ||    +0m00.93s ||      2244 ko |    +18.87% |         +3.38%
   0m05.90s |   37028 ko | fiat-rust/src/p521_64.rs                                          |   0m05.46s |   36076 ko ||    +0m00.44s ||       952 ko |     +8.05% |         +2.63%
   0m05.87s |   37052 ko | fiat-c/src/p521_64.c                                              |   0m05.41s |   36076 ko ||    +0m00.46s ||       976 ko |     +8.50% |         +2.70%
   0m05.84s |  906864 ko | Bedrock/Field/Translation/Proofs/UsedVarnames.vo                  |   0m05.81s |  906744 ko ||    +0m00.03s ||       120 ko |     +0.51% |         +0.01%
   0m05.25s |  616380 ko | Bedrock/End2End/RupicolaCrypto/Broadcast.vo                       |   0m05.24s |  616216 ko ||    +0m00.00s ||       164 ko |     +0.19% |         +0.02%
   0m04.73s | 1030392 ko | PushButtonSynthesis/DettmanMultiplication.vo                      |   0m04.78s | 1030456 ko ||    -0m00.04s ||       -64 ko |     -1.04% |         -0.00%
   0m04.41s | 1065452 ko | Bedrock/Field/Translation/Proofs/ValidComputable/Cmd.vo           |   0m04.56s | 1065272 ko ||    -0m00.14s ||       180 ko |     -3.28% |         +0.01%
   0m04.39s | 1038800 ko | PushButtonSynthesis/SaturatedSolinas.vo                           |   0m04.43s | 1038816 ko ||    -0m00.04s ||       -16 ko |     -0.90% |         -0.00%
   0m03.94s |  957224 ko | Assembly/Equivalence.vo                                           |   0m03.88s |  955376 ko ||    +0m00.06s ||      1848 ko |     +1.54% |         +0.19%
   0m03.84s | 1051032 ko | PushButtonSynthesis/FancyMontgomeryReduction.vo                   |   0m03.94s | 1051128 ko ||    -0m00.10s ||       -96 ko |     -2.53% |         -0.00%
   0m03.66s |  666368 ko | Bedrock/Group/ScalarMult/ScalarMult.vo                            |   0m03.97s |  667152 ko ||    -0m00.31s ||      -784 ko |     -7.80% |         -0.11%
   0m03.12s | 1072356 ko | Rewriter/PerfTesting/Core.vo                                      |   0m03.09s | 1072420 ko ||    +0m00.03s ||       -64 ko |     +0.97% |         -0.00%
   0m03.06s |  617024 ko | Bedrock/Field/Synthesis/Generic/Bignum.vo                         |   0m03.02s |  613720 ko ||    +0m00.04s ||      3304 ko |     +1.32% |         +0.53%
   0m03.05s | 1006464 ko | Bedrock/Field/Translation/Cmd.vo                                  |   0m03.08s | 1009700 ko ||    -0m00.03s ||     -3236 ko |     -0.97% |         -0.32%
   0m02.98s |   50852 ko | fiat-go/64/p448solinas/p448solinas.go                             |   0m02.67s |   50500 ko ||    +0m00.31s ||       352 ko |    +11.61% |         +0.69%
   0m02.88s | 1068264 ko | Bedrock/Field/Stringification/Stringification.vo                  |   0m02.87s | 1068932 ko ||    +0m00.00s ||      -668 ko |     +0.34% |         -0.06%
   0m02.84s | 1061220 ko | Bedrock/Field/Translation/Proofs/ValidComputable/Func.vo          |   0m02.73s | 1059288 ko ||    +0m00.10s ||      1932 ko |     +4.02% |         +0.18%
   0m02.80s | 1004228 ko | Bedrock/Field/Translation/Func.vo                                 |   0m02.79s | 1004848 ko ||    +0m00.00s ||      -620 ko |     +0.35% |         -0.06%
   0m02.80s | 1103608 ko | StandaloneHaskellMain.vo                                          |   0m02.72s | 1103504 ko ||    +0m00.07s ||       104 ko |     +2.94% |         +0.00%
   0m02.78s | 1145260 ko | Bedrock/Standalone/StandaloneHaskellMain.vo                       |   0m02.77s | 1145216 ko ||    +0m00.00s ||        44 ko |     +0.36% |         +0.00%
   0m02.76s | 1145200 ko | Bedrock/Standalone/StandaloneOCamlMain.vo                         |   0m02.72s | 1145392 ko ||    +0m00.03s ||      -192 ko |     +1.47% |         -0.01%
   0m02.76s | 1131284 ko | Rewriter/PerfTesting/StandaloneOCamlMain.vo                       |   0m02.73s | 1131224 ko ||    +0m00.02s ||        60 ko |     +1.09% |         +0.00%
   0m02.66s | 1103772 ko | StandaloneOCamlMain.vo                                            |   0m02.68s | 1103860 ko ||    -0m00.02s ||       -88 ko |     -0.74% |         -0.00%
   0m02.60s |  620876 ko | Bedrock/Field/Interface/Compilation2.vo                           |   0m02.60s |  621772 ko ||    +0m00.00s ||      -896 ko |     +0.00% |         -0.14%
   0m02.54s | 1064964 ko | Bedrock/Field/Synthesis/New/ComputedOp.vo                         |   0m02.59s | 1065008 ko ||    -0m00.04s ||       -44 ko |     -1.93% |         -0.00%
   0m02.53s |   65044 ko | fiat-bedrock2/src/p448_solinas_64.c                               |   0m02.07s |   66308 ko ||    +0m00.46s ||     -1264 ko |    +22.22% |         -1.90%
   0m02.52s |   35764 ko | fiat-zig/src/p448_solinas_64.zig                                  |   0m01.90s |   35084 ko ||    +0m00.62s ||       680 ko |    +32.63% |         +1.93%
   0m02.51s |   37100 ko | fiat-go/32/curve25519/curve25519.go                               |   0m02.15s |   35348 ko ||    +0m00.35s ||      1752 ko |    +16.74% |         +4.95%
   0m02.51s |   36324 ko | fiat-rust/src/p448_solinas_64.rs                                  |   0m01.97s |   34328 ko ||    +0m00.53s ||      1996 ko |    +27.41% |         +5.81%
   0m02.50s | 1044712 ko | Bedrock/Field/Translation/Parameters/Defaults32.vo                |   0m02.53s | 1045368 ko ||    -0m00.02s ||      -656 ko |     -1.18% |         -0.06%
   0m02.48s | 1041488 ko | Bedrock/Field/Translation/Parameters/Defaults.vo                  |   0m02.40s | 1040684 ko ||    +0m00.08s ||       804 ko |     +3.33% |         +0.07%
   0m02.48s | 1045392 ko | Bedrock/Field/Translation/Parameters/Defaults64.vo                |   0m02.56s | 1044600 ko ||    -0m00.08s ||       792 ko |     -3.12% |         +0.07%
   0m02.47s |   51164 ko | fiat-json/src/p448_solinas_64.json                                |   0m02.06s |   51416 ko ||    +0m00.41s ||      -252 ko |    +19.90% |         -0.49%
   0m02.45s |   36696 ko | fiat-c/src/p448_solinas_64.c                                      |   0m01.98s |   35380 ko ||    +0m00.47s ||      1316 ko |    +23.73% |         +3.71%
   0m02.44s | 1045352 ko | Bedrock/Field/Translation/Parameters/FE310.vo                     |   0m02.50s | 1045320 ko ||    -0m00.06s ||        32 ko |     -2.40% |         +0.00%
   0m02.24s |   63200 ko | fiat-bedrock2/src/curve25519_32.c                                 |   0m01.98s |   63640 ko ||    +0m00.26s ||      -440 ko |    +13.13% |         -0.69%
   0m02.18s |   35508 ko | fiat-java/src/FiatCurve25519.java                                 |   0m01.82s |   36520 ko ||    +0m00.36s ||     -1012 ko |    +19.78% |         -2.77%
   0m02.16s |   50436 ko | fiat-json/src/curve25519_32.json                                  |   0m01.89s |   49708 ko ||    +0m00.27s ||       728 ko |    +14.28% |         +1.46%
   0m02.15s |   34348 ko | fiat-zig/src/curve25519_32.zig                                    |   0m01.82s |   33388 ko ||    +0m00.32s ||       960 ko |    +18.13% |         +2.87%
   0m02.12s |   34960 ko | fiat-rust/src/curve25519_32.rs                                    |   0m01.79s |   34088 ko ||    +0m00.33s ||       872 ko |    +18.43% |         +2.55%
   0m02.10s |   35016 ko | fiat-c/src/curve25519_32.c                                        |   0m01.76s |   33112 ko ||    +0m00.34s ||      1904 ko |    +19.31% |         +5.75%
   0m01.96s |  616180 ko | Bedrock/Field/Common/Arrays/MakeAccessSizes.vo                    |   0m02.00s |  614096 ko ||    -0m00.04s ||      2084 ko |     -2.00% |         +0.33%
   0m01.78s |  636112 ko | Bedrock/Group/ScalarMult/MontgomeryEquivalence.vo                 |   0m01.82s |  636072 ko ||    -0m00.04s ||        40 ko |     -2.19% |         +0.00%
   0m01.62s |   52504 ko | fiat-bedrock2/src/secp256k1_dettman_32.c                          |   0m01.46s |   51924 ko ||    +0m00.16s ||       580 ko |    +10.95% |         +1.11%
   0m01.61s |  607916 ko | Bedrock/Field/Common/Names/MakeNames.vo                           |   0m01.62s |  607756 ko ||    -0m00.01s ||       160 ko |     -0.61% |         +0.02%
   0m01.53s |  590192 ko | CompilersTestCases.vo                                             |   0m01.48s |  590236 ko ||    +0m00.05s ||       -44 ko |     +3.37% |         -0.00%
   0m01.50s |  512068 ko | AbstractInterpretation/AbstractInterpretation.vo                  |   0m01.39s |  512000 ko ||    +0m00.11s ||        68 ko |     +7.91% |         +0.01%
   0m01.46s |   26680 ko | fiat-java/src/FiatSecp256K1Dettman.java                           |   0m01.24s |   26336 ko ||    +0m00.21s ||       344 ko |    +17.74% |         +1.30%
   0m01.46s |   42060 ko | fiat-json/src/secp256k1_dettman_32.json                           |   0m01.24s |   41136 ko ||    +0m00.21s ||       924 ko |    +17.74% |         +2.24%
   0m01.44s |   26260 ko | fiat-c/src/secp256k1_dettman_32.c                                 |   0m01.21s |   25744 ko ||    +0m00.23s ||       516 ko |    +19.00% |         +2.00%
   0m01.44s |   27956 ko | fiat-go/32/secp256k1dettman/secp256k1dettman.go                   |   0m01.21s |   25860 ko ||    +0m00.23s ||      2096 ko |    +19.00% |         +8.10%
   0m01.44s |   27096 ko | fiat-rust/src/secp256k1_dettman_32.rs                             |   0m01.22s |   25440 ko ||    +0m00.21s ||      1656 ko |    +18.03% |         +6.50%
   0m01.42s |   27060 ko | fiat-zig/src/secp256k1_dettman_32.zig                             |   0m01.23s |   25656 ko ||    +0m00.18s ||      1404 ko |    +15.44% |         +5.47%
   0m01.35s |  543324 ko | Stringification/Go.vo                                             |   0m01.35s |  541960 ko ||    +0m00.00s ||      1364 ko |     +0.00% |         +0.25%
   0m01.11s |  628136 ko | Bedrock/Specs/Field.vo                                            |   0m01.18s |  628700 ko ||    -0m00.06s ||      -564 ko |     -5.93% |         -0.08%
   0m01.07s |  609304 ko | Bedrock/Field/Common/Arrays/MaxBounds.vo                          |   0m01.03s |  607272 ko ||    +0m00.04s ||      2032 ko |     +3.88% |         +0.33%
   0m01.06s |  601084 ko | Bedrock/Field/Common/Arrays/ByteBounds.vo                         |   0m01.00s |  602440 ko ||    +0m00.06s ||     -1356 ko |     +6.00% |         -0.22%
   0m00.94s |  538600 ko | Stringification/C.vo                                              |   0m00.91s |  538560 ko ||    +0m00.02s ||        40 ko |     +3.29% |         +0.00%
   0m00.91s |  535844 ko | Stringification/JSON.vo                                           |   0m00.94s |  537144 ko ||    -0m00.02s ||     -1300 ko |     -3.19% |         -0.24%
   0m00.88s |  535936 ko | Stringification/Zig.vo                                            |   0m00.88s |  539224 ko ||    +0m00.00s ||     -3288 ko |     +0.00% |         -0.60%
   0m00.87s |  618888 ko | Bedrock/Group/Point.vo                                            |   0m00.89s |  617632 ko ||    -0m00.02s ||      1256 ko |     -2.24% |         +0.20%
   0m00.86s |  615616 ko | Bedrock/Field/Interface/Representation.vo                         |   0m00.84s |  615736 ko ||    +0m00.02s ||      -120 ko |     +2.38% |         -0.01%
   0m00.86s |  534896 ko | Stringification/Java.vo                                           |   0m00.84s |  538936 ko ||    +0m00.02s ||     -4040 ko |     +2.38% |         -0.74%
   0m00.80s |  535916 ko | Stringification/Rust.vo                                           |   0m00.83s |  535824 ko ||    -0m00.02s ||        92 ko |     -3.61% |         +0.01%
   0m00.79s |  587772 ko | Bedrock/Field/Common/Tactics.vo                                   |   0m00.78s |  587592 ko ||    +0m00.01s ||       180 ko |     +1.28% |         +0.03%
   0m00.72s |  521776 ko | Bedrock/Field/Common/Arrays/MakeListLengths.vo                    |   0m00.68s |  523076 ko ||    +0m00.03s ||     -1300 ko |     +5.88% |         -0.24%
   0m00.72s |  546832 ko | Bedrock/Field/Stringification/FlattenVarData.vo                   |   0m00.72s |  546004 ko ||    +0m00.00s ||       828 ko |     +0.00% |         +0.15%
   0m00.70s |   32124 ko | fiat-go/64/curve25519/curve25519.go                               |   0m00.63s |   32976 ko ||    +0m00.06s ||      -852 ko |    +11.11% |         -2.58%
   0m00.68s |  515488 ko | AbstractInterpretation/WfExtra.vo                                 |   0m00.63s |  515492 ko ||    +0m00.05s ||        -4 ko |     +7.93% |         -0.00%
   0m00.68s |   38372 ko | fiat-json/src/curve25519_solinas_64.json                          |   0m00.41s |   39308 ko ||    +0m00.27s ||      -936 ko |    +65.85% |         -2.38%
   0m00.67s |   38908 ko | fiat-c/src/curve25519_solinas_64.c                                |   0m00.41s |   36728 ko ||    +0m00.26s ||      2180 ko |    +63.41% |         +5.93%
   0m00.66s |   37132 ko | fiat-rust/src/curve25519_solinas_64.rs                            |   0m00.39s |   36260 ko ||    +0m00.27s ||       872 ko |    +69.23% |         +2.40%
   0m00.66s |   36892 ko | fiat-zig/src/curve25519_solinas_64.zig                            |   0m00.42s |   36336 ko ||    +0m00.24s ||       556 ko |    +57.14% |         +1.53%
   0m00.60s |   34160 ko | fiat-json/src/curve25519_64.json                                  |   0m00.52s |   32588 ko ||    +0m00.07s ||      1572 ko |    +15.38% |         +4.82%
   0m00.59s |   38236 ko | fiat-go/64/curve25519solinas/curve25519solinas.go                 |   0m00.43s |   36420 ko ||    +0m00.15s ||      1816 ko |    +37.20% |         +4.98%
   0m00.58s |   38448 ko | fiat-bedrock2/src/curve25519_64.c                                 |   0m00.51s |   38216 ko ||    +0m00.06s ||       232 ko |    +13.72% |         +0.60%
   0m00.58s |   42568 ko | fiat-bedrock2/src/curve25519_solinas_64.c                         |   0m00.42s |   40596 ko ||    +0m00.15s ||      1972 ko |    +38.09% |         +4.85%
   0m00.56s |   26892 ko | fiat-c/src/curve25519_64.c                                        |   0m00.45s |   27132 ko ||    +0m00.11s ||      -240 ko |    +24.44% |         -0.88%
   0m00.56s |   26560 ko | fiat-rust/src/curve25519_64.rs                                    |   0m00.46s |   26040 ko ||    +0m00.10s ||       520 ko |    +21.73% |         +1.99%
   0m00.56s |   27152 ko | fiat-zig/src/curve25519_64.zig                                    |   0m00.48s |   26252 ko ||    +0m00.08s ||       900 ko |    +16.66% |         +3.42%
   0m00.54s |  120576 ko | ExtractionOCaml/with_bedrock2_base_conversion.cmi                 |   0m00.50s |  119948 ko ||    +0m00.04s ||       628 ko |     +8.00% |         +0.52%
   0m00.53s |  120076 ko | ExtractionOCaml/unsaturated_solinas.cmi                           |   0m00.50s |  119836 ko ||    +0m00.03s ||       240 ko |     +6.00% |         +0.20%
   0m00.52s |  124368 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery.cmi              |   0m00.52s |  123300 ko ||    +0m00.00s ||      1068 ko |     +0.00% |         +0.86%
   0m00.52s |  118308 ko | ExtractionOCaml/solinas_reduction.cmi                             |   0m00.51s |  118636 ko ||    +0m00.01s ||      -328 ko |     +1.96% |         -0.27%
   0m00.52s |  121724 ko | ExtractionOCaml/with_bedrock2_dettman_multiplication.cmi          |   0m00.50s |  121156 ko ||    +0m00.02s ||       568 ko |     +4.00% |         +0.46%
   0m00.52s |  123672 ko | ExtractionOCaml/with_bedrock2_saturated_solinas.cmi               |   0m00.51s |  120980 ko ||    +0m00.01s ||      2692 ko |     +1.96% |         +2.22%
   0m00.52s |  123072 ko | ExtractionOCaml/with_bedrock2_solinas_reduction.cmi               |   0m00.50s |  122784 ko ||    +0m00.02s ||       288 ko |     +4.00% |         +0.23%
   0m00.52s |  123132 ko | ExtractionOCaml/with_bedrock2_unsaturated_solinas.cmi             |   0m00.50s |  123700 ko ||    +0m00.02s ||      -568 ko |     +4.00% |         -0.45%
   0m00.51s |  120332 ko | ExtractionOCaml/bedrock2_base_conversion.cmi                      |   0m00.51s |  119972 ko ||    +0m00.00s ||       360 ko |     +0.00% |         +0.30%
   0m00.51s |  120184 ko | ExtractionOCaml/bedrock2_unsaturated_solinas.cmi                  |   0m00.53s |  123596 ko ||    -0m00.02s ||     -3412 ko |     -3.77% |         -2.76%
   0m00.51s |  118088 ko | ExtractionOCaml/saturated_solinas.cmi                             |   0m00.48s |  117928 ko ||    +0m00.03s ||       160 ko |     +6.25% |         +0.13%
   0m00.51s |  124416 ko | ExtractionOCaml/with_bedrock2_word_by_word_montgomery.cmi         |   0m00.51s |  123124 ko ||    +0m00.00s ||      1292 ko |     +0.00% |         +1.04%
   0m00.50s |  120256 ko | ExtractionOCaml/base_conversion.cmi                               |   0m00.51s |  118684 ko ||    -0m00.01s ||      1572 ko |     -1.96% |         +1.32%
   0m00.50s |  123568 ko | ExtractionOCaml/bedrock2_saturated_solinas.cmi                    |   0m00.54s |  122468 ko ||    -0m00.04s ||      1100 ko |     -7.40% |         +0.89%
   0m00.50s |  123660 ko | ExtractionOCaml/bedrock2_solinas_reduction.cmi                    |   0m00.50s |  120332 ko ||    +0m00.00s ||      3328 ko |     +0.00% |         +2.76%
   0m00.50s |  119964 ko | ExtractionOCaml/dettman_multiplication.cmi                        |   0m00.51s |  120092 ko ||    -0m00.01s ||      -128 ko |     -1.96% |         -0.10%
   0m00.50s |  120424 ko | ExtractionOCaml/word_by_word_montgomery.cmi                       |   0m00.49s |  119588 ko ||    +0m00.01s ||       836 ko |     +2.04% |         +0.69%
   0m00.49s |  120784 ko | ExtractionOCaml/bedrock2_dettman_multiplication.cmi               |   0m00.53s |  120180 ko ||    -0m00.04s ||       604 ko |     -7.54% |         +0.50%
   0m00.34s |   25480 ko | fiat-go/32/poly1305/poly1305.go                                   |   0m00.30s |   24960 ko ||    +0m00.04s ||       520 ko |    +13.33% |         +2.08%
   0m00.31s |   25196 ko | fiat-go/64/secp256k1dettman/secp256k1dettman.go                   |   0m00.25s |   24476 ko ||    +0m00.06s ||       720 ko |    +24.00% |         +2.94%
   0m00.30s |   33676 ko | fiat-bedrock2/src/poly1305_32.c                                   |   0m00.25s |   32372 ko ||    +0m00.04s ||      1304 ko |    +19.99% |         +4.02%
   0m00.30s |   29656 ko | fiat-json/src/poly1305_32.json                                    |   0m00.25s |   30252 ko ||    +0m00.04s ||      -596 ko |    +19.99% |         -1.97%
   0m00.29s |   29300 ko | fiat-bedrock2/src/secp256k1_dettman_64.c                          |   0m00.22s |   29724 ko ||    +0m00.06s ||      -424 ko |    +31.81% |         -1.42%
   0m00.28s |   23932 ko | fiat-json/src/secp256k1_dettman_64.json                           |   0m00.20s |   23928 ko ||    +0m00.08s ||         4 ko |    +40.00% |         +0.01%
   0m00.27s |   25000 ko | fiat-c/src/poly1305_32.c                                          |   0m00.21s |   24124 ko ||    +0m00.06s ||       876 ko |    +28.57% |         +3.63%
   0m00.27s |   21060 ko | fiat-c/src/secp256k1_dettman_64.c                                 |   0m00.18s |   20924 ko ||    +0m00.09s ||       136 ko |    +50.00% |         +0.64%
   0m00.27s |   25404 ko | fiat-java/src/FiatPoly1305.java                                   |   0m00.22s |   25272 ko ||    +0m00.05s ||       132 ko |    +22.72% |         +0.52%
   0m00.27s |   20960 ko | fiat-rust/src/secp256k1_dettman_64.rs                             |   0m00.18s |   21372 ko ||    +0m00.09s ||      -412 ko |    +50.00% |         -1.92%
   0m00.27s |   24624 ko | fiat-zig/src/poly1305_32.zig                                      |   0m00.21s |   23860 ko ||    +0m00.06s ||       764 ko |    +28.57% |         +3.20%
   0m00.27s |   21176 ko | fiat-zig/src/secp256k1_dettman_64.zig                             |   0m00.18s |   20508 ko ||    +0m00.09s ||       668 ko |    +50.00% |         +3.25%
   0m00.26s |   24636 ko | fiat-rust/src/poly1305_32.rs                                      |   0m00.21s |   24504 ko ||    +0m00.05s ||       132 ko |    +23.80% |         +0.53%
   0m00.18s |   26440 ko | fiat-go/64/poly1305/poly1305.go                                   |   0m00.18s |   26096 ko ||    +0m00.00s ||       344 ko |     +0.00% |         +1.31%
   0m00.17s |   26980 ko | fiat-json/src/poly1305_64.json                                    |   0m00.13s |   27492 ko ||    +0m00.04s ||      -512 ko |    +30.76% |         -1.86%
   0m00.16s |   61504 ko | ExtractionOCaml/perf_unsaturated_solinas.cmi                      |   0m00.16s |   61784 ko ||    +0m00.00s ||      -280 ko |     +0.00% |         -0.45%
   0m00.16s |   23780 ko | fiat-rust/src/poly1305_64.rs                                      |   0m00.13s |   22996 ko ||    +0m00.03s ||       784 ko |    +23.07% |         +3.40%
   0m00.16s |   23284 ko | fiat-zig/src/poly1305_64.zig                                      |   0m00.13s |   23176 ko ||    +0m00.03s ||       108 ko |    +23.07% |         +0.46%
   0m00.15s |   58712 ko | ExtractionOCaml/perf_word_by_word_montgomery.cmi                  |   0m00.15s |   58904 ko ||    +0m00.00s ||      -192 ko |     +0.00% |…
JasonGross added a commit to JasonGross/fiat-crypto that referenced this pull request Jan 22, 2024
The naive encoding of PHOAS passes that need to produce both
[expr]-like output and data-like output simultaneously involves
exponential blowup.

This commit adds caching of results (and/or intermediates) of a
data-producing PHOAS pass in a tree structure that mimics the
PHOAS expression so that a subsequent pass can consume this tree
and a PHOAS expression to produce a new expression.

More concretely, suppose we are trying to write a pass that is
`expr var1 * expr var2 -> A * expr var3`. We can define an
`expr`-like-tree-structure that (a) doesn't use higher-order
things for `Abs` nodes, and (b) stores `A` at every node. Then we
can write a pass that is `expr var1 * expr var2 -> A * tree-of-A`
and then `expr var1 * expr var2 * tree-of-A -> expr var3` such
that we incur only linear overhead.

See also mit-plv#1761 and
mit-plv#1604 (comment).

Fixes mit-plv#1604
JasonGross added a commit to JasonGross/fiat-crypto that referenced this pull request Jan 22, 2024
The naive encoding of PHOAS passes that need to produce both
[expr]-like output and data-like output simultaneously involves
exponential blowup.

This commit adds caching of results (and/or intermediates) of a
data-producing PHOAS pass in a tree structure that mimics the
PHOAS expression so that a subsequent pass can consume this tree
and a PHOAS expression to produce a new expression.

More concretely, suppose we are trying to write a pass that is
`expr var1 * expr var2 -> A * expr var3`. We can define an
`expr`-like-tree-structure that (a) doesn't use higher-order
things for `Abs` nodes, and (b) stores `A` at every node. Then we
can write a pass that is `expr var1 * expr var2 -> A * tree-of-A`
and then `expr var1 * expr var2 * tree-of-A -> expr var3` such
that we incur only linear overhead.

See also #1761 and
https://github.com/mit-plv/fiat-crypto/issues/1604#issuecomment-1553341559.

Fixes #1604

<details><summary>Timing Diff</summary>
<p>

```
     After |   Peak Mem | File Name                                                         |     Before |   Peak Mem ||    Change || Change (mem) | % Change | % Change (mem)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
119m00.41s | 3712896 ko | Total Time / Peak Mem                                             | 117m55.92s | 3712368 ko || +1m04.49s ||       528 ko |   +0.91% |         +0.01%
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  4m42.94s | 2490632 ko | Bedrock/End2End/X25519/EdwardsXYZT.vo                             |   4m32.25s | 2489304 ko || +0m10.68s ||      1328 ko |   +3.92% |         +0.05%
  2m03.36s | 1846856 ko | fiat-java/src/FiatP384.java                                       |   1m53.28s | 2326980 ko || +0m10.07s ||   -480124 ko |   +8.89% |        -20.63%
  1m52.25s | 1549488 ko | fiat-go/32/p384/p384.go                                           |   1m59.07s | 2250876 ko || -0m06.81s ||   -701388 ko |   -5.72% |        -31.16%
  1m59.32s | 1691084 ko | fiat-json/src/p384_32.json                                        |   1m53.47s | 2444840 ko || +0m05.84s ||   -753756 ko |   +5.15% |        -30.83%
  0m40.01s |  131676 ko | fiat-bedrock2/src/p521_32.c                                       |   0m34.78s |  190408 ko || +0m05.22s ||    -58732 ko |  +15.03% |        -30.84%
  0m37.83s |  121704 ko | fiat-json/src/p521_32.json                                        |   0m34.11s |  133368 ko || +0m03.71s ||    -11664 ko |  +10.90% |         -8.74%
  0m33.87s |   71128 ko | fiat-java/src/FiatP521.java                                       |   0m37.83s |   83008 ko || -0m03.96s ||    -11880 ko |  -10.46% |        -14.31%
  0m05.44s |  504992 ko | MiscCompilerPassesProofs.vo                                       |   0m02.21s |  486644 ko || +0m03.23s ||     18348 ko | +146.15% |         +3.77%
  2m03.41s | 1477044 ko | fiat-bedrock2/src/p384_scalar_32.c                                |   2m01.31s | 2430696 ko || +0m02.09s ||   -953652 ko |   +1.73% |        -39.23%
  0m18.53s |  353076 ko | fiat-bedrock2/src/secp256k1_montgomery_scalar_32.c                |   0m16.23s |  549032 ko || +0m02.30s ||   -195956 ko |  +14.17% |        -35.69%
  8m04.15s | 2660384 ko | Bedrock/End2End/X25519/GarageDoor.vo                              |   8m02.97s | 2661316 ko || +0m01.17s ||      -932 ko |   +0.24% |         -0.03%
  2m03.78s | 1869460 ko | fiat-bedrock2/src/p384_32.c                                       |   2m01.97s | 2218064 ko || +0m01.81s ||   -348604 ko |   +1.48% |        -15.71%
  2m01.22s | 1828112 ko | fiat-rust/src/p384_scalar_32.rs                                   |   2m03.12s | 2298944 ko || -0m01.90s ||   -470832 ko |   -1.54% |        -20.48%
  1m58.45s | 1531664 ko | fiat-zig/src/p384_32.zig                                          |   1m59.59s | 2285948 ko || -0m01.14s ||   -754284 ko |   -0.95% |        -32.99%
  1m58.25s | 1796656 ko | fiat-c/src/p384_32.c                                              |   1m59.78s | 2324760 ko || -0m01.53s ||   -528104 ko |   -1.27% |        -22.71%
  1m31.80s | 1943396 ko | SlowPrimeSynthesisExamples.vo                                     |   1m32.99s | 1951328 ko || -0m01.19s ||     -7932 ko |   -1.27% |         -0.40%
  0m54.81s | 2485352 ko | ExtractionOCaml/fiat_crypto.ml                                    |   0m53.16s | 2488988 ko || +0m01.65s ||     -3636 ko |   +3.10% |         -0.14%
  0m52.58s | 3712896 ko | ExtractionOCaml/fiat_crypto                                       |   0m53.81s | 3710436 ko || -0m01.23s ||      2460 ko |   -2.28% |         +0.06%
  0m37.58s | 2239200 ko | ExtractionOCaml/bedrock2_solinas_reduction.ml                     |   0m36.11s | 2262736 ko || +0m01.46s ||    -23536 ko |   +4.07% |         -1.04%
  0m33.57s | 2139444 ko | ExtractionOCaml/with_bedrock2_unsaturated_solinas.ml              |   0m32.50s | 2165752 ko || +0m01.07s ||    -26308 ko |   +3.29% |         -1.21%
  0m19.58s |  275340 ko | fiat-bedrock2/src/p434_64.c                                       |   0m18.00s |  395284 ko || +0m01.57s ||   -119944 ko |   +8.77% |        -30.34%
  0m18.18s |  393308 ko | fiat-bedrock2/src/p256_scalar_32.c                                |   0m16.95s |  582384 ko || +0m01.23s ||   -189076 ko |   +7.25% |        -32.46%
  0m17.84s |  368324 ko | fiat-bedrock2/src/curve25519_scalar_32.c                          |   0m16.43s |  561904 ko || +0m01.41s ||   -193580 ko |   +8.58% |        -34.45%
  0m17.71s |  369704 ko | fiat-bedrock2/src/secp256k1_montgomery_32.c                       |   0m16.36s |  545504 ko || +0m01.35s ||   -175800 ko |   +8.25% |        -32.22%
  0m16.51s |  319708 ko | fiat-bedrock2/src/p256_32.c                                       |   0m14.82s |  528056 ko || +0m01.69s ||   -208348 ko |  +11.40% |        -39.45%
  0m16.18s | 2115400 ko | ExtractionHaskell/bedrock2_solinas_reduction.hs                   |   0m17.19s | 2115136 ko || -0m01.01s ||       264 ko |   -5.87% |         +0.01%
  0m11.82s |  162652 ko | fiat-bedrock2/src/p384_scalar_64.c                                |   0m10.80s |  248280 ko || +0m01.01s ||    -85628 ko |   +9.44% |        -34.48%
  5m31.16s | 3213148 ko | Bedrock/Field/Synthesis/Examples/p224_64_new.vo                   |   5m31.70s | 3175180 ko || -0m00.53s ||     37968 ko |   -0.16% |         +1.19%
  2m07.13s | 1398244 ko | Bedrock/End2End/X25519/Field25519.vo                              |   2m07.52s | 1385812 ko || -0m00.39s ||     12432 ko |   -0.30% |         +0.89%
  2m01.79s | 1839808 ko | fiat-json/src/p384_scalar_32.json                                 |   2m02.58s | 2162300 ko || -0m00.78s ||   -322492 ko |   -0.64% |        -14.91%
  2m01.40s | 1848688 ko | fiat-zig/src/p384_scalar_32.zig                                   |   2m01.53s | 2195116 ko || -0m00.12s ||   -346428 ko |   -0.10% |        -15.78%
  2m01.15s | 1582380 ko | fiat-go/32/p384scalar/p384scalar.go                               |   2m01.06s | 2317700 ko || +0m00.09s ||   -735320 ko |   +0.07% |        -31.72%
  2m00.71s | 1784024 ko | fiat-c/src/p384_scalar_32.c                                       |   2m01.39s | 2315572 ko || -0m00.68s ||   -531548 ko |   -0.56% |        -22.95%
  2m00.48s | 1747580 ko | fiat-java/src/FiatP384Scalar.java                                 |   2m01.02s | 2237456 ko || -0m00.53s ||   -489876 ko |   -0.44% |        -21.89%
  1m59.42s | 1705344 ko | fiat-rust/src/p384_32.rs                                          |   2m00.18s | 2292932 ko || -0m00.76s ||   -587588 ko |   -0.63% |        -25.62%
  1m31.86s | 2103612 ko | Fancy/Barrett256.vo                                               |   1m31.64s | 2070684 ko || +0m00.21s ||     32928 ko |   +0.24% |         +1.59%
  0m59.38s | 3705200 ko | ExtractionOCaml/with_bedrock2_fiat_crypto                         |   0m59.58s | 3712368 ko || -0m00.19s ||     -7168 ko |   -0.33% |         -0.19%
  0m59.22s | 3709680 ko | ExtractionOCaml/bedrock2_fiat_crypto                              |   0m59.27s | 3710700 ko || -0m00.05s ||     -1020 ko |   -0.08% |         -0.02%
  0m56.17s | 2561860 ko | ExtractionJsOfOCaml/bedrock2_fiat_crypto.ml                       |   0m55.77s | 2588396 ko || +0m00.39s ||    -26536 ko |   +0.71% |         -1.02%
  0m56.17s | 2563040 ko | ExtractionOCaml/with_bedrock2_fiat_crypto.ml                      |   0m55.50s | 2587632 ko || +0m00.67s ||    -24592 ko |   +1.20% |         -0.95%
  0m56.16s | 2566832 ko | ExtractionOCaml/bedrock2_fiat_crypto.ml                           |   0m55.39s | 2587172 ko || +0m00.76s ||    -20340 ko |   +1.39% |         -0.78%
  0m56.09s | 2560764 ko | ExtractionJsOfOCaml/with_bedrock2_fiat_crypto.ml                  |   0m55.63s | 2587748 ko || +0m00.46s ||    -26984 ko |   +0.82% |         -1.04%
  0m54.52s | 2487364 ko | ExtractionJsOfOCaml/fiat_crypto.ml                                |   0m53.72s | 2488452 ko || +0m00.80s ||     -1088 ko |   +1.48% |         -0.04%
  0m46.35s | 1864828 ko | Fancy/Montgomery256.vo                                            |   0m46.53s | 1882324 ko || -0m00.17s ||    -17496 ko |   -0.38% |         -0.92%
  0m45.86s | 2633728 ko | ExtractionOCaml/with_bedrock2_word_by_word_montgomery             |   0m45.38s | 2631336 ko || +0m00.47s ||      2392 ko |   +1.05% |         +0.09%
  0m45.13s | 2628588 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery                  |   0m44.72s | 2631196 ko || +0m00.41s ||     -2608 ko |   +0.91% |         -0.09%
  0m45.01s | 2704032 ko | ExtractionOCaml/bedrock2_solinas_reduction                        |   0m45.25s | 2704460 ko || -0m00.24s ||      -428 ko |   -0.53% |         -0.01%
  0m43.55s | 2689968 ko | ExtractionOCaml/solinas_reduction                                 |   0m43.03s | 2685092 ko || +0m00.51s ||      4876 ko |   +1.20% |         +0.18%
  0m43.13s | 2616752 ko | ExtractionOCaml/word_by_word_montgomery                           |   0m42.49s | 2619388 ko || +0m00.64s ||     -2636 ko |   +1.50% |         -0.10%
  0m42.94s | 2540252 ko | ExtractionOCaml/with_bedrock2_unsaturated_solinas                 |   0m42.98s | 2534848 ko || -0m00.03s ||      5404 ko |   -0.09% |         +0.21%
  0m42.46s | 2540704 ko | ExtractionOCaml/bedrock2_unsaturated_solinas                      |   0m42.31s | 2535612 ko || +0m00.14s ||      5092 ko |   +0.35% |         +0.20%
  0m41.09s |   68036 ko | fiat-go/32/p521/p521.go                                           |   0m41.58s |   89984 ko || -0m00.48s ||    -21948 ko |   -1.17% |        -24.39%
  0m40.27s | 2226764 ko | ExtractionOCaml/with_bedrock2_solinas_reduction                   |   0m39.94s | 2235060 ko || +0m00.33s ||     -8296 ko |   +0.82% |         -0.37%
  0m40.21s | 2342848 ko | ExtractionOCaml/unsaturated_solinas                               |   0m40.22s | 2331788 ko || -0m00.00s ||     11060 ko |   -0.02% |         +0.47%
  0m40.04s | 2222156 ko | ExtractionOCaml/with_bedrock2_base_conversion                     |   0m39.81s | 2230200 ko || +0m00.22s ||     -8044 ko |   +0.57% |         -0.36%
  0m39.77s | 2248012 ko | ExtractionOCaml/bedrock2_dettman_multiplication                   |   0m39.86s | 2246008 ko || -0m00.08s ||      2004 ko |   -0.22% |         +0.08%
  0m39.76s | 2227296 ko | ExtractionOCaml/with_bedrock2_dettman_multiplication              |   0m39.23s | 2235188 ko || +0m00.53s ||     -7892 ko |   +1.35% |         -0.35%
  0m39.69s | 2227220 ko | ExtractionOCaml/with_bedrock2_saturated_solinas                   |   0m39.75s | 2234304 ko || -0m00.06s ||     -7084 ko |   -0.15% |         -0.31%
  0m39.22s | 2222396 ko | ExtractionOCaml/bedrock2_base_conversion                          |   0m39.00s | 2225128 ko || +0m00.21s ||     -2732 ko |   +0.56% |         -0.12%
  0m39.10s | 2225812 ko | ExtractionOCaml/bedrock2_saturated_solinas                        |   0m38.87s | 2230904 ko || +0m00.23s ||     -5092 ko |   +0.59% |         -0.22%
  0m38.08s |   65920 ko | fiat-rust/src/p521_32.rs                                          |   0m37.67s |   82364 ko || +0m00.40s ||    -16444 ko |   +1.08% |        -19.96%
  0m37.69s |   69868 ko | fiat-zig/src/p521_32.zig                                          |   0m37.76s |   84304 ko || -0m00.07s ||    -14436 ko |   -0.18% |        -17.12%
  0m37.58s |   63900 ko | fiat-c/src/p521_32.c                                              |   0m37.78s |   79712 ko || -0m00.20s ||    -15812 ko |   -0.52% |        -19.83%
  0m37.16s | 1927432 ko | ExtractionOCaml/dettman_multiplication                            |   0m36.77s | 1927468 ko || +0m00.38s ||       -36 ko |   +1.06% |         -0.00%
  0m36.68s | 2208344 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery.ml               |   0m36.27s | 2209520 ko || +0m00.40s ||     -1176 ko |   +1.13% |         -0.05%
  0m36.58s | 1889596 ko | ExtractionOCaml/base_conversion                                   |   0m35.96s | 1882400 ko || +0m00.61s ||      7196 ko |   +1.72% |         +0.38%
  0m36.54s | 1901292 ko | ExtractionOCaml/saturated_solinas                                 |   0m36.23s | 1900756 ko || +0m00.31s ||       536 ko |   +0.85% |         +0.02%
  0m36.51s | 2207332 ko | ExtractionOCaml/with_bedrock2_word_by_word_montgomery.ml          |   0m36.53s | 2209884 ko || -0m00.02s ||     -2552 ko |   -0.05% |         -0.11%
  0m35.76s | 2116004 ko | ExtractionOCaml/solinas_reduction.ml                              |   0m35.10s | 2145732 ko || +0m00.65s ||    -29728 ko |   +1.88% |         -1.38%
  0m34.55s | 2143460 ko | ExtractionOCaml/word_by_word_montgomery.ml                        |   0m34.24s | 2117800 ko || +0m00.30s ||     25660 ko |   +0.90% |         +1.21%
  0m33.49s | 2139300 ko | ExtractionOCaml/bedrock2_unsaturated_solinas.ml                   |   0m34.27s | 2166160 ko || -0m00.78s ||    -26860 ko |   -2.27% |         -1.23%
  0m32.98s | 1695900 ko | ExtractionOCaml/perf_unsaturated_solinas                          |   0m32.89s | 1695528 ko || +0m00.08s ||       372 ko |   +0.27% |         +0.02%
  0m32.90s | 1714104 ko | ExtractionOCaml/perf_word_by_word_montgomery                      |   0m33.02s | 1718156 ko || -0m00.12s ||     -4052 ko |   -0.36% |         -0.23%
  0m32.54s | 1220348 ko | Bedrock/End2End/X25519/MontgomeryLadder.vo                        |   0m32.68s | 1220032 ko || -0m00.14s ||       316 ko |   -0.42% |         +0.02%
  0m31.67s | 2044364 ko | ExtractionOCaml/unsaturated_solinas.ml                            |   0m31.31s | 2032268 ko || +0m00.36s ||     12096 ko |   +1.14% |         +0.59%
  0m30.89s | 1253684 ko | Bedrock/End2End/X25519/GarageDoorTop.vo                           |   0m31.05s | 1254284 ko || -0m00.16s ||      -600 ko |   -0.51% |         -0.04%
  0m30.19s | 1476196 ko | StandaloneDebuggingExamples.vo                                    |   0m29.94s | 1479252 ko || +0m00.25s ||     -3056 ko |   +0.83% |         -0.20%
  0m29.87s | 2063484 ko | ExtractionOCaml/bedrock2_dettman_multiplication.ml                |   0m29.64s | 2035996 ko || +0m00.23s ||     27488 ko |   +0.77% |         +1.35%
  0m29.15s | 2051876 ko | ExtractionOCaml/with_bedrock2_base_conversion.ml                  |   0m28.92s | 2028232 ko || +0m00.22s ||     23644 ko |   +0.79% |         +1.16%
  0m29.09s | 2053704 ko | ExtractionOCaml/bedrock2_base_conversion.ml                       |   0m28.75s | 2027468 ko || +0m00.33s ||     26236 ko |   +1.18% |         +1.29%
  0m28.98s | 2056312 ko | ExtractionOCaml/with_bedrock2_solinas_reduction.ml                |   0m28.86s | 2047824 ko || +0m00.12s ||      8488 ko |   +0.41% |         +0.41%
  0m28.97s | 2057432 ko | ExtractionOCaml/bedrock2_saturated_solinas.ml                     |   0m28.77s | 2048548 ko || +0m00.19s ||      8884 ko |   +0.69% |         +0.43%
  0m28.90s | 2059464 ko | ExtractionOCaml/with_bedrock2_saturated_solinas.ml                |   0m28.61s | 2049520 ko || +0m00.28s ||      9944 ko |   +1.01% |         +0.48%
  0m28.77s | 2054636 ko | ExtractionOCaml/with_bedrock2_dettman_multiplication.ml           |   0m28.74s | 2048512 ko || +0m00.03s ||      6124 ko |   +0.10% |         +0.29%
  0m28.00s | 1985508 ko | ExtractionOCaml/dettman_multiplication.ml                         |   0m27.78s | 1986744 ko || +0m00.21s ||     -1236 ko |   +0.79% |         -0.06%
  0m27.05s | 1957812 ko | ExtractionOCaml/saturated_solinas.ml                              |   0m26.89s | 1912860 ko || +0m00.16s ||     44952 ko |   +0.59% |         +2.34%
  0m26.98s | 1949468 ko | ExtractionOCaml/base_conversion.ml                                |   0m26.79s | 1938188 ko || +0m00.19s ||     11280 ko |   +0.70% |         +0.58%
  0m25.51s | 1302468 ko | PerfTesting/PerfTestSearch.vo                                     |   0m25.39s | 1303484 ko || +0m00.12s ||     -1016 ko |   +0.47% |         -0.07%
  0m21.37s | 2440932 ko | ExtractionHaskell/with_bedrock2_fiat_crypto.hs                    |   0m21.23s | 2439220 ko || +0m00.14s ||      1712 ko |   +0.65% |         +0.07%
  0m20.99s | 1843996 ko | ExtractionOCaml/perf_unsaturated_solinas.ml                       |   0m21.09s | 1833016 ko || -0m00.10s ||     10980 ko |   -0.47% |         +0.59%
  0m20.95s | 2439784 ko | ExtractionHaskell/bedrock2_fiat_crypto.hs                         |   0m19.96s | 2438120 ko || +0m00.98s ||      1664 ko |   +4.95% |         +0.06%
  0m20.89s | 1114864 ko | PushButtonSynthesis/UnsaturatedSolinas.vo                         |   0m20.95s | 1114468 ko || -0m00.05s ||       396 ko |   -0.28% |         +0.03%
  0m20.84s | 1899964 ko | ExtractionOCaml/perf_word_by_word_montgomery.ml                   |   0m20.86s | 1929696 ko || -0m00.01s ||    -29732 ko |   -0.09% |         -1.54%
  0m20.51s | 2338044 ko | ExtractionHaskell/fiat_crypto.hs                                  |   0m20.59s | 2338048 ko || -0m00.07s ||        -4 ko |   -0.38% |         -0.00%
  0m18.63s | 1116056 ko | PushButtonSynthesis/WordByWordMontgomery.vo                       |   0m18.24s | 1121068 ko || +0m00.39s ||     -5012 ko |   +2.13% |         -0.44%
  0m18.54s | 1076284 ko | Bedrock/End2End/Poly1305/Field1305.vo                             |   0m18.50s | 1076712 ko || +0m00.03s ||      -428 ko |   +0.21% |         -0.03%
  0m18.24s |  234376 ko | fiat-go/64/p434/p434.go                                           |   0m17.55s |  344796 ko || +0m00.68s ||   -110420 ko |   +3.93% |        -32.02%
  0m17.84s |  266772 ko | fiat-rust/src/p434_64.rs                                          |   0m17.62s |  331464 ko || +0m00.21s ||    -64692 ko |   +1.24% |        -19.51%
  0m17.69s |  258268 ko | fiat-json/src/p434_64.json                                        |   0m17.60s |  354448 ko || +0m00.08s ||    -96180 ko |   +0.51% |        -27.13%
  0m17.55s |  238796 ko | fiat-zig/src/p434_64.zig                                          |   0m17.38s |  332096 ko || +0m00.17s ||    -93300 ko |   +0.97% |        -28.09%
  0m17.49s |  239600 ko | fiat-c/src/p434_64.c                                              |   0m17.15s |  320692 ko || +0m00.33s ||    -81092 ko |   +1.98% |        -25.28%
  0m17.34s | 1288544 ko | PerfTesting/PerfTestSearchPattern.vo                              |   0m17.26s | 1289792 ko || +0m00.07s ||     -1248 ko |   +0.46% |         -0.09%
  0m17.09s | 2115764 ko | ExtractionHaskell/with_bedrock2_solinas_reduction.hs              |   0m17.00s | 2115168 ko || +0m00.08s ||       596 ko |   +0.52% |         +0.02%
  0m17.02s | 2096116 ko | ExtractionHaskell/with_bedrock2_word_by_word_montgomery.hs        |   0m16.93s | 2095144 ko || +0m00.08s ||       972 ko |   +0.53% |         +0.04%
  0m16.92s | 1091012 ko | Bedrock/Field/Translation/Proofs/Func.vo                          |   0m16.84s | 1088956 ko || +0m00.08s ||      2056 ko |   +0.47% |         +0.18%
  0m16.85s | 2095212 ko | ExtractionHaskell/bedrock2_word_by_word_montgomery.hs             |   0m17.03s | 2096432 ko || -0m00.17s ||     -1220 ko |   -1.05% |         -0.05%
  0m16.73s |  389052 ko | fiat-java/src/FiatP256Scalar.java                                 |   0m16.57s |  465392 ko || +0m00.16s ||    -76340 ko |   +0.96% |        -16.40%
  0m16.73s |  381468 ko | fiat-json/src/p256_scalar_32.json                                 |   0m16.72s |  550468 ko || +0m00.01s ||   -169000 ko |   +0.05% |        -30.70%
  0m16.69s |  365096 ko | fiat-go/32/secp256k1montgomeryscalar/secp256k1montgomeryscalar.go |   0m16.22s |  436688 ko || +0m00.47s ||    -71592 ko |   +2.89% |        -16.39%
  0m16.68s |  368308 ko | fiat-java/src/FiatSecp256K1MontgomeryScalar.java                  |   0m16.58s |  508480 ko || +0m00.10s ||   -140172 ko |   +0.60% |        -27.56%
  0m16.58s |  335988 ko | fiat-rust/src/p256_scalar_32.rs                                   |   0m16.32s |  452024 ko || +0m00.25s ||   -116036 ko |   +1.59% |        -25.67%
  0m16.45s |  363824 ko | fiat-go/32/p256scalar/p256scalar.go                               |   0m16.36s |  443652 ko || +0m00.08s ||    -79828 ko |   +0.55% |        -17.99%
  0m16.38s | 2041708 ko | ExtractionHaskell/solinas_reduction.hs                            |   0m16.21s | 2038736 ko || +0m00.16s ||      2972 ko |   +1.04% |         +0.14%
  0m16.35s |  368404 ko | fiat-json/src/secp256k1_montgomery_scalar_32.json                 |   0m16.23s |  567364 ko || +0m00.12s ||   -198960 ko |   +0.73% |        -35.06%
  0m16.30s |  328068 ko | fiat-zig/src/p256_scalar_32.zig                                   |   0m16.21s |  439912 ko || +0m00.08s ||   -111844 ko |   +0.55% |        -25.42%
  0m16.26s | 1997856 ko | ExtractionHaskell/word_by_word_montgomery.hs                      |   0m16.14s | 1999068 ko || +0m00.12s ||     -1212 ko |   +0.74% |         -0.06%
  0m16.26s |  312564 ko | fiat-rust/src/secp256k1_montgomery_scalar_32.rs                   |   0m16.01s |  440048 ko || +0m00.25s ||   -127484 ko |   +1.56% |        -28.97%
  0m16.23s |  405148 ko | fiat-json/src/secp256k1_montgomery_32.json                        |   0m15.92s |  553616 ko || +0m00.31s ||   -148468 ko |   +1.94% |        -26.81%
  0m16.18s |  387012 ko | fiat-rust/src/curve25519_scalar_32.rs                             |   0m15.90s |  483240 ko || +0m00.27s ||    -96228 ko |   +1.76% |        -19.91%
  0m16.13s |  324784 ko | fiat-zig/src/secp256k1_montgomery_scalar_32.zig                   |   0m16.10s |  501740 ko || +0m00.02s ||   -176956 ko |   +0.18% |        -35.26%
  0m16.11s |  364752 ko | fiat-zig/src/secp256k1_montgomery_32.zig                          |   0m16.12s |  496352 ko || -0m00.01s ||   -131600 ko |   -0.06% |        -26.51%
  0m16.10s |  373100 ko | fiat-c/src/secp256k1_montgomery_scalar_32.c                       |   0m15.90s |  443492 ko || +0m00.20s ||    -70392 ko |   +1.25% |        -15.87%
  0m16.08s |  363424 ko | fiat-rust/src/secp256k1_montgomery_32.rs                          |   0m15.90s |  496056 ko || +0m00.17s ||   -132632 ko |   +1.13% |        -26.73%
  0m16.07s |  398244 ko | fiat-json/src/curve25519_scalar_32.json                           |   0m16.05s |  542064 ko || +0m00.01s ||   -143820 ko |   +0.12% |        -26.53%
  0m16.06s |  368996 ko | fiat-go/32/curve25519scalar/curve25519scalar.go                   |   0m15.69s |  483624 ko || +0m00.36s ||   -114628 ko |   +2.35% |        -23.70%
  0m16.02s |  375044 ko | fiat-java/src/FiatSecp256K1Montgomery.java                        |   0m15.75s |  504728 ko || +0m00.26s ||   -129684 ko |   +1.71% |        -25.69%
  0m16.01s | 2039252 ko | ExtractionHaskell/with_bedrock2_unsaturated_solinas.hs            |   0m15.95s | 2032812 ko || +0m00.06s ||      6440 ko |   +0.37% |         +0.31%
  0m16.01s |  364588 ko | fiat-go/32/secp256k1montgomery/secp256k1montgomery.go             |   0m15.84s |  495008 ko || +0m00.17s ||   -130420 ko |   +1.07% |        -26.34%
  0m15.86s | 2037300 ko | ExtractionHaskell/bedrock2_unsaturated_solinas.hs                 |   0m15.19s | 2031872 ko || +0m00.67s ||      5428 ko |   +4.41% |         +0.26%
  0m15.83s |  366152 ko | fiat-zig/src/curve25519_scalar_32.zig                             |   0m15.71s |  491216 ko || +0m00.11s ||   -125064 ko |   +0.76% |        -25.46%
  0m15.72s |  365060 ko | fiat-c/src/curve25519_scalar_32.c                                 |   0m15.42s |  450720 ko || +0m00.30s ||    -85660 ko |   +1.94% |        -19.00%
  0m15.58s |  341664 ko | fiat-java/src/FiatCurve25519Scalar.java                           |   0m16.16s |  435944 ko || -0m00.58s ||    -94280 ko |   -3.58% |        -21.62%
  0m15.57s |  375192 ko | fiat-c/src/secp256k1_montgomery_32.c                              |   0m15.49s |  494320 ko || +0m00.08s ||   -119128 ko |   +0.51% |        -24.09%
  0m15.53s | 1102596 ko | Bedrock/Field/Translation/Proofs/Cmd.vo                           |   0m15.65s | 1105296 ko || -0m00.12s ||     -2700 ko |   -0.76% |         -0.24%
  0m15.50s | 1939896 ko | ExtractionHaskell/unsaturated_solinas.hs                          |   0m15.57s | 1940196 ko || -0m00.07s ||      -300 ko |   -0.44% |         -0.01%
  0m15.50s |  361108 ko | fiat-c/src/p256_scalar_32.c                                       |   0m16.04s |  480596 ko || -0m00.53s ||   -119488 ko |   -3.36% |        -24.86%
  0m15.37s | 1126812 ko | Bedrock/Field/Synthesis/New/Signature.vo                          |   0m15.35s | 1124668 ko || +0m00.01s ||      2144 ko |   +0.13% |         +0.19%
  0m15.28s |  358408 ko | fiat-json/src/p256_32.json                                        |   0m15.18s |  516016 ko || +0m00.09s ||   -157608 ko |   +0.65% |        -30.54%
  0m15.23s |  380476 ko | fiat-zig/src/p256_32.zig                                          |   0m15.25s |  485876 ko || -0m00.01s ||   -105400 ko |   -0.13% |        -21.69%
  0m15.17s |  391176 ko | fiat-rust/src/p256_32.rs                                          |   0m14.97s |  480552 ko || +0m00.19s ||    -89376 ko |   +1.33% |        -18.59%
  0m15.16s |  327160 ko | fiat-go/32/p256/p256.go                                           |   0m15.06s |  476880 ko || +0m00.09s ||   -149720 ko |   +0.66% |        -31.39%
  0m15.10s | 1951784 ko | ExtractionHaskell/with_bedrock2_dettman_multiplication.hs         |   0m15.13s | 1950212 ko || -0m00.03s ||      1572 ko |   -0.19% |         +0.08%
  0m15.02s | 1954488 ko | ExtractionHaskell/bedrock2_dettman_multiplication.hs              |   0m15.01s | 1950572 ko || +0m00.00s ||      3916 ko |   +0.06% |         +0.20%
  0m14.97s |  386420 ko | fiat-java/src/FiatP256.java                                       |   0m14.94s |  487428 ko || +0m00.03s ||   -101008 ko |   +0.20% |        -20.72%
  0m14.94s | 1942204 ko | ExtractionHaskell/bedrock2_saturated_solinas.hs                   |   0m14.78s | 1946752 ko || +0m00.16s ||     -4548 ko |   +1.08% |         -0.23%
  0m14.92s | 1941392 ko | ExtractionHaskell/with_bedrock2_base_conversion.hs                |   0m14.82s | 1944492 ko || +0m00.09s ||     -3100 ko |   +0.67% |         -0.15%
  0m14.85s | 1943860 ko | ExtractionHaskell/with_bedrock2_saturated_solinas.hs              |   0m14.46s | 1943428 ko || +0m00.38s ||       432 ko |   +2.69% |         +0.02%
  0m14.78s | 1942620 ko | ExtractionHaskell/bedrock2_base_conversion.hs                     |   0m14.85s | 1947088 ko || -0m00.07s ||     -4468 ko |   -0.47% |         -0.22%
  0m14.72s |  294600 ko | fiat-c/src/p256_32.c                                              |   0m14.14s |  478440 ko || +0m00.58s ||   -183840 ko |   +4.10% |        -38.42%
  0m14.46s | 1883616 ko | ExtractionHaskell/dettman_multiplication.hs                       |   0m14.48s | 1885612 ko || -0m00.01s ||     -1996 ko |   -0.13% |         -0.10%
  0m14.41s | 1876800 ko | ExtractionHaskell/saturated_solinas.hs                            |   0m14.42s | 1872284 ko || -0m00.00s ||      4516 ko |   -0.06% |         +0.24%
  0m14.25s | 1861548 ko | ExtractionHaskell/base_conversion.hs                              |   0m14.12s | 1862120 ko || +0m00.13s ||      -572 ko |   +0.92% |         -0.03%
  0m13.00s | 1550136 ko | Bedrock/Field/Synthesis/New/WordByWordMontgomery.vo               |   0m13.03s | 1549688 ko || -0m00.02s ||       448 ko |   -0.23% |         +0.02%
  0m11.04s |  157128 ko | fiat-go/64/p384scalar/p384scalar.go                               |   0m10.77s |  209908 ko || +0m00.26s ||    -52780 ko |   +2.50% |        -25.14%
  0m10.88s |  187180 ko | fiat-json/src/p384_scalar_64.json                                 |   0m10.96s |  250972 ko || -0m00.08s ||    -63792 ko |   -0.72% |        -25.41%
  0m10.83s |  165252 ko | fiat-rust/src/p384_scalar_64.rs                                   |   0m10.40s |  207016 ko || +0m00.42s ||    -41764 ko |   +4.13% |        -20.17%
  0m10.74s |  162468 ko | fiat-zig/src/p384_scalar_64.zig                                   |   0m10.55s |  182100 ko || +0m00.18s ||    -19632 ko |   +1.80% |        -10.78%
  0m10.64s |  157828 ko | fiat-c/src/p384_scalar_64.c                                       |   0m10.62s |  194572 ko || +0m00.02s ||    -36744 ko |   +0.18% |        -18.88%
  0m09.95s |  171536 ko | fiat-bedrock2/src/p384_64.c                                       |   0m09.13s |  247964 ko || +0m00.81s ||    -76428 ko |   +8.98% |        -30.82%
  0m09.83s |  241628 ko | fiat-bedrock2/src/p224_32.c                                       |   0m09.04s |  359972 ko || +0m00.79s ||   -118344 ko |   +8.73% |        -32.87%
  0m09.36s |  172540 ko | fiat-go/64/p384/p384.go                                           |   0m09.03s |  209672 ko || +0m00.33s ||    -37132 ko |   +3.65% |        -17.70%
  0m09.30s | 1245696 ko | Bedrock/End2End/X25519/MontgomeryLadderProperties.vo              |   0m09.06s | 1247292 ko || +0m00.24s ||     -1596 ko |   +2.64% |         -0.12%
  0m09.26s |  990120 ko | BoundsPipeline.vo                                                 |   0m10.17s | 1001900 ko || -0m00.91s ||    -11780 ko |   -8.94% |         -1.17%
  0m09.22s |  196596 ko | fiat-json/src/p384_64.json                                        |   0m09.07s |  231996 ko || +0m00.15s ||    -35400 ko |   +1.65% |        -15.25%
  0m09.16s |  168928 ko | fiat-rust/src/p384_64.rs                                          |   0m08.94s |  193548 ko || +0m00.22s ||    -24620 ko |   +2.46% |        -12.72%
  0m09.02s |  148804 ko | fiat-zig/src/p384_64.zig                                          |   0m09.06s |  194724 ko || -0m00.04s ||    -45920 ko |   -0.44% |        -23.58%
  0m08.95s |  221716 ko | fiat-rust/src/p224_32.rs                                          |   0m08.80s |  295280 ko || +0m00.14s ||    -73564 ko |   +1.70% |        -24.91%
  0m08.91s |  270756 ko | fiat-json/src/p224_32.json                                        |   0m08.94s |  345988 ko || -0m00.02s ||    -75232 ko |   -0.33% |        -21.74%
  0m08.90s |  211804 ko | fiat-zig/src/p224_32.zig                                          |   0m08.61s |  304584 ko || +0m00.29s ||    -92780 ko |   +3.36% |        -30.46%
  0m08.89s |  152768 ko | fiat-c/src/p384_64.c                                              |   0m08.89s |  193164 ko || +0m00.00s ||    -40396 ko |   +0.00% |        -20.91%
  0m08.89s |  224580 ko | fiat-java/src/FiatP224.java                                       |   0m08.75s |  308952 ko || +0m00.14s ||    -84372 ko |   +1.60% |        -27.30%
  0m08.87s |  208792 ko | fiat-go/32/p224/p224.go                                           |   0m08.71s |  273008 ko || +0m00.15s ||    -64216 ko |   +1.83% |        -23.52%
  0m08.34s |  216488 ko | fiat-c/src/p224_32.c                                              |   0m08.48s |  294192 ko || -0m00.14s ||    -77704 ko |   -1.65% |        -26.41%
  0m08.30s |  130604 ko | fiat-json/src/p448_solinas_32.json                                |   0m08.28s |  138976 ko || +0m00.02s ||     -8372 ko |   +0.24% |         -6.02%
  0m08.08s |  997024 ko | PushButtonSynthesis/BaseConversion.vo                             |   0m08.01s |  998652 ko || +0m00.07s ||     -1628 ko |   +0.87% |         -0.16%
  0m07.97s |   63136 ko | fiat-rust/src/p448_solinas_32.rs                                  |   0m07.94s |   81796 ko || +0m00.02s ||    -18660 ko |   +0.37% |        -22.81%
  0m07.87s |   63124 ko | fiat-c/src/p448_solinas_32.c                                      |   0m07.89s |   79116 ko || -0m00.01s ||    -15992 ko |   -0.25% |        -20.21%
  0m07.76s |  971804 ko | PushButtonSynthesis/SmallExamples.vo                              |   0m07.72s |  963916 ko || +0m00.04s ||      7888 ko |   +0.51% |         +0.81%
  0m07.66s |   66928 ko | fiat-zig/src/p448_solinas_32.zig                                  |   0m07.94s |   81272 ko || -0m00.28s ||    -14344 ko |   -3.52% |        -17.64%
  0m07.15s | 1014500 ko | PushButtonSynthesis/Primitives.vo                                 |   0m07.14s | 1014268 ko || +0m00.01s ||       232 ko |   +0.14% |         +0.02%
  0m06.44s |  998480 ko | PushButtonSynthesis/SolinasReduction.vo                           |   0m06.41s |  991736 ko || +0m00.03s ||      6744 ko |   +0.46% |         +0.68%
  0m06.41s |   50340 ko | fiat-go/64/p521/p521.go                                           |   0m05.58s |   60156 ko || +0m00.83s ||     -9816 ko |  +14.87% |        -16.31%
  0m05.84s |   64284 ko | fiat-bedrock2/src/p521_64.c                                       |   0m05.52s |   79608 ko || +0m00.32s ||    -15324 ko |   +5.79% |        -19.24%
  0m05.47s |   40672 ko | fiat-rust/src/p521_64.rs                                          |   0m05.41s |   44064 ko || +0m00.05s ||     -3392 ko |   +1.10% |         -7.69%
  0m05.46s |   39792 ko | fiat-zig/src/p521_64.zig                                          |   0m05.39s |   45116 ko || +0m00.07s ||     -5324 ko |   +1.29% |        -11.80%
  0m05.42s |   40516 ko | fiat-c/src/p521_64.c                                              |   0m05.29s |   44236 ko || +0m00.12s ||     -3720 ko |   +2.45% |         -8.40%
  0m05.41s | 1128812 ko | Bedrock/Field/Synthesis/New/UnsaturatedSolinas.vo                 |   0m05.43s | 1137752 ko || -0m00.01s ||     -8940 ko |   -0.36% |         -0.78%
  0m05.41s |  990868 ko | PushButtonSynthesis/BarrettReduction.vo                           |   0m05.41s |  994048 ko || +0m00.00s ||     -3180 ko |   +0.00% |         -0.31%
  0m05.39s | 1050088 ko | CLI.vo                                                            |   0m05.46s | 1047924 ko || -0m00.07s ||      2164 ko |   -1.28% |         +0.20%
  0m05.38s |   57020 ko | fiat-json/src/p521_64.json                                        |   0m05.37s |   61652 ko || +0m00.00s ||     -4632 ko |   +0.18% |         -7.51%
  0m04.39s |  978576 ko | PushButtonSynthesis/DettmanMultiplication.vo                      |   0m04.42s |  978280 ko || -0m00.03s ||       296 ko |   -0.67% |         +0.03%
  0m04.14s | 1005104 ko | Bedrock/Field/Translation/Proofs/ValidComputable/Cmd.vo           |   0m04.12s | 1002340 ko || +0m00.01s ||      2764 ko |   +0.48% |         +0.27%
  0m04.09s |  986744 ko | PushButtonSynthesis/SaturatedSolinas.vo                           |   0m03.87s |  988116 ko || +0m00.21s ||     -1372 ko |   +5.68% |         -0.13%
  0m04.05s | 1408000 ko | Bedrock/Everything.vo                                             |   0m04.05s | 1407508 ko || +0m00.00s ||       492 ko |   +0.00% |         +0.03%
  0m03.79s |  985896 ko | PushButtonSynthesis/FancyMontgomeryReduction.vo                   |   0m03.79s |  979824 ko || +0m00.00s ||      6072 ko |   +0.00% |         +0.61%
  0m03.62s | 1274284 ko | Everything.vo                                                     |   0m03.80s | 1273676 ko || -0m00.17s ||       608 ko |   -4.73% |         +0.04%
  0m03.56s |  995868 ko | Rewriter/PerfTesting/Core.vo                                      |   0m03.53s |  993696 ko || +0m00.03s ||      2172 ko |   +0.84% |         +0.21%
  0m03.52s | 1232320 ko | PerfTesting/PerfTestPrint.vo                                      |   0m03.54s | 1231900 ko || -0m00.02s ||       420 ko |   -0.56% |         +0.03%
  0m03.19s | 1006604 ko | StandaloneMonadicUtils.vo                                         |   0m03.17s | 1006356 ko || +0m00.02s ||       248 ko |   +0.63% |         +0.02%
  0m03.18s |   71672 ko | fiat-bedrock2/src/p256_scalar_64.c                                |   0m02.76s |  101396 ko || +0m00.42s ||    -29724 ko |  +15.21% |        -29.31%
  0m03.17s | 1033928 ko | Bedrock/Standalone/StandaloneJsOfOCamlMain.vo                     |   0m03.06s | 1033420 ko || +0m00.10s ||       508 ko |   +3.59% |         +0.04%
  0m03.13s |  997304 ko | Bedrock/Field/Translation/Proofs/ValidComputable/Func.vo          |   0m03.08s |  994328 ko || +0m00.04s ||      2976 ko |   +1.62% |         +0.29%
  0m03.11s | 1035436 ko | Bedrock/Standalone/StandaloneHaskellMain.vo                       |   0m03.12s | 1035108 ko || -0m00.01s ||       328 ko |   -0.32% |         +0.03%
  0m03.10s |   72376 ko | fiat-bedrock2/src/secp256k1_montgomery_scalar_64.c                |   0m02.73s |   99420 ko || +0m00.37s ||    -27044 ko |  +13.55% |        -27.20%
  0m03.07s | 1035720 ko | Bedrock/Standalone/StandaloneOCamlMain.vo                         |   0m03.06s | 1035304 ko || +0m00.00s ||       416 ko |   +0.32% |         +0.04%
  0m03.07s | 1002468 ko | StandaloneHaskellMain.vo                                          |   0m03.03s | 1001988 ko || +0m00.04s ||       480 ko |   +1.32% |         +0.04%
  0m03.06s |  997784 ko | Bedrock/Field/Stringification/Stringification.vo                  |   0m03.09s |  997184 ko || -0m00.02s ||       600 ko |   -0.97% |         +0.06%
  0m03.02s | 1011104 ko | StandaloneOCamlMain.vo                                            |   0m03.03s | 1010576 ko || -0m00.00s ||       528 ko |   -0.33% |         +0.05%
  0m03.01s |  942960 ko | Bedrock/Field/Translation/Cmd.vo                                  |   0m03.01s |  944416 ko || +0m00.00s ||     -1456 ko |   +0.00% |         -0.15%
  0m02.98s |  943312 ko | Bedrock/Field/Translation/Func.vo                                 |   0m02.96s |  942944 ko || +0m00.02s ||       368 ko |   +0.67% |         +0.03%
  0m02.97s | 1011444 ko | StandaloneJsOfOCamlMain.vo                                        |   0m02.99s | 1011032 ko || -0m00.02s ||       412 ko |   -0.66% |         +0.04%
  0m02.94s | 1021728 ko | Rewriter/PerfTesting/StandaloneOCamlMain.vo                       |   0m02.97s | 1021312 ko || -0m00.03s ||       416 ko |   -1.01% |         +0.04%
  0m02.91s |  975208 ko | Bedrock/Field/Translation/Parameters/Defaults64.vo                |   0m02.84s |  974984 ko || +0m00.07s ||       224 ko |   +2.46% |         +0.02%
  0m02.91s |  975304 ko | Bedrock/Field/Translation/Parameters/FE310.vo                     |   0m02.93s |  975164 ko || -0m00.02s ||       140 ko |   -0.68% |         +0.01%
  0m02.89s |  967920 ko | Bedrock/Field/Translation/Parameters/Defaults.vo                  |   0m02.84s |  967592 ko || +0m00.05s ||       328 ko |   +1.76% |         +0.03%
  0m02.86s |  975308 ko | Bedrock/Field/Translation/Parameters/Defaults32.vo                |   0m02.91s |  975076 ko || -0m00.05s ||       232 ko |   -1.71% |         +0.02%
  0m02.84s |  993860 ko | Bedrock/Field/Synthesis/New/ComputedOp.vo                         |   0m02.84s |  991728 ko || +0m00.00s ||      2132 ko |   +0.00% |         +0.21%
  0m02.79s |   70364 ko | fiat-bedrock2/src/secp256k1_montgomery_64.c                       |   0m02.47s |   97868 ko || +0m00.31s ||    -27504 ko |  +12.95% |        -28.10%
  0m02.78s |   62840 ko | fiat-go/64/secp256k1montgomeryscalar/secp256k1montgomeryscalar.go |   0m02.65s |   77260 ko || +0m00.12s ||    -14420 ko |   +4.90% |        -18.66%
  0m02.77s |   78500 ko | fiat-json/src/secp256k1_montgomery_scalar_64.json                 |   0m02.82s |   89688 ko || -0m00.04s ||    -11188 ko |   -1.77% |        -12.47%
  0m02.76s |   61360 ko | fiat-go/64/p256scalar/p256scalar.go                               |   0m02.71s |   76844 ko || +0m00.04s ||    -15484 ko |   +1.84% |        -20.14%
  0m02.75s |   48676 ko | fiat-go/64/p448solinas/p448solinas.go                             |   0m02.58s |   58008 ko || +0m00.16s ||     -9332 ko |   +6.58% |        -16.08%
  0m02.75s |   80092 ko | fiat-json/src/p256_scalar_64.json                                 |   0m02.73s |   86968 ko || +0m00.02s ||     -6876 ko |   +0.73% |         -7.90%
  0m02.71s |   61136 ko | fiat-rust/src/p256_scalar_64.rs                                   |   0m02.71s |   72876 ko || +0m00.00s ||    -11740 ko |   +0.00% |        -16.10%
  0m02.71s |   58288 ko | fiat-zig/src/p256_scalar_64.zig                                   |   0m02.67s |   70452 ko || +0m00.04s ||    -12164 ko |   +1.49% |        -17.26%
  0m02.70s |   65392 ko | fiat-rust/src/secp256k1_montgomery_scalar_64.rs                   |   0m02.73s |   73348 ko || -0m00.02s ||     -7956 ko |   -1.09% |        -10.84%
  0m02.68s |   60804 ko | fiat-c/src/p256_scalar_64.c                                       |   0m02.64s |   70656 ko || +0m00.04s ||     -9852 ko |   +1.51% |        -13.94%
  0m02.67s |   61096 ko | fiat-c/src/secp256k1_montgomery_scalar_64.c                       |   0m02.70s |   73624 ko || -0m00.03s ||    -12528 ko |   -1.11% |        -17.01%
  0m02.67s |   59312 ko | fiat-zig/src/secp256k1_montgomery_scalar_64.zig                   |   0m02.66s |   69360 ko || +0m00.00s ||    -10048 ko |   +0.37% |        -14.48%
  0m02.63s |   68304 ko | fiat-bedrock2/src/curve25519_scalar_64.c                          |   0m02.32s |   93616 ko || +0m00.31s ||    -25312 ko |  +13.36% |        -27.03%
  0m02.54s |   59212 ko | fiat-go/64/secp256k1montgomery/secp256k1montgomery.go             |   0m02.44s |   73720 ko || +0m00.10s ||    -14508 ko |   +4.09% |        -19.67%
  0m02.51s |   78528 ko | fiat-json/src/secp256k1_montgomery_64.json                        |   0m02.48s |   89620 ko || +0m00.02s ||    -11092 ko |   +1.20% |        -12.37%
  0m02.44s |   60300 ko | fiat-rust/src/secp256k1_montgomery_64.rs                          |   0m02.41s |   72620 ko || +0m00.02s ||    -12320 ko |   +1.24% |        -16.96%
  0m02.42s |   59944 ko | fiat-zig/src/secp256k1_montgomery_64.zig                          |   0m02.40s |   70968 ko || +0m00.02s ||    -11024 ko |   +0.83% |        -15.53%
  0m02.40s |   61632 ko | fiat-bedrock2/src/p448_solinas_64.c                               |   0m02.08s |   77056 ko || +0m00.31s ||    -15424 ko |  +15.38% |        -20.01%
  0m02.37s |   61400 ko | fiat-c/src/secp256k1_montgomery_64.c                              |   0m02.38s |   72852 ko || -0m00.00s ||    -11452 ko |   -0.42% |        -15.71%
  0m02.34s |   59256 ko | fiat-go/64/curve25519scalar/curve25519scalar.go                   |   0m02.28s |   72580 ko || +0m00.06s ||    -13324 ko |   +2.63% |        -18.35%
  0m02.33s |   59672 ko | fiat-bedrock2/src/curve25519_32.c                                 |   0m01.97s |   76516 ko || +0m00.36s ||    -16844 ko |  +18.27% |        -22.01%
  0m02.29s |   57408 ko | fiat-zig/src/curve25519_scalar_64.zig                             |   0m02.26s |   68600 ko || +0m00.03s ||    -11192 ko |   +1.32% |        -16.31%
  0m02.27s |   76824 ko | fiat-json/src/curve25519_scalar_64.json                           |   0m02.27s |   86484 ko || +0m00.00s ||     -9660 ko |   +0.00% |        -11.16%
  0m02.27s |   59708 ko | fiat-rust/src/curve25519_scalar_64.rs                             |   0m02.27s |   70816 ko || +0m00.00s ||    -11108 ko |   +0.00% |        -15.68%
  0m02.23s |   60616 ko | fiat-c/src/curve25519_scalar_64.c                                 |   0m02.23s |   69008 ko || +0m00.00s ||     -8392 ko |   +0.00% |        -12.16%
  0m02.17s |   69392 ko | fiat-bedrock2/src/p224_64.c                                       |   0m01.85s |   95744 ko || +0m00.31s ||    -26352 ko |  +17.29% |        -27.52%
  0m02.14s |   38524 ko | fiat-go/32/curve25519/curve25519.go                               |   0m02.16s |   43904 ko || -0m00.02s ||     -5380 ko |   -0.92% |        -12.25%
  0m02.08s |   67380 ko | fiat-bedrock2/src/p256_64.c                                       |   0m01.79s |   91572 ko || +0m00.29s ||    -24192 ko |  +16.20% |        -26.41%
  0m01.99s |   55216 ko | fiat-json/src/p448_solinas_64.json                                |   0m01.88s |   59420 ko || +0m00.11s ||     -4204 ko |   +5.85% |         -7.07%
  0m01.94s |   39112 ko | fiat-zig/src/p448_solinas_64.zig                                  |   0m01.94s |   42288 ko || +0m00.00s ||     -3176 ko |   +0.00% |         -7.51%
  0m01.93s |   38224 ko | fiat-c/src/p448_solinas_64.c                                      |   0m01.90s |   42056 ko || +0m00.03s ||     -3832 ko |   +1.57% |         -9.11%
  0m01.92s |   58352 ko | fiat-go/64/p224/p224.go                                           |   0m01.73s |   73288 ko || +0m00.18s ||    -14936 ko |  +10.98% |        -20.37%
  0m01.92s |   38508 ko | fiat-rust/src/p448_solinas_64.rs                                  |   0m01.92s |   43824 ko || +0m00.00s ||     -5316 ko |   +0.00% |        -12.13%
  0m01.90s |   63580 ko | fiat-go/64/p256/p256.go                                           |   0m01.75s |   71360 ko || +0m00.14s ||     -7780 ko |   +8.57% |        -10.90%
  0m01.84s |   77768 ko | fiat-json/src/p224_64.json                                        |   0m01.83s |   87924 ko || +0m00.01s ||    -10156 ko |   +0.54% |        -11.55%
  0m01.84s |   61112 ko | fiat-zig/src/p224_64.zig                                          |   0m01.80s |   69264 ko || +0m00.04s ||     -8152 ko |   +2.22% |        -11.76%
  0m01.82s |   54540 ko | fiat-json/src/curve25519_32.json                                  |   0m01.85s |   60820 ko || -0m00.03s ||     -6280 ko |   -1.62% |        -10.32%
  0m01.81s |   75152 ko | fiat-json/src/p256_64.json                                        |   0m01.80s |   86432 ko || +0m00.01s ||    -11280 ko |   +0.55% |        -13.05%
  0m01.81s |   37200 ko | fiat-rust/src/curve25519_32.rs                                    |   0m01.78s |   42116 ko || +0m00.03s ||     -4916 ko |   +1.68% |        -11.67%
  0m01.80s |   37780 ko | fiat-c/src/curve25519_32.c                                        |   0m01.76s |   40824 ko || +0m00.04s ||     -3044 ko |   +2.27% |         -7.45%
  0m01.80s |   61280 ko | fiat-rust/src/p224_64.rs                                          |   0m01.79s |   68664 ko || +0m00.01s ||     -7384 ko |   +0.55% |        -10.75%
  0m01.80s |   36760 ko | fiat-zig/src/curve25519_32.zig                                    |   0m01.77s |   41496 ko || +0m00.03s ||     -4736 ko |   +1.69% |        -11.41%
  0m01.76s |   59756 ko | fiat-rust/src/p256_64.rs                                          |   0m01.75s |   70532 ko || +0m00.01s ||    -10776 ko |   +0.57% |        -15.27%
  0m01.75s |   59104 ko | fiat-c/src/p224_64.c                                              |   0m01.77s |   69336 ko || -0m00.02s ||    -10232 ko |   -1.12% |        -14.75%
  0m01.75s |   37028 ko | fiat-java/src/FiatCurve25519.java                                 |   0m01.76s |   42592 ko || -0m00.01s ||     -5564 ko |   -0.56% |        -13.06%
  0m01.74s |   58728 ko | fiat-zig/src/p256_64.zig                                          |   0m01.73s |   69820 ko || +0m00.01s ||    -11092 ko |   +0.57% |        -15.88%
  0m01.71s |   53640 ko | fiat-bedrock2/src/secp256k1_dettman_32.c                          |   0m01.43s |   60396 ko || +0m00.28s ||     -6756 ko |  +19.58% |        -11.18%
  0m01.70s |  614616 ko | CompilersTestCases.vo                                             |   0m01.68s |  614336 ko || +0m00.02s ||       280 ko |   +1.19% |         +0.04%
  0m01.68s |   58576 ko | fiat-c/src/p256_64.c                                              |   0m01.69s |   68252 ko || -0m00.01s ||     -9676 ko |   -0.59% |        -14.17%
  0m01.31s |   45844 ko | fiat-json/src/secp256k1_dettman_32.json                           |   0m01.32s |   48572 ko || -0m00.01s ||     -2728 ko |   -0.75% |         -5.61%
  0m01.24s |   30080 ko | fiat-c/src/secp256k1_dettman_32.c                                 |   0m01.21s |   32832 ko || +0m00.03s ||     -2752 ko |   +2.47% |         -8.38%
  0m01.24s |   32540 ko | fiat-java/src/FiatSecp256K1Dettman.java                           |   0m01.25s |   33892 ko || -0m00.01s ||     -1352 ko |   -0.80% |         -3.98%
  0m01.24s |   30760 ko | fiat-rust/src/secp256k1_dettman_32.rs                             |   0m01.22s |   31400 ko || +0m00.02s ||      -640 ko |   +1.63% |         -2.03%
  0m01.23s |   31472 ko | fiat-go/32/secp256k1dettman/secp256k1dettman.go                   |   0m01.22s |   31672 ko || +0m00.01s ||      -200 ko |   +0.81% |         -0.63%
  0m01.23s |   30428 ko | fiat-zig/src/secp256k1_dettman_32.zig                             |   0m01.22s |   31768 ko || +0m00.01s ||     -1340 ko |   +0.81% |         -4.21%
  0m00.81s |  523364 ko | MiscCompilerPassesProofsExtra.vo                                  |   0m00.85s |  522920 ko || -0m00.03s ||       444 ko |   -4.70% |         +0.08%
  0m00.74s |  472868 ko | MiscCompilerPasses.vo                                             |   0m00.74s |  445980 ko || +0m00.00s ||     26888 ko |   +0.00% |         +6.02%
  0m00.67s |   32768 ko | fiat-go/64/curve25519/curve25519.go                               |   0m00.60s |   36860 ko || +0m00.07s ||     -4092 ko |  +11.66% |        -11.10%
  0m00.64s |   39160 ko | fiat-bedrock2/src/curve25519_64.c                                 |   0m00.50s |   43428 ko || +0m00.14s ||     -4268 ko |  +28.00% |         -9.82%
  0m00.53s |   37788 ko | fiat-json/src/curve25519_64.json                                  |   0m00.51s |   39780 ko || +0m00.02s ||     -1992 ko |   +3.92% |         -5.00%
  0m00.50s |   39980 ko | fiat-bedrock2/src/curve25519_solinas_64.c                         |   0m00.42s |   47692 ko || +0m00.08s ||     -7712 ko |  +19.04% |        -16.17%
  0m00.48s |   29052 ko | fiat-zig/src/curve25519_64.zig                                    |   0m00.46s |   30704 ko || +0m00.01s ||     -1652 ko |   +4.34% |         -5.38%
  0m00.47s |  106268 ko | ExtractionOCaml/unsaturated_solinas.cmi                           |   0m00.41s |  105940 ko || +0m00.06s ||       328 ko |  +14.63% |         +0.30%
  0m00.47s |   29480 ko | fiat-rust/src/curve25519_64.rs                                    |   0m00.46s |   31568 ko || +0m00.00s ||     -2088 ko |   +2.17% |         -6.61%
  0m00.46s |  108404 ko | ExtractionOCaml/bedrock2_unsaturated_solinas.cmi                  |   0m00.46s |  108860 ko || +0m00.00s ||      -456 ko |   +0.00% |         -0.41%
  0m00.46s |  107356 ko | ExtractionOCaml/with_bedrock2_saturated_solinas.cmi               |   0m00.42s |  106764 ko || +0m00.04s ||       592 ko |   +9.52% |         +0.55%
  0m00.46s |  108988 ko | ExtractionOCaml/with_bedrock2_unsaturated_solinas.cmi             |   0m00.44s |  108080 ko || +0m00.02s ||       908 ko |   +4.54% |         +0.84%
  0m00.45s |  107644 ko | ExtractionOCaml/bedrock2_base_conversion.cmi                      |   0m00.42s |  106976 ko || +0m00.03s ||       668 ko |   +7.14% |         +0.62%
  0m00.45s |  106864 ko | ExtractionOCaml/bedrock2_dettman_multiplication.cmi               |   0m00.43s |  107592 ko || +0m00.02s ||      -728 ko |   +4.65% |         -0.67%
  0m00.45s |  107208 ko | ExtractionOCaml/bedrock2_saturated_solinas.cmi                    |   0m00.41s |  106724 ko || +0m00.04s ||       484 ko |   +9.75% |         +0.45%
  0m00.45s |  107600 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery.cmi              |   0m00.45s |  108388 ko || +0m00.00s ||      -788 ko |   +0.00% |         -0.72%
  0m00.45s |  105328 ko | ExtractionOCaml/dettman_multiplication.cmi                        |   0m00.40s |  104160 ko || +0m00.04s ||      1168 ko |  +12.49% |         +1.12%
  0m00.45s |  103952 ko | ExtractionOCaml/saturated_solinas.cmi                             |   0m00.42s |  104872 ko || +0m00.03s ||      -920 ko |   +7.14% |         -0.87%
  0m00.45s |  107276 ko | ExtractionOCaml/with_bedrock2_solinas_reduction.cmi               |   0m00.44s |  106912 ko || +0m00.01s ||       364 ko |   +2.27% |         +0.34%
  0m00.45s |  104348 ko | ExtractionOCaml/word_by_word_montgomery.cmi                       |   0m00.42s |  105376 ko || +0m00.03s ||     -1028 ko |   +7.14% |         -0.97%
  0m00.45s |   29520 ko | fiat-c/src/curve25519_64.c                                        |   0m00.45s |   31108 ko || +0m00.00s ||     -1588 ko |   +0.00% |         -5.10%
  0m00.44s |  105044 ko | ExtractionOCaml/base_conversion.cmi                               |   0m00.37s |  105320 ko || +0m00.07s ||      -276 ko |  +18.91% |         -0.26%
  0m00.44s |  103868 ko | ExtractionOCaml/solinas_reduction.cmi                             |   0m00.40s |  104720 ko || +0m00.03s ||      -852 ko |   +9.99% |         -0.81%
  0m00.44s |  107368 ko | ExtractionOCaml/with_bedrock2_dettman_multiplication.cmi          |   0m00.43s |  107640 ko || +0m00.01s ||      -272 ko |   +2.32% |         -0.25%
  0m00.44s |  110880 ko | ExtractionOCaml/with_bedrock2_fiat_crypto.cmi                     |   0m00.46s |  110604 ko || -0m00.02s ||       276 ko |   -4.34% |         +0.24%
  0m00.44s |  107632 ko | ExtractionOCaml/with_bedrock2_word_by_word_montgomery.cmi         |   0m00.44s |  108480 ko || +0m00.00s ||      -848 ko |   +0.00% |         -0.78%
  0m00.44s |   37168 ko | fiat-go/64/curve25519solinas/curve25519solinas.go                 |   0m00.41s |   43492 ko || +0m00.03s ||     -6324 ko |   +7.31% |        -14.54%
  0m00.43s |  107460 ko | ExtractionOCaml/bedrock2_solinas_reduction.cmi                    |   0m00.42s |  106644 ko || +0m00.01s ||       816 ko |   +2.38% |         +0.76%
  0m00.43s |  107832 ko | ExtractionOCaml/fiat_crypto.cmi                                   |   0m00.49s |  107092 ko || -0m00.06s ||       740 ko |  -12.24% |         +0.69%
  0m00.42s |  110252 ko | ExtractionOCaml/bedrock2_fiat_crypto.cmi                          |   0m00.45s |  109560 ko || -0m00.03s ||       692 ko |   -6.66% |         +0.63%
  0m00.42s |  107596 ko | ExtractionOCaml/with_bedrock2_base_conversion.cmi                 |   0m00.41s |  107244 ko || +0m00.01s ||       352 ko |   +2.43% |         +0.32%
  0m00.42s |   36584 ko | fiat-rust/src/curve25519_solinas_64.rs                            |   0m00.41s |   42544 ko || +0m00.01s ||     -5960 ko |   +2.43% |        -14.00%
  0m00.42s |   37132 ko | fiat-zig/src/curve25519_solinas_64.zig                            |   0m00.41s |   42192 ko || +0m00.01s ||     -5060 ko |   +2.43% |        -11.99%
  0m00.41s |   36464 ko | fiat-c/src/curve25519_solinas_64.c                                |   0m00.41s |   41988 ko || +0m00.00s ||     -5524 ko |   +0.00% |        -13.15%
  0m00.39s |   38620 ko | fiat-json/src/curve25519_solinas_64.json                          |   0m00.42s |   45928 ko || -0m00.02s ||     -7308 ko |   -7.14% |        -15.91%
  0m00.38s |  322220 ko | Language/TreeCaching.vo                                           |    N/A     |    N/A     || +0m00.38s ||    322220 ko |        ∞ |              ∞
  0m00.35s |   35256 ko | fiat-bedrock2/src/poly1305_32.c                                   |   0m00.25s |   38708 ko || +0m00.09s ||     -3452 ko |  +39.99% |         -8.91%
  0m00.31s |   32200 ko | fiat-bedrock2/src/secp256k1_dettman_64.c                          |   0m00.23s |   33888 ko || +0m00.07s ||     -1688 ko |  +34.78% |         -4.98%
  0m00.29s |   27912 ko | fiat-go/32/poly1305/poly1305.go                                   |   0m00.29s |   29464 ko || +0m00.00s ||     -1552 ko |   +0.00% |         -5.26%
  0m00.26s |   27348 ko | fiat-go/64/secp256k1dettman/secp256k1dettman.go                   |   0m00.23s |   28376 ko || +0m00.03s ||     -1028 ko |  +13.04% |         -3.62%
  0m00.24s |   33520 ko | fiat-json/src/poly1305_32.json                                    |   0m00.24s |   34772 ko || +0m00.00s ||     -1252 ko |   +0.00% |         -3.60%
  0m00.22s |   26908 ko | fiat-zig/src/poly1305_32.zig                                      |   0m00.23s |   28128 ko || -0m00.01s ||     -1220 ko |   -4.34% |         -4.33%
  0m00.21s |   27332 ko | fiat-c/src/poly1305_32.c                                          |   0m00.21s |   28264 ko || +0m00.00s ||      -932 ko |   +0.00% |         -3.29%
  0m00.21s |   27112 ko | fiat-java/src/FiatPoly1305.java                                   |   0m00.22s |   28688 ko || -0m00.01s ||     -1576 ko |   -4.54% |         -5.49%
  0m00.21s |   27048 ko | fiat-rust/src/poly1305_32.rs                                      |   0m00.22s |   28276 ko || -0m00.01s ||     -1228 ko |   -4.54% |         -4.34%
  0m00.19s |   28456 ko | fiat-go/64/poly1305/poly1305.go                                   |   0m00.17s |   29408 ko || +0m00.01s ||      -952 ko |  +11.76% |         -3.23%
  0m00.18s |   27912 ko | fiat-json/src/secp256k1_dettman_64.json                           |   0m00.19s |   28184 ko || -0m00.01s ||      -272 ko |   -5.26% |         -0.96%
  0m00.18s |   23976 ko | fiat-rust/src/secp256k1_dettman_64.rs                             |   0m00.18s |   24544 ko || +0m00.00s ||      -568 ko |   +0.00% |         -2.31%
  0m00.17s |   62552 ko | ExtractionOCaml/perf_unsaturated_solinas.cmi                      |   0m00.16s |   61744 ko || +0m00.01s ||       808 ko |   +6.25% |         +1.30%
  0m00.17s |   60964 ko | ExtractionOCaml/perf_word_by_word_montgomery.cmi                  |   0m00.17s |   61880 ko || +0m00.00s ||      -916 ko |   +0.00% |         -1.48%
  0m00.17s |   24108 ko | fiat-c/src/secp256k1_dettman_64.c                                 |   0m00.17s |   24416 ko || +0m00.00s ||      -308 ko |   +0.00% |         -1.26%
  0m00.17s |   24124 ko | fiat-zig/src/secp256k1_dettman_64.zig                             |   0m00.18s |   24224 ko || -0m00.00s ||      -100 ko |   -5.55% |         -0.41%
  0m00.16s |   31212 ko | fiat-bedrock2/src/poly1305_64.c                                   |   0m00.12s |   31312 ko || +0m00.04s ||      -100 ko |  +33.33% |         -0.31%
  0m00.13s |   30208 ko | fiat-json/src/poly1305_64.json                                    |   0m00.11s |   31244 ko || +0m00.02s ||     -1036 ko |  +18.18% |         -3.31%
  0m00.12s |   25872 ko | fiat-c/src/poly1305_64.c                                          |   0m00.12s |   26464 ko || +0m00.00s ||      -592 ko |   +0.00% |         -2.23%
  0m00.12s |   25840 ko | fiat-rust/src/poly1305_64.rs                                      |   0m00.13s |   26816 ko || -0m00.01s ||      -976 ko |   -7.69% |         -3.63%
  0m00.12s |   25336 ko | fiat-zig/src/poly1305_64.zig                                      |   0m00.12s |   26644 ko || +0m00.00s ||     -1308 ko |   +0.00% |         -4.90%
  0m00.00s |    4500 ko | ExtractionJsOfOCaml/bedrock2_fiat_crypto.cmi                      |   0m00.00s |    4380 ko || +0m00.00s ||       120 ko |   N/A    |         +2.73%
  0m00.00s |    4676 ko | ExtractionJsOfOCaml/fiat_crypto.cmi                               |   0m00.00s |    4440 ko || +0m00.00s ||       236 ko |   N/A    |         +5.31%
  0m00.00s |    4680 ko | ExtractionJsOfOCaml/with_bedrock2_fiat_crypto.cmi                 |   0m00.00s |    4444 ko || +0m00.00s ||       236 ko |   N/A    |         +5.31%

```
</p>
</details>
@JasonGross
Copy link
Collaborator Author

I thought #1809 would help but now I'm not so sure.

When I went to apply it to abstract interpretation, I very quickly ran into a problem. I think the essential difficulty can be seen in trying to make a cached version of interp. That is, I want to write a function interp : expr (var:=type.interp) t -> datastructure t such that

  1. interp(e) is O(# nodes in e) (linear)
  2. there is a function extract : datastructure t -> type.interp t that is O(1) such that extract(interp(e)) == expr.interp e
  3. there is a function invertAbs : datastructure (s -> d) -> option (type.interp s -> datastructure d) that is O(1) such that invertAbs(interp(Abs f)) = Some g and forall v, g v = interp (f v)
  4. there is an O(1) function invertApp : datastructure d -> option { s : _ & datastructure (s -> d) * datastructure s } such that invertApp(interp(App f x)) = Some (_; (interp(f), interp(x)))
  5. there is an O(1) function invertLetIn : datastructure d -> option { s : _ & datastructure s * datastructure d } such that invertLetIn(interp(LetIn x f)) = Some (_; (interp(x), interp(f (extract(interp(x))))))

I think we can do this by routing through de Bruijn indices: we build a flat tree where each node holds the interp of the expr below that point embedded in the context above that point.

And I think once we have this tree-of-interp we can do abstract interpretation without incurring too much overhead (I think we get O(# Abs binders * size of expr), which is quadratic in the worst case but manageable when # Abs binders is less than 10, which I think it is for all of our expressions (notably we aren't quadratic in the number of LetIn binders), though maybe it will still kill us on early abstract interpretation passes)

I guess if we uncurry the surrounding context we don't incur a multiplicative factor of the # abs binders (or, well, we do, but it's not beyond the overhead of using PHOAS in the first place and carrying type annotations at every node)

JasonGross added a commit that referenced this pull request Jan 23, 2024
The naive encoding of PHOAS passes that need to produce both
[expr]-like output and data-like output simultaneously involves
exponential blowup.

This commit adds caching of results (and/or intermediates) of a
data-producing PHOAS pass in a tree structure that mimics the
PHOAS expression so that a subsequent pass can consume this tree
and a PHOAS expression to produce a new expression.

More concretely, suppose we are trying to write a pass that is
`expr var1 * expr var2 -> A * expr var3`. We can define an
`expr`-like-tree-structure that (a) doesn't use higher-order
things for `Abs` nodes, and (b) stores `A` at every node. Then we
can write a pass that is `expr var1 * expr var2 -> A * tree-of-A`
and then `expr var1 * expr var2 * tree-of-A -> expr var3` such
that we incur only linear overhead.

See also #1761 and
https://github.com/mit-plv/fiat-crypto/issues/1604#issuecomment-1553341559.

Fixes #1604

<details><summary>Timing Diff</summary>
<p>

```
     After |   Peak Mem | File Name                                                         |     Before |   Peak Mem ||    Change || Change (mem) | % Change | % Change (mem)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
119m00.41s | 3712896 ko | Total Time / Peak Mem                                             | 117m55.92s | 3712368 ko || +1m04.49s ||       528 ko |   +0.91% |         +0.01%
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  4m42.94s | 2490632 ko | Bedrock/End2End/X25519/EdwardsXYZT.vo                             |   4m32.25s | 2489304 ko || +0m10.68s ||      1328 ko |   +3.92% |         +0.05%
  2m03.36s | 1846856 ko | fiat-java/src/FiatP384.java                                       |   1m53.28s | 2326980 ko || +0m10.07s ||   -480124 ko |   +8.89% |        -20.63%
  1m52.25s | 1549488 ko | fiat-go/32/p384/p384.go                                           |   1m59.07s | 2250876 ko || -0m06.81s ||   -701388 ko |   -5.72% |        -31.16%
  1m59.32s | 1691084 ko | fiat-json/src/p384_32.json                                        |   1m53.47s | 2444840 ko || +0m05.84s ||   -753756 ko |   +5.15% |        -30.83%
  0m40.01s |  131676 ko | fiat-bedrock2/src/p521_32.c                                       |   0m34.78s |  190408 ko || +0m05.22s ||    -58732 ko |  +15.03% |        -30.84%
  0m37.83s |  121704 ko | fiat-json/src/p521_32.json                                        |   0m34.11s |  133368 ko || +0m03.71s ||    -11664 ko |  +10.90% |         -8.74%
  0m33.87s |   71128 ko | fiat-java/src/FiatP521.java                                       |   0m37.83s |   83008 ko || -0m03.96s ||    -11880 ko |  -10.46% |        -14.31%
  0m05.44s |  504992 ko | MiscCompilerPassesProofs.vo                                       |   0m02.21s |  486644 ko || +0m03.23s ||     18348 ko | +146.15% |         +3.77%
  2m03.41s | 1477044 ko | fiat-bedrock2/src/p384_scalar_32.c                                |   2m01.31s | 2430696 ko || +0m02.09s ||   -953652 ko |   +1.73% |        -39.23%
  0m18.53s |  353076 ko | fiat-bedrock2/src/secp256k1_montgomery_scalar_32.c                |   0m16.23s |  549032 ko || +0m02.30s ||   -195956 ko |  +14.17% |        -35.69%
  8m04.15s | 2660384 ko | Bedrock/End2End/X25519/GarageDoor.vo                              |   8m02.97s | 2661316 ko || +0m01.17s ||      -932 ko |   +0.24% |         -0.03%
  2m03.78s | 1869460 ko | fiat-bedrock2/src/p384_32.c                                       |   2m01.97s | 2218064 ko || +0m01.81s ||   -348604 ko |   +1.48% |        -15.71%
  2m01.22s | 1828112 ko | fiat-rust/src/p384_scalar_32.rs                                   |   2m03.12s | 2298944 ko || -0m01.90s ||   -470832 ko |   -1.54% |        -20.48%
  1m58.45s | 1531664 ko | fiat-zig/src/p384_32.zig                                          |   1m59.59s | 2285948 ko || -0m01.14s ||   -754284 ko |   -0.95% |        -32.99%
  1m58.25s | 1796656 ko | fiat-c/src/p384_32.c                                              |   1m59.78s | 2324760 ko || -0m01.53s ||   -528104 ko |   -1.27% |        -22.71%
  1m31.80s | 1943396 ko | SlowPrimeSynthesisExamples.vo                                     |   1m32.99s | 1951328 ko || -0m01.19s ||     -7932 ko |   -1.27% |         -0.40%
  0m54.81s | 2485352 ko | ExtractionOCaml/fiat_crypto.ml                                    |   0m53.16s | 2488988 ko || +0m01.65s ||     -3636 ko |   +3.10% |         -0.14%
  0m52.58s | 3712896 ko | ExtractionOCaml/fiat_crypto                                       |   0m53.81s | 3710436 ko || -0m01.23s ||      2460 ko |   -2.28% |         +0.06%
  0m37.58s | 2239200 ko | ExtractionOCaml/bedrock2_solinas_reduction.ml                     |   0m36.11s | 2262736 ko || +0m01.46s ||    -23536 ko |   +4.07% |         -1.04%
  0m33.57s | 2139444 ko | ExtractionOCaml/with_bedrock2_unsaturated_solinas.ml              |   0m32.50s | 2165752 ko || +0m01.07s ||    -26308 ko |   +3.29% |         -1.21%
  0m19.58s |  275340 ko | fiat-bedrock2/src/p434_64.c                                       |   0m18.00s |  395284 ko || +0m01.57s ||   -119944 ko |   +8.77% |        -30.34%
  0m18.18s |  393308 ko | fiat-bedrock2/src/p256_scalar_32.c                                |   0m16.95s |  582384 ko || +0m01.23s ||   -189076 ko |   +7.25% |        -32.46%
  0m17.84s |  368324 ko | fiat-bedrock2/src/curve25519_scalar_32.c                          |   0m16.43s |  561904 ko || +0m01.41s ||   -193580 ko |   +8.58% |        -34.45%
  0m17.71s |  369704 ko | fiat-bedrock2/src/secp256k1_montgomery_32.c                       |   0m16.36s |  545504 ko || +0m01.35s ||   -175800 ko |   +8.25% |        -32.22%
  0m16.51s |  319708 ko | fiat-bedrock2/src/p256_32.c                                       |   0m14.82s |  528056 ko || +0m01.69s ||   -208348 ko |  +11.40% |        -39.45%
  0m16.18s | 2115400 ko | ExtractionHaskell/bedrock2_solinas_reduction.hs                   |   0m17.19s | 2115136 ko || -0m01.01s ||       264 ko |   -5.87% |         +0.01%
  0m11.82s |  162652 ko | fiat-bedrock2/src/p384_scalar_64.c                                |   0m10.80s |  248280 ko || +0m01.01s ||    -85628 ko |   +9.44% |        -34.48%
  5m31.16s | 3213148 ko | Bedrock/Field/Synthesis/Examples/p224_64_new.vo                   |   5m31.70s | 3175180 ko || -0m00.53s ||     37968 ko |   -0.16% |         +1.19%
  2m07.13s | 1398244 ko | Bedrock/End2End/X25519/Field25519.vo                              |   2m07.52s | 1385812 ko || -0m00.39s ||     12432 ko |   -0.30% |         +0.89%
  2m01.79s | 1839808 ko | fiat-json/src/p384_scalar_32.json                                 |   2m02.58s | 2162300 ko || -0m00.78s ||   -322492 ko |   -0.64% |        -14.91%
  2m01.40s | 1848688 ko | fiat-zig/src/p384_scalar_32.zig                                   |   2m01.53s | 2195116 ko || -0m00.12s ||   -346428 ko |   -0.10% |        -15.78%
  2m01.15s | 1582380 ko | fiat-go/32/p384scalar/p384scalar.go                               |   2m01.06s | 2317700 ko || +0m00.09s ||   -735320 ko |   +0.07% |        -31.72%
  2m00.71s | 1784024 ko | fiat-c/src/p384_scalar_32.c                                       |   2m01.39s | 2315572 ko || -0m00.68s ||   -531548 ko |   -0.56% |        -22.95%
  2m00.48s | 1747580 ko | fiat-java/src/FiatP384Scalar.java                                 |   2m01.02s | 2237456 ko || -0m00.53s ||   -489876 ko |   -0.44% |        -21.89%
  1m59.42s | 1705344 ko | fiat-rust/src/p384_32.rs                                          |   2m00.18s | 2292932 ko || -0m00.76s ||   -587588 ko |   -0.63% |        -25.62%
  1m31.86s | 2103612 ko | Fancy/Barrett256.vo                                               |   1m31.64s | 2070684 ko || +0m00.21s ||     32928 ko |   +0.24% |         +1.59%
  0m59.38s | 3705200 ko | ExtractionOCaml/with_bedrock2_fiat_crypto                         |   0m59.58s | 3712368 ko || -0m00.19s ||     -7168 ko |   -0.33% |         -0.19%
  0m59.22s | 3709680 ko | ExtractionOCaml/bedrock2_fiat_crypto                              |   0m59.27s | 3710700 ko || -0m00.05s ||     -1020 ko |   -0.08% |         -0.02%
  0m56.17s | 2561860 ko | ExtractionJsOfOCaml/bedrock2_fiat_crypto.ml                       |   0m55.77s | 2588396 ko || +0m00.39s ||    -26536 ko |   +0.71% |         -1.02%
  0m56.17s | 2563040 ko | ExtractionOCaml/with_bedrock2_fiat_crypto.ml                      |   0m55.50s | 2587632 ko || +0m00.67s ||    -24592 ko |   +1.20% |         -0.95%
  0m56.16s | 2566832 ko | ExtractionOCaml/bedrock2_fiat_crypto.ml                           |   0m55.39s | 2587172 ko || +0m00.76s ||    -20340 ko |   +1.39% |         -0.78%
  0m56.09s | 2560764 ko | ExtractionJsOfOCaml/with_bedrock2_fiat_crypto.ml                  |   0m55.63s | 2587748 ko || +0m00.46s ||    -26984 ko |   +0.82% |         -1.04%
  0m54.52s | 2487364 ko | ExtractionJsOfOCaml/fiat_crypto.ml                                |   0m53.72s | 2488452 ko || +0m00.80s ||     -1088 ko |   +1.48% |         -0.04%
  0m46.35s | 1864828 ko | Fancy/Montgomery256.vo                                            |   0m46.53s | 1882324 ko || -0m00.17s ||    -17496 ko |   -0.38% |         -0.92%
  0m45.86s | 2633728 ko | ExtractionOCaml/with_bedrock2_word_by_word_montgomery             |   0m45.38s | 2631336 ko || +0m00.47s ||      2392 ko |   +1.05% |         +0.09%
  0m45.13s | 2628588 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery                  |   0m44.72s | 2631196 ko || +0m00.41s ||     -2608 ko |   +0.91% |         -0.09%
  0m45.01s | 2704032 ko | ExtractionOCaml/bedrock2_solinas_reduction                        |   0m45.25s | 2704460 ko || -0m00.24s ||      -428 ko |   -0.53% |         -0.01%
  0m43.55s | 2689968 ko | ExtractionOCaml/solinas_reduction                                 |   0m43.03s | 2685092 ko || +0m00.51s ||      4876 ko |   +1.20% |         +0.18%
  0m43.13s | 2616752 ko | ExtractionOCaml/word_by_word_montgomery                           |   0m42.49s | 2619388 ko || +0m00.64s ||     -2636 ko |   +1.50% |         -0.10%
  0m42.94s | 2540252 ko | ExtractionOCaml/with_bedrock2_unsaturated_solinas                 |   0m42.98s | 2534848 ko || -0m00.03s ||      5404 ko |   -0.09% |         +0.21%
  0m42.46s | 2540704 ko | ExtractionOCaml/bedrock2_unsaturated_solinas                      |   0m42.31s | 2535612 ko || +0m00.14s ||      5092 ko |   +0.35% |         +0.20%
  0m41.09s |   68036 ko | fiat-go/32/p521/p521.go                                           |   0m41.58s |   89984 ko || -0m00.48s ||    -21948 ko |   -1.17% |        -24.39%
  0m40.27s | 2226764 ko | ExtractionOCaml/with_bedrock2_solinas_reduction                   |   0m39.94s | 2235060 ko || +0m00.33s ||     -8296 ko |   +0.82% |         -0.37%
  0m40.21s | 2342848 ko | ExtractionOCaml/unsaturated_solinas                               |   0m40.22s | 2331788 ko || -0m00.00s ||     11060 ko |   -0.02% |         +0.47%
  0m40.04s | 2222156 ko | ExtractionOCaml/with_bedrock2_base_conversion                     |   0m39.81s | 2230200 ko || +0m00.22s ||     -8044 ko |   +0.57% |         -0.36%
  0m39.77s | 2248012 ko | ExtractionOCaml/bedrock2_dettman_multiplication                   |   0m39.86s | 2246008 ko || -0m00.08s ||      2004 ko |   -0.22% |         +0.08%
  0m39.76s | 2227296 ko | ExtractionOCaml/with_bedrock2_dettman_multiplication              |   0m39.23s | 2235188 ko || +0m00.53s ||     -7892 ko |   +1.35% |         -0.35%
  0m39.69s | 2227220 ko | ExtractionOCaml/with_bedrock2_saturated_solinas                   |   0m39.75s | 2234304 ko || -0m00.06s ||     -7084 ko |   -0.15% |         -0.31%
  0m39.22s | 2222396 ko | ExtractionOCaml/bedrock2_base_conversion                          |   0m39.00s | 2225128 ko || +0m00.21s ||     -2732 ko |   +0.56% |         -0.12%
  0m39.10s | 2225812 ko | ExtractionOCaml/bedrock2_saturated_solinas                        |   0m38.87s | 2230904 ko || +0m00.23s ||     -5092 ko |   +0.59% |         -0.22%
  0m38.08s |   65920 ko | fiat-rust/src/p521_32.rs                                          |   0m37.67s |   82364 ko || +0m00.40s ||    -16444 ko |   +1.08% |        -19.96%
  0m37.69s |   69868 ko | fiat-zig/src/p521_32.zig                                          |   0m37.76s |   84304 ko || -0m00.07s ||    -14436 ko |   -0.18% |        -17.12%
  0m37.58s |   63900 ko | fiat-c/src/p521_32.c                                              |   0m37.78s |   79712 ko || -0m00.20s ||    -15812 ko |   -0.52% |        -19.83%
  0m37.16s | 1927432 ko | ExtractionOCaml/dettman_multiplication                            |   0m36.77s | 1927468 ko || +0m00.38s ||       -36 ko |   +1.06% |         -0.00%
  0m36.68s | 2208344 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery.ml               |   0m36.27s | 2209520 ko || +0m00.40s ||     -1176 ko |   +1.13% |         -0.05%
  0m36.58s | 1889596 ko | ExtractionOCaml/base_conversion                                   |   0m35.96s | 1882400 ko || +0m00.61s ||      7196 ko |   +1.72% |         +0.38%
  0m36.54s | 1901292 ko | ExtractionOCaml/saturated_solinas                                 |   0m36.23s | 1900756 ko || +0m00.31s ||       536 ko |   +0.85% |         +0.02%
  0m36.51s | 2207332 ko | ExtractionOCaml/with_bedrock2_word_by_word_montgomery.ml          |   0m36.53s | 2209884 ko || -0m00.02s ||     -2552 ko |   -0.05% |         -0.11%
  0m35.76s | 2116004 ko | ExtractionOCaml/solinas_reduction.ml                              |   0m35.10s | 2145732 ko || +0m00.65s ||    -29728 ko |   +1.88% |         -1.38%
  0m34.55s | 2143460 ko | ExtractionOCaml/word_by_word_montgomery.ml                        |   0m34.24s | 2117800 ko || +0m00.30s ||     25660 ko |   +0.90% |         +1.21%
  0m33.49s | 2139300 ko | ExtractionOCaml/bedrock2_unsaturated_solinas.ml                   |   0m34.27s | 2166160 ko || -0m00.78s ||    -26860 ko |   -2.27% |         -1.23%
  0m32.98s | 1695900 ko | ExtractionOCaml/perf_unsaturated_solinas                          |   0m32.89s | 1695528 ko || +0m00.08s ||       372 ko |   +0.27% |         +0.02%
  0m32.90s | 1714104 ko | ExtractionOCaml/perf_word_by_word_montgomery                      |   0m33.02s | 1718156 ko || -0m00.12s ||     -4052 ko |   -0.36% |         -0.23%
  0m32.54s | 1220348 ko | Bedrock/End2End/X25519/MontgomeryLadder.vo                        |   0m32.68s | 1220032 ko || -0m00.14s ||       316 ko |   -0.42% |         +0.02%
  0m31.67s | 2044364 ko | ExtractionOCaml/unsaturated_solinas.ml                            |   0m31.31s | 2032268 ko || +0m00.36s ||     12096 ko |   +1.14% |         +0.59%
  0m30.89s | 1253684 ko | Bedrock/End2End/X25519/GarageDoorTop.vo                           |   0m31.05s | 1254284 ko || -0m00.16s ||      -600 ko |   -0.51% |         -0.04%
  0m30.19s | 1476196 ko | StandaloneDebuggingExamples.vo                                    |   0m29.94s | 1479252 ko || +0m00.25s ||     -3056 ko |   +0.83% |         -0.20%
  0m29.87s | 2063484 ko | ExtractionOCaml/bedrock2_dettman_multiplication.ml                |   0m29.64s | 2035996 ko || +0m00.23s ||     27488 ko |   +0.77% |         +1.35%
  0m29.15s | 2051876 ko | ExtractionOCaml/with_bedrock2_base_conversion.ml                  |   0m28.92s | 2028232 ko || +0m00.22s ||     23644 ko |   +0.79% |         +1.16%
  0m29.09s | 2053704 ko | ExtractionOCaml/bedrock2_base_conversion.ml                       |   0m28.75s | 2027468 ko || +0m00.33s ||     26236 ko |   +1.18% |         +1.29%
  0m28.98s | 2056312 ko | ExtractionOCaml/with_bedrock2_solinas_reduction.ml                |   0m28.86s | 2047824 ko || +0m00.12s ||      8488 ko |   +0.41% |         +0.41%
  0m28.97s | 2057432 ko | ExtractionOCaml/bedrock2_saturated_solinas.ml                     |   0m28.77s | 2048548 ko || +0m00.19s ||      8884 ko |   +0.69% |         +0.43%
  0m28.90s | 2059464 ko | ExtractionOCaml/with_bedrock2_saturated_solinas.ml                |   0m28.61s | 2049520 ko || +0m00.28s ||      9944 ko |   +1.01% |         +0.48%
  0m28.77s | 2054636 ko | ExtractionOCaml/with_bedrock2_dettman_multiplication.ml           |   0m28.74s | 2048512 ko || +0m00.03s ||      6124 ko |   +0.10% |         +0.29%
  0m28.00s | 1985508 ko | ExtractionOCaml/dettman_multiplication.ml                         |   0m27.78s | 1986744 ko || +0m00.21s ||     -1236 ko |   +0.79% |         -0.06%
  0m27.05s | 1957812 ko | ExtractionOCaml/saturated_solinas.ml                              |   0m26.89s | 1912860 ko || +0m00.16s ||     44952 ko |   +0.59% |         +2.34%
  0m26.98s | 1949468 ko | ExtractionOCaml/base_conversion.ml                                |   0m26.79s | 1938188 ko || +0m00.19s ||     11280 ko |   +0.70% |         +0.58%
  0m25.51s | 1302468 ko | PerfTesting/PerfTestSearch.vo                                     |   0m25.39s | 1303484 ko || +0m00.12s ||     -1016 ko |   +0.47% |         -0.07%
  0m21.37s | 2440932 ko | ExtractionHaskell/with_bedrock2_fiat_crypto.hs                    |   0m21.23s | 2439220 ko || +0m00.14s ||      1712 ko |   +0.65% |         +0.07%
  0m20.99s | 1843996 ko | ExtractionOCaml/perf_unsaturated_solinas.ml                       |   0m21.09s | 1833016 ko || -0m00.10s ||     10980 ko |   -0.47% |         +0.59%
  0m20.95s | 2439784 ko | ExtractionHaskell/bedrock2_fiat_crypto.hs                         |   0m19.96s | 2438120 ko || +0m00.98s ||      1664 ko |   +4.95% |         +0.06%
  0m20.89s | 1114864 ko | PushButtonSynthesis/UnsaturatedSolinas.vo                         |   0m20.95s | 1114468 ko || -0m00.05s ||       396 ko |   -0.28% |         +0.03%
  0m20.84s | 1899964 ko | ExtractionOCaml/perf_word_by_word_montgomery.ml                   |   0m20.86s | 1929696 ko || -0m00.01s ||    -29732 ko |   -0.09% |         -1.54%
  0m20.51s | 2338044 ko | ExtractionHaskell/fiat_crypto.hs                                  |   0m20.59s | 2338048 ko || -0m00.07s ||        -4 ko |   -0.38% |         -0.00%
  0m18.63s | 1116056 ko | PushButtonSynthesis/WordByWordMontgomery.vo                       |   0m18.24s | 1121068 ko || +0m00.39s ||     -5012 ko |   +2.13% |         -0.44%
  0m18.54s | 1076284 ko | Bedrock/End2End/Poly1305/Field1305.vo                             |   0m18.50s | 1076712 ko || +0m00.03s ||      -428 ko |   +0.21% |         -0.03%
  0m18.24s |  234376 ko | fiat-go/64/p434/p434.go                                           |   0m17.55s |  344796 ko || +0m00.68s ||   -110420 ko |   +3.93% |        -32.02%
  0m17.84s |  266772 ko | fiat-rust/src/p434_64.rs                                          |   0m17.62s |  331464 ko || +0m00.21s ||    -64692 ko |   +1.24% |        -19.51%
  0m17.69s |  258268 ko | fiat-json/src/p434_64.json                                        |   0m17.60s |  354448 ko || +0m00.08s ||    -96180 ko |   +0.51% |        -27.13%
  0m17.55s |  238796 ko | fiat-zig/src/p434_64.zig                                          |   0m17.38s |  332096 ko || +0m00.17s ||    -93300 ko |   +0.97% |        -28.09%
  0m17.49s |  239600 ko | fiat-c/src/p434_64.c                                              |   0m17.15s |  320692 ko || +0m00.33s ||    -81092 ko |   +1.98% |        -25.28%
  0m17.34s | 1288544 ko | PerfTesting/PerfTestSearchPattern.vo                              |   0m17.26s | 1289792 ko || +0m00.07s ||     -1248 ko |   +0.46% |         -0.09%
  0m17.09s | 2115764 ko | ExtractionHaskell/with_bedrock2_solinas_reduction.hs              |   0m17.00s | 2115168 ko || +0m00.08s ||       596 ko |   +0.52% |         +0.02%
  0m17.02s | 2096116 ko | ExtractionHaskell/with_bedrock2_word_by_word_montgomery.hs        |   0m16.93s | 2095144 ko || +0m00.08s ||       972 ko |   +0.53% |         +0.04%
  0m16.92s | 1091012 ko | Bedrock/Field/Translation/Proofs/Func.vo                          |   0m16.84s | 1088956 ko || +0m00.08s ||      2056 ko |   +0.47% |         +0.18%
  0m16.85s | 2095212 ko | ExtractionHaskell/bedrock2_word_by_word_montgomery.hs             |   0m17.03s | 2096432 ko || -0m00.17s ||     -1220 ko |   -1.05% |         -0.05%
  0m16.73s |  389052 ko | fiat-java/src/FiatP256Scalar.java                                 |   0m16.57s |  465392 ko || +0m00.16s ||    -76340 ko |   +0.96% |        -16.40%
  0m16.73s |  381468 ko | fiat-json/src/p256_scalar_32.json                                 |   0m16.72s |  550468 ko || +0m00.01s ||   -169000 ko |   +0.05% |        -30.70%
  0m16.69s |  365096 ko | fiat-go/32/secp256k1montgomeryscalar/secp256k1montgomeryscalar.go |   0m16.22s |  436688 ko || +0m00.47s ||    -71592 ko |   +2.89% |        -16.39%
  0m16.68s |  368308 ko | fiat-java/src/FiatSecp256K1MontgomeryScalar.java                  |   0m16.58s |  508480 ko || +0m00.10s ||   -140172 ko |   +0.60% |        -27.56%
  0m16.58s |  335988 ko | fiat-rust/src/p256_scalar_32.rs                                   |   0m16.32s |  452024 ko || +0m00.25s ||   -116036 ko |   +1.59% |        -25.67%
  0m16.45s |  363824 ko | fiat-go/32/p256scalar/p256scalar.go                               |   0m16.36s |  443652 ko || +0m00.08s ||    -79828 ko |   +0.55% |        -17.99%
  0m16.38s | 2041708 ko | ExtractionHaskell/solinas_reduction.hs                            |   0m16.21s | 2038736 ko || +0m00.16s ||      2972 ko |   +1.04% |         +0.14%
  0m16.35s |  368404 ko | fiat-json/src/secp256k1_montgomery_scalar_32.json                 |   0m16.23s |  567364 ko || +0m00.12s ||   -198960 ko |   +0.73% |        -35.06%
  0m16.30s |  328068 ko | fiat-zig/src/p256_scalar_32.zig                                   |   0m16.21s |  439912 ko || +0m00.08s ||   -111844 ko |   +0.55% |        -25.42%
  0m16.26s | 1997856 ko | ExtractionHaskell/word_by_word_montgomery.hs                      |   0m16.14s | 1999068 ko || +0m00.12s ||     -1212 ko |   +0.74% |         -0.06%
  0m16.26s |  312564 ko | fiat-rust/src/secp256k1_montgomery_scalar_32.rs                   |   0m16.01s |  440048 ko || +0m00.25s ||   -127484 ko |   +1.56% |        -28.97%
  0m16.23s |  405148 ko | fiat-json/src/secp256k1_montgomery_32.json                        |   0m15.92s |  553616 ko || +0m00.31s ||   -148468 ko |   +1.94% |        -26.81%
  0m16.18s |  387012 ko | fiat-rust/src/curve25519_scalar_32.rs                             |   0m15.90s |  483240 ko || +0m00.27s ||    -96228 ko |   +1.76% |        -19.91%
  0m16.13s |  324784 ko | fiat-zig/src/secp256k1_montgomery_scalar_32.zig                   |   0m16.10s |  501740 ko || +0m00.02s ||   -176956 ko |   +0.18% |        -35.26%
  0m16.11s |  364752 ko | fiat-zig/src/secp256k1_montgomery_32.zig                          |   0m16.12s |  496352 ko || -0m00.01s ||   -131600 ko |   -0.06% |        -26.51%
  0m16.10s |  373100 ko | fiat-c/src/secp256k1_montgomery_scalar_32.c                       |   0m15.90s |  443492 ko || +0m00.20s ||    -70392 ko |   +1.25% |        -15.87%
  0m16.08s |  363424 ko | fiat-rust/src/secp256k1_montgomery_32.rs                          |   0m15.90s |  496056 ko || +0m00.17s ||   -132632 ko |   +1.13% |        -26.73%
  0m16.07s |  398244 ko | fiat-json/src/curve25519_scalar_32.json                           |   0m16.05s |  542064 ko || +0m00.01s ||   -143820 ko |   +0.12% |        -26.53%
  0m16.06s |  368996 ko | fiat-go/32/curve25519scalar/curve25519scalar.go                   |   0m15.69s |  483624 ko || +0m00.36s ||   -114628 ko |   +2.35% |        -23.70%
  0m16.02s |  375044 ko | fiat-java/src/FiatSecp256K1Montgomery.java                        |   0m15.75s |  504728 ko || +0m00.26s ||   -129684 ko |   +1.71% |        -25.69%
  0m16.01s | 2039252 ko | ExtractionHaskell/with_bedrock2_unsaturated_solinas.hs            |   0m15.95s | 2032812 ko || +0m00.06s ||      6440 ko |   +0.37% |         +0.31%
  0m16.01s |  364588 ko | fiat-go/32/secp256k1montgomery/secp256k1montgomery.go             |   0m15.84s |  495008 ko || +0m00.17s ||   -130420 ko |   +1.07% |        -26.34%
  0m15.86s | 2037300 ko | ExtractionHaskell/bedrock2_unsaturated_solinas.hs                 |   0m15.19s | 2031872 ko || +0m00.67s ||      5428 ko |   +4.41% |         +0.26%
  0m15.83s |  366152 ko | fiat-zig/src/curve25519_scalar_32.zig                             |   0m15.71s |  491216 ko || +0m00.11s ||   -125064 ko |   +0.76% |        -25.46%
  0m15.72s |  365060 ko | fiat-c/src/curve25519_scalar_32.c                                 |   0m15.42s |  450720 ko || +0m00.30s ||    -85660 ko |   +1.94% |        -19.00%
  0m15.58s |  341664 ko | fiat-java/src/FiatCurve25519Scalar.java                           |   0m16.16s |  435944 ko || -0m00.58s ||    -94280 ko |   -3.58% |        -21.62%
  0m15.57s |  375192 ko | fiat-c/src/secp256k1_montgomery_32.c                              |   0m15.49s |  494320 ko || +0m00.08s ||   -119128 ko |   +0.51% |        -24.09%
  0m15.53s | 1102596 ko | Bedrock/Field/Translation/Proofs/Cmd.vo                           |   0m15.65s | 1105296 ko || -0m00.12s ||     -2700 ko |   -0.76% |         -0.24%
  0m15.50s | 1939896 ko | ExtractionHaskell/unsaturated_solinas.hs                          |   0m15.57s | 1940196 ko || -0m00.07s ||      -300 ko |   -0.44% |         -0.01%
  0m15.50s |  361108 ko | fiat-c/src/p256_scalar_32.c                                       |   0m16.04s |  480596 ko || -0m00.53s ||   -119488 ko |   -3.36% |        -24.86%
  0m15.37s | 1126812 ko | Bedrock/Field/Synthesis/New/Signature.vo                          |   0m15.35s | 1124668 ko || +0m00.01s ||      2144 ko |   +0.13% |         +0.19%
  0m15.28s |  358408 ko | fiat-json/src/p256_32.json                                        |   0m15.18s |  516016 ko || +0m00.09s ||   -157608 ko |   +0.65% |        -30.54%
  0m15.23s |  380476 ko | fiat-zig/src/p256_32.zig                                          |   0m15.25s |  485876 ko || -0m00.01s ||   -105400 ko |   -0.13% |        -21.69%
  0m15.17s |  391176 ko | fiat-rust/src/p256_32.rs                                          |   0m14.97s |  480552 ko || +0m00.19s ||    -89376 ko |   +1.33% |        -18.59%
  0m15.16s |  327160 ko | fiat-go/32/p256/p256.go                                           |   0m15.06s |  476880 ko || +0m00.09s ||   -149720 ko |   +0.66% |        -31.39%
  0m15.10s | 1951784 ko | ExtractionHaskell/with_bedrock2_dettman_multiplication.hs         |   0m15.13s | 1950212 ko || -0m00.03s ||      1572 ko |   -0.19% |         +0.08%
  0m15.02s | 1954488 ko | ExtractionHaskell/bedrock2_dettman_multiplication.hs              |   0m15.01s | 1950572 ko || +0m00.00s ||      3916 ko |   +0.06% |         +0.20%
  0m14.97s |  386420 ko | fiat-java/src/FiatP256.java                                       |   0m14.94s |  487428 ko || +0m00.03s ||   -101008 ko |   +0.20% |        -20.72%
  0m14.94s | 1942204 ko | ExtractionHaskell/bedrock2_saturated_solinas.hs                   |   0m14.78s | 1946752 ko || +0m00.16s ||     -4548 ko |   +1.08% |         -0.23%
  0m14.92s | 1941392 ko | ExtractionHaskell/with_bedrock2_base_conversion.hs                |   0m14.82s | 1944492 ko || +0m00.09s ||     -3100 ko |   +0.67% |         -0.15%
  0m14.85s | 1943860 ko | ExtractionHaskell/with_bedrock2_saturated_solinas.hs              |   0m14.46s | 1943428 ko || +0m00.38s ||       432 ko |   +2.69% |         +0.02%
  0m14.78s | 1942620 ko | ExtractionHaskell/bedrock2_base_conversion.hs                     |   0m14.85s | 1947088 ko || -0m00.07s ||     -4468 ko |   -0.47% |         -0.22%
  0m14.72s |  294600 ko | fiat-c/src/p256_32.c                                              |   0m14.14s |  478440 ko || +0m00.58s ||   -183840 ko |   +4.10% |        -38.42%
  0m14.46s | 1883616 ko | ExtractionHaskell/dettman_multiplication.hs                       |   0m14.48s | 1885612 ko || -0m00.01s ||     -1996 ko |   -0.13% |         -0.10%
  0m14.41s | 1876800 ko | ExtractionHaskell/saturated_solinas.hs                            |   0m14.42s | 1872284 ko || -0m00.00s ||      4516 ko |   -0.06% |         +0.24%
  0m14.25s | 1861548 ko | ExtractionHaskell/base_conversion.hs                              |   0m14.12s | 1862120 ko || +0m00.13s ||      -572 ko |   +0.92% |         -0.03%
  0m13.00s | 1550136 ko | Bedrock/Field/Synthesis/New/WordByWordMontgomery.vo               |   0m13.03s | 1549688 ko || -0m00.02s ||       448 ko |   -0.23% |         +0.02%
  0m11.04s |  157128 ko | fiat-go/64/p384scalar/p384scalar.go                               |   0m10.77s |  209908 ko || +0m00.26s ||    -52780 ko |   +2.50% |        -25.14%
  0m10.88s |  187180 ko | fiat-json/src/p384_scalar_64.json                                 |   0m10.96s |  250972 ko || -0m00.08s ||    -63792 ko |   -0.72% |        -25.41%
  0m10.83s |  165252 ko | fiat-rust/src/p384_scalar_64.rs                                   |   0m10.40s |  207016 ko || +0m00.42s ||    -41764 ko |   +4.13% |        -20.17%
  0m10.74s |  162468 ko | fiat-zig/src/p384_scalar_64.zig                                   |   0m10.55s |  182100 ko || +0m00.18s ||    -19632 ko |   +1.80% |        -10.78%
  0m10.64s |  157828 ko | fiat-c/src/p384_scalar_64.c                                       |   0m10.62s |  194572 ko || +0m00.02s ||    -36744 ko |   +0.18% |        -18.88%
  0m09.95s |  171536 ko | fiat-bedrock2/src/p384_64.c                                       |   0m09.13s |  247964 ko || +0m00.81s ||    -76428 ko |   +8.98% |        -30.82%
  0m09.83s |  241628 ko | fiat-bedrock2/src/p224_32.c                                       |   0m09.04s |  359972 ko || +0m00.79s ||   -118344 ko |   +8.73% |        -32.87%
  0m09.36s |  172540 ko | fiat-go/64/p384/p384.go                                           |   0m09.03s |  209672 ko || +0m00.33s ||    -37132 ko |   +3.65% |        -17.70%
  0m09.30s | 1245696 ko | Bedrock/End2End/X25519/MontgomeryLadderProperties.vo              |   0m09.06s | 1247292 ko || +0m00.24s ||     -1596 ko |   +2.64% |         -0.12%
  0m09.26s |  990120 ko | BoundsPipeline.vo                                                 |   0m10.17s | 1001900 ko || -0m00.91s ||    -11780 ko |   -8.94% |         -1.17%
  0m09.22s |  196596 ko | fiat-json/src/p384_64.json                                        |   0m09.07s |  231996 ko || +0m00.15s ||    -35400 ko |   +1.65% |        -15.25%
  0m09.16s |  168928 ko | fiat-rust/src/p384_64.rs                                          |   0m08.94s |  193548 ko || +0m00.22s ||    -24620 ko |   +2.46% |        -12.72%
  0m09.02s |  148804 ko | fiat-zig/src/p384_64.zig                                          |   0m09.06s |  194724 ko || -0m00.04s ||    -45920 ko |   -0.44% |        -23.58%
  0m08.95s |  221716 ko | fiat-rust/src/p224_32.rs                                          |   0m08.80s |  295280 ko || +0m00.14s ||    -73564 ko |   +1.70% |        -24.91%
  0m08.91s |  270756 ko | fiat-json/src/p224_32.json                                        |   0m08.94s |  345988 ko || -0m00.02s ||    -75232 ko |   -0.33% |        -21.74%
  0m08.90s |  211804 ko | fiat-zig/src/p224_32.zig                                          |   0m08.61s |  304584 ko || +0m00.29s ||    -92780 ko |   +3.36% |        -30.46%
  0m08.89s |  152768 ko | fiat-c/src/p384_64.c                                              |   0m08.89s |  193164 ko || +0m00.00s ||    -40396 ko |   +0.00% |        -20.91%
  0m08.89s |  224580 ko | fiat-java/src/FiatP224.java                                       |   0m08.75s |  308952 ko || +0m00.14s ||    -84372 ko |   +1.60% |        -27.30%
  0m08.87s |  208792 ko | fiat-go/32/p224/p224.go                                           |   0m08.71s |  273008 ko || +0m00.15s ||    -64216 ko |   +1.83% |        -23.52%
  0m08.34s |  216488 ko | fiat-c/src/p224_32.c                                              |   0m08.48s |  294192 ko || -0m00.14s ||    -77704 ko |   -1.65% |        -26.41%
  0m08.30s |  130604 ko | fiat-json/src/p448_solinas_32.json                                |   0m08.28s |  138976 ko || +0m00.02s ||     -8372 ko |   +0.24% |         -6.02%
  0m08.08s |  997024 ko | PushButtonSynthesis/BaseConversion.vo                             |   0m08.01s |  998652 ko || +0m00.07s ||     -1628 ko |   +0.87% |         -0.16%
  0m07.97s |   63136 ko | fiat-rust/src/p448_solinas_32.rs                                  |   0m07.94s |   81796 ko || +0m00.02s ||    -18660 ko |   +0.37% |        -22.81%
  0m07.87s |   63124 ko | fiat-c/src/p448_solinas_32.c                                      |   0m07.89s |   79116 ko || -0m00.01s ||    -15992 ko |   -0.25% |        -20.21%
  0m07.76s |  971804 ko | PushButtonSynthesis/SmallExamples.vo                              |   0m07.72s |  963916 ko || +0m00.04s ||      7888 ko |   +0.51% |         +0.81%
  0m07.66s |   66928 ko | fiat-zig/src/p448_solinas_32.zig                                  |   0m07.94s |   81272 ko || -0m00.28s ||    -14344 ko |   -3.52% |        -17.64%
  0m07.15s | 1014500 ko | PushButtonSynthesis/Primitives.vo                                 |   0m07.14s | 1014268 ko || +0m00.01s ||       232 ko |   +0.14% |         +0.02%
  0m06.44s |  998480 ko | PushButtonSynthesis/SolinasReduction.vo                           |   0m06.41s |  991736 ko || +0m00.03s ||      6744 ko |   +0.46% |         +0.68%
  0m06.41s |   50340 ko | fiat-go/64/p521/p521.go                                           |   0m05.58s |   60156 ko || +0m00.83s ||     -9816 ko |  +14.87% |        -16.31%
  0m05.84s |   64284 ko | fiat-bedrock2/src/p521_64.c                                       |   0m05.52s |   79608 ko || +0m00.32s ||    -15324 ko |   +5.79% |        -19.24%
  0m05.47s |   40672 ko | fiat-rust/src/p521_64.rs                                          |   0m05.41s |   44064 ko || +0m00.05s ||     -3392 ko |   +1.10% |         -7.69%
  0m05.46s |   39792 ko | fiat-zig/src/p521_64.zig                                          |   0m05.39s |   45116 ko || +0m00.07s ||     -5324 ko |   +1.29% |        -11.80%
  0m05.42s |   40516 ko | fiat-c/src/p521_64.c                                              |   0m05.29s |   44236 ko || +0m00.12s ||     -3720 ko |   +2.45% |         -8.40%
  0m05.41s | 1128812 ko | Bedrock/Field/Synthesis/New/UnsaturatedSolinas.vo                 |   0m05.43s | 1137752 ko || -0m00.01s ||     -8940 ko |   -0.36% |         -0.78%
  0m05.41s |  990868 ko | PushButtonSynthesis/BarrettReduction.vo                           |   0m05.41s |  994048 ko || +0m00.00s ||     -3180 ko |   +0.00% |         -0.31%
  0m05.39s | 1050088 ko | CLI.vo                                                            |   0m05.46s | 1047924 ko || -0m00.07s ||      2164 ko |   -1.28% |         +0.20%
  0m05.38s |   57020 ko | fiat-json/src/p521_64.json                                        |   0m05.37s |   61652 ko || +0m00.00s ||     -4632 ko |   +0.18% |         -7.51%
  0m04.39s |  978576 ko | PushButtonSynthesis/DettmanMultiplication.vo                      |   0m04.42s |  978280 ko || -0m00.03s ||       296 ko |   -0.67% |         +0.03%
  0m04.14s | 1005104 ko | Bedrock/Field/Translation/Proofs/ValidComputable/Cmd.vo           |   0m04.12s | 1002340 ko || +0m00.01s ||      2764 ko |   +0.48% |         +0.27%
  0m04.09s |  986744 ko | PushButtonSynthesis/SaturatedSolinas.vo                           |   0m03.87s |  988116 ko || +0m00.21s ||     -1372 ko |   +5.68% |         -0.13%
  0m04.05s | 1408000 ko | Bedrock/Everything.vo                                             |   0m04.05s | 1407508 ko || +0m00.00s ||       492 ko |   +0.00% |         +0.03%
  0m03.79s |  985896 ko | PushButtonSynthesis/FancyMontgomeryReduction.vo                   |   0m03.79s |  979824 ko || +0m00.00s ||      6072 ko |   +0.00% |         +0.61%
  0m03.62s | 1274284 ko | Everything.vo                                                     |   0m03.80s | 1273676 ko || -0m00.17s ||       608 ko |   -4.73% |         +0.04%
  0m03.56s |  995868 ko | Rewriter/PerfTesting/Core.vo                                      |   0m03.53s |  993696 ko || +0m00.03s ||      2172 ko |   +0.84% |         +0.21%
  0m03.52s | 1232320 ko | PerfTesting/PerfTestPrint.vo                                      |   0m03.54s | 1231900 ko || -0m00.02s ||       420 ko |   -0.56% |         +0.03%
  0m03.19s | 1006604 ko | StandaloneMonadicUtils.vo                                         |   0m03.17s | 1006356 ko || +0m00.02s ||       248 ko |   +0.63% |         +0.02%
  0m03.18s |   71672 ko | fiat-bedrock2/src/p256_scalar_64.c                                |   0m02.76s |  101396 ko || +0m00.42s ||    -29724 ko |  +15.21% |        -29.31%
  0m03.17s | 1033928 ko | Bedrock/Standalone/StandaloneJsOfOCamlMain.vo                     |   0m03.06s | 1033420 ko || +0m00.10s ||       508 ko |   +3.59% |         +0.04%
  0m03.13s |  997304 ko | Bedrock/Field/Translation/Proofs/ValidComputable/Func.vo          |   0m03.08s |  994328 ko || +0m00.04s ||      2976 ko |   +1.62% |         +0.29%
  0m03.11s | 1035436 ko | Bedrock/Standalone/StandaloneHaskellMain.vo                       |   0m03.12s | 1035108 ko || -0m00.01s ||       328 ko |   -0.32% |         +0.03%
  0m03.10s |   72376 ko | fiat-bedrock2/src/secp256k1_montgomery_scalar_64.c                |   0m02.73s |   99420 ko || +0m00.37s ||    -27044 ko |  +13.55% |        -27.20%
  0m03.07s | 1035720 ko | Bedrock/Standalone/StandaloneOCamlMain.vo                         |   0m03.06s | 1035304 ko || +0m00.00s ||       416 ko |   +0.32% |         +0.04%
  0m03.07s | 1002468 ko | StandaloneHaskellMain.vo                                          |   0m03.03s | 1001988 ko || +0m00.04s ||       480 ko |   +1.32% |         +0.04%
  0m03.06s |  997784 ko | Bedrock/Field/Stringification/Stringification.vo                  |   0m03.09s |  997184 ko || -0m00.02s ||       600 ko |   -0.97% |         +0.06%
  0m03.02s | 1011104 ko | StandaloneOCamlMain.vo                                            |   0m03.03s | 1010576 ko || -0m00.00s ||       528 ko |   -0.33% |         +0.05%
  0m03.01s |  942960 ko | Bedrock/Field/Translation/Cmd.vo                                  |   0m03.01s |  944416 ko || +0m00.00s ||     -1456 ko |   +0.00% |         -0.15%
  0m02.98s |  943312 ko | Bedrock/Field/Translation/Func.vo                                 |   0m02.96s |  942944 ko || +0m00.02s ||       368 ko |   +0.67% |         +0.03%
  0m02.97s | 1011444 ko | StandaloneJsOfOCamlMain.vo                                        |   0m02.99s | 1011032 ko || -0m00.02s ||       412 ko |   -0.66% |         +0.04%
  0m02.94s | 1021728 ko | Rewriter/PerfTesting/StandaloneOCamlMain.vo                       |   0m02.97s | 1021312 ko || -0m00.03s ||       416 ko |   -1.01% |         +0.04%
  0m02.91s |  975208 ko | Bedrock/Field/Translation/Parameters/Defaults64.vo                |   0m02.84s |  974984 ko || +0m00.07s ||       224 ko |   +2.46% |         +0.02%
  0m02.91s |  975304 ko | Bedrock/Field/Translation/Parameters/FE310.vo                     |   0m02.93s |  975164 ko || -0m00.02s ||       140 ko |   -0.68% |         +0.01%
  0m02.89s |  967920 ko | Bedrock/Field/Translation/Parameters/Defaults.vo                  |   0m02.84s |  967592 ko || +0m00.05s ||       328 ko |   +1.76% |         +0.03%
  0m02.86s |  975308 ko | Bedrock/Field/Translation/Parameters/Defaults32.vo                |   0m02.91s |  975076 ko || -0m00.05s ||       232 ko |   -1.71% |         +0.02%
  0m02.84s |  993860 ko | Bedrock/Field/Synthesis/New/ComputedOp.vo                         |   0m02.84s |  991728 ko || +0m00.00s ||      2132 ko |   +0.00% |         +0.21%
  0m02.79s |   70364 ko | fiat-bedrock2/src/secp256k1_montgomery_64.c                       |   0m02.47s |   97868 ko || +0m00.31s ||    -27504 ko |  +12.95% |        -28.10%
  0m02.78s |   62840 ko | fiat-go/64/secp256k1montgomeryscalar/secp256k1montgomeryscalar.go |   0m02.65s |   77260 ko || +0m00.12s ||    -14420 ko |   +4.90% |        -18.66%
  0m02.77s |   78500 ko | fiat-json/src/secp256k1_montgomery_scalar_64.json                 |   0m02.82s |   89688 ko || -0m00.04s ||    -11188 ko |   -1.77% |        -12.47%
  0m02.76s |   61360 ko | fiat-go/64/p256scalar/p256scalar.go                               |   0m02.71s |   76844 ko || +0m00.04s ||    -15484 ko |   +1.84% |        -20.14%
  0m02.75s |   48676 ko | fiat-go/64/p448solinas/p448solinas.go                             |   0m02.58s |   58008 ko || +0m00.16s ||     -9332 ko |   +6.58% |        -16.08%
  0m02.75s |   80092 ko | fiat-json/src/p256_scalar_64.json                                 |   0m02.73s |   86968 ko || +0m00.02s ||     -6876 ko |   +0.73% |         -7.90%
  0m02.71s |   61136 ko | fiat-rust/src/p256_scalar_64.rs                                   |   0m02.71s |   72876 ko || +0m00.00s ||    -11740 ko |   +0.00% |        -16.10%
  0m02.71s |   58288 ko | fiat-zig/src/p256_scalar_64.zig                                   |   0m02.67s |   70452 ko || +0m00.04s ||    -12164 ko |   +1.49% |        -17.26%
  0m02.70s |   65392 ko | fiat-rust/src/secp256k1_montgomery_scalar_64.rs                   |   0m02.73s |   73348 ko || -0m00.02s ||     -7956 ko |   -1.09% |        -10.84%
  0m02.68s |   60804 ko | fiat-c/src/p256_scalar_64.c                                       |   0m02.64s |   70656 ko || +0m00.04s ||     -9852 ko |   +1.51% |        -13.94%
  0m02.67s |   61096 ko | fiat-c/src/secp256k1_montgomery_scalar_64.c                       |   0m02.70s |   73624 ko || -0m00.03s ||    -12528 ko |   -1.11% |        -17.01%
  0m02.67s |   59312 ko | fiat-zig/src/secp256k1_montgomery_scalar_64.zig                   |   0m02.66s |   69360 ko || +0m00.00s ||    -10048 ko |   +0.37% |        -14.48%
  0m02.63s |   68304 ko | fiat-bedrock2/src/curve25519_scalar_64.c                          |   0m02.32s |   93616 ko || +0m00.31s ||    -25312 ko |  +13.36% |        -27.03%
  0m02.54s |   59212 ko | fiat-go/64/secp256k1montgomery/secp256k1montgomery.go             |   0m02.44s |   73720 ko || +0m00.10s ||    -14508 ko |   +4.09% |        -19.67%
  0m02.51s |   78528 ko | fiat-json/src/secp256k1_montgomery_64.json                        |   0m02.48s |   89620 ko || +0m00.02s ||    -11092 ko |   +1.20% |        -12.37%
  0m02.44s |   60300 ko | fiat-rust/src/secp256k1_montgomery_64.rs                          |   0m02.41s |   72620 ko || +0m00.02s ||    -12320 ko |   +1.24% |        -16.96%
  0m02.42s |   59944 ko | fiat-zig/src/secp256k1_montgomery_64.zig                          |   0m02.40s |   70968 ko || +0m00.02s ||    -11024 ko |   +0.83% |        -15.53%
  0m02.40s |   61632 ko | fiat-bedrock2/src/p448_solinas_64.c                               |   0m02.08s |   77056 ko || +0m00.31s ||    -15424 ko |  +15.38% |        -20.01%
  0m02.37s |   61400 ko | fiat-c/src/secp256k1_montgomery_64.c                              |   0m02.38s |   72852 ko || -0m00.00s ||    -11452 ko |   -0.42% |        -15.71%
  0m02.34s |   59256 ko | fiat-go/64/curve25519scalar/curve25519scalar.go                   |   0m02.28s |   72580 ko || +0m00.06s ||    -13324 ko |   +2.63% |        -18.35%
  0m02.33s |   59672 ko | fiat-bedrock2/src/curve25519_32.c                                 |   0m01.97s |   76516 ko || +0m00.36s ||    -16844 ko |  +18.27% |        -22.01%
  0m02.29s |   57408 ko | fiat-zig/src/curve25519_scalar_64.zig                             |   0m02.26s |   68600 ko || +0m00.03s ||    -11192 ko |   +1.32% |        -16.31%
  0m02.27s |   76824 ko | fiat-json/src/curve25519_scalar_64.json                           |   0m02.27s |   86484 ko || +0m00.00s ||     -9660 ko |   +0.00% |        -11.16%
  0m02.27s |   59708 ko | fiat-rust/src/curve25519_scalar_64.rs                             |   0m02.27s |   70816 ko || +0m00.00s ||    -11108 ko |   +0.00% |        -15.68%
  0m02.23s |   60616 ko | fiat-c/src/curve25519_scalar_64.c                                 |   0m02.23s |   69008 ko || +0m00.00s ||     -8392 ko |   +0.00% |        -12.16%
  0m02.17s |   69392 ko | fiat-bedrock2/src/p224_64.c                                       |   0m01.85s |   95744 ko || +0m00.31s ||    -26352 ko |  +17.29% |        -27.52%
  0m02.14s |   38524 ko | fiat-go/32/curve25519/curve25519.go                               |   0m02.16s |   43904 ko || -0m00.02s ||     -5380 ko |   -0.92% |        -12.25%
  0m02.08s |   67380 ko | fiat-bedrock2/src/p256_64.c                                       |   0m01.79s |   91572 ko || +0m00.29s ||    -24192 ko |  +16.20% |        -26.41%
  0m01.99s |   55216 ko | fiat-json/src/p448_solinas_64.json                                |   0m01.88s |   59420 ko || +0m00.11s ||     -4204 ko |   +5.85% |         -7.07%
  0m01.94s |   39112 ko | fiat-zig/src/p448_solinas_64.zig                                  |   0m01.94s |   42288 ko || +0m00.00s ||     -3176 ko |   +0.00% |         -7.51%
  0m01.93s |   38224 ko | fiat-c/src/p448_solinas_64.c                                      |   0m01.90s |   42056 ko || +0m00.03s ||     -3832 ko |   +1.57% |         -9.11%
  0m01.92s |   58352 ko | fiat-go/64/p224/p224.go                                           |   0m01.73s |   73288 ko || +0m00.18s ||    -14936 ko |  +10.98% |        -20.37%
  0m01.92s |   38508 ko | fiat-rust/src/p448_solinas_64.rs                                  |   0m01.92s |   43824 ko || +0m00.00s ||     -5316 ko |   +0.00% |        -12.13%
  0m01.90s |   63580 ko | fiat-go/64/p256/p256.go                                           |   0m01.75s |   71360 ko || +0m00.14s ||     -7780 ko |   +8.57% |        -10.90%
  0m01.84s |   77768 ko | fiat-json/src/p224_64.json                                        |   0m01.83s |   87924 ko || +0m00.01s ||    -10156 ko |   +0.54% |        -11.55%
  0m01.84s |   61112 ko | fiat-zig/src/p224_64.zig                                          |   0m01.80s |   69264 ko || +0m00.04s ||     -8152 ko |   +2.22% |        -11.76%
  0m01.82s |   54540 ko | fiat-json/src/curve25519_32.json                                  |   0m01.85s |   60820 ko || -0m00.03s ||     -6280 ko |   -1.62% |        -10.32%
  0m01.81s |   75152 ko | fiat-json/src/p256_64.json                                        |   0m01.80s |   86432 ko || +0m00.01s ||    -11280 ko |   +0.55% |        -13.05%
  0m01.81s |   37200 ko | fiat-rust/src/curve25519_32.rs                                    |   0m01.78s |   42116 ko || +0m00.03s ||     -4916 ko |   +1.68% |        -11.67%
  0m01.80s |   37780 ko | fiat-c/src/curve25519_32.c                                        |   0m01.76s |   40824 ko || +0m00.04s ||     -3044 ko |   +2.27% |         -7.45%
  0m01.80s |   61280 ko | fiat-rust/src/p224_64.rs                                          |   0m01.79s |   68664 ko || +0m00.01s ||     -7384 ko |   +0.55% |        -10.75%
  0m01.80s |   36760 ko | fiat-zig/src/curve25519_32.zig                                    |   0m01.77s |   41496 ko || +0m00.03s ||     -4736 ko |   +1.69% |        -11.41%
  0m01.76s |   59756 ko | fiat-rust/src/p256_64.rs                                          |   0m01.75s |   70532 ko || +0m00.01s ||    -10776 ko |   +0.57% |        -15.27%
  0m01.75s |   59104 ko | fiat-c/src/p224_64.c                                              |   0m01.77s |   69336 ko || -0m00.02s ||    -10232 ko |   -1.12% |        -14.75%
  0m01.75s |   37028 ko | fiat-java/src/FiatCurve25519.java                                 |   0m01.76s |   42592 ko || -0m00.01s ||     -5564 ko |   -0.56% |        -13.06%
  0m01.74s |   58728 ko | fiat-zig/src/p256_64.zig                                          |   0m01.73s |   69820 ko || +0m00.01s ||    -11092 ko |   +0.57% |        -15.88%
  0m01.71s |   53640 ko | fiat-bedrock2/src/secp256k1_dettman_32.c                          |   0m01.43s |   60396 ko || +0m00.28s ||     -6756 ko |  +19.58% |        -11.18%
  0m01.70s |  614616 ko | CompilersTestCases.vo                                             |   0m01.68s |  614336 ko || +0m00.02s ||       280 ko |   +1.19% |         +0.04%
  0m01.68s |   58576 ko | fiat-c/src/p256_64.c                                              |   0m01.69s |   68252 ko || -0m00.01s ||     -9676 ko |   -0.59% |        -14.17%
  0m01.31s |   45844 ko | fiat-json/src/secp256k1_dettman_32.json                           |   0m01.32s |   48572 ko || -0m00.01s ||     -2728 ko |   -0.75% |         -5.61%
  0m01.24s |   30080 ko | fiat-c/src/secp256k1_dettman_32.c                                 |   0m01.21s |   32832 ko || +0m00.03s ||     -2752 ko |   +2.47% |         -8.38%
  0m01.24s |   32540 ko | fiat-java/src/FiatSecp256K1Dettman.java                           |   0m01.25s |   33892 ko || -0m00.01s ||     -1352 ko |   -0.80% |         -3.98%
  0m01.24s |   30760 ko | fiat-rust/src/secp256k1_dettman_32.rs                             |   0m01.22s |   31400 ko || +0m00.02s ||      -640 ko |   +1.63% |         -2.03%
  0m01.23s |   31472 ko | fiat-go/32/secp256k1dettman/secp256k1dettman.go                   |   0m01.22s |   31672 ko || +0m00.01s ||      -200 ko |   +0.81% |         -0.63%
  0m01.23s |   30428 ko | fiat-zig/src/secp256k1_dettman_32.zig                             |   0m01.22s |   31768 ko || +0m00.01s ||     -1340 ko |   +0.81% |         -4.21%
  0m00.81s |  523364 ko | MiscCompilerPassesProofsExtra.vo                                  |   0m00.85s |  522920 ko || -0m00.03s ||       444 ko |   -4.70% |         +0.08%
  0m00.74s |  472868 ko | MiscCompilerPasses.vo                                             |   0m00.74s |  445980 ko || +0m00.00s ||     26888 ko |   +0.00% |         +6.02%
  0m00.67s |   32768 ko | fiat-go/64/curve25519/curve25519.go                               |   0m00.60s |   36860 ko || +0m00.07s ||     -4092 ko |  +11.66% |        -11.10%
  0m00.64s |   39160 ko | fiat-bedrock2/src/curve25519_64.c                                 |   0m00.50s |   43428 ko || +0m00.14s ||     -4268 ko |  +28.00% |         -9.82%
  0m00.53s |   37788 ko | fiat-json/src/curve25519_64.json                                  |   0m00.51s |   39780 ko || +0m00.02s ||     -1992 ko |   +3.92% |         -5.00%
  0m00.50s |   39980 ko | fiat-bedrock2/src/curve25519_solinas_64.c                         |   0m00.42s |   47692 ko || +0m00.08s ||     -7712 ko |  +19.04% |        -16.17%
  0m00.48s |   29052 ko | fiat-zig/src/curve25519_64.zig                                    |   0m00.46s |   30704 ko || +0m00.01s ||     -1652 ko |   +4.34% |         -5.38%
  0m00.47s |  106268 ko | ExtractionOCaml/unsaturated_solinas.cmi                           |   0m00.41s |  105940 ko || +0m00.06s ||       328 ko |  +14.63% |         +0.30%
  0m00.47s |   29480 ko | fiat-rust/src/curve25519_64.rs                                    |   0m00.46s |   31568 ko || +0m00.00s ||     -2088 ko |   +2.17% |         -6.61%
  0m00.46s |  108404 ko | ExtractionOCaml/bedrock2_unsaturated_solinas.cmi                  |   0m00.46s |  108860 ko || +0m00.00s ||      -456 ko |   +0.00% |         -0.41%
  0m00.46s |  107356 ko | ExtractionOCaml/with_bedrock2_saturated_solinas.cmi               |   0m00.42s |  106764 ko || +0m00.04s ||       592 ko |   +9.52% |         +0.55%
  0m00.46s |  108988 ko | ExtractionOCaml/with_bedrock2_unsaturated_solinas.cmi             |   0m00.44s |  108080 ko || +0m00.02s ||       908 ko |   +4.54% |         +0.84%
  0m00.45s |  107644 ko | ExtractionOCaml/bedrock2_base_conversion.cmi                      |   0m00.42s |  106976 ko || +0m00.03s ||       668 ko |   +7.14% |         +0.62%
  0m00.45s |  106864 ko | ExtractionOCaml/bedrock2_dettman_multiplication.cmi               |   0m00.43s |  107592 ko || +0m00.02s ||      -728 ko |   +4.65% |         -0.67%
  0m00.45s |  107208 ko | ExtractionOCaml/bedrock2_saturated_solinas.cmi                    |   0m00.41s |  106724 ko || +0m00.04s ||       484 ko |   +9.75% |         +0.45%
  0m00.45s |  107600 ko | ExtractionOCaml/bedrock2_word_by_word_montgomery.cmi              |   0m00.45s |  108388 ko || +0m00.00s ||      -788 ko |   +0.00% |         -0.72%
  0m00.45s |  105328 ko | ExtractionOCaml/dettman_multiplication.cmi                        |   0m00.40s |  104160 ko || +0m00.04s ||      1168 ko |  +12.49% |         +1.12%
  0m00.45s |  103952 ko | ExtractionOCaml/saturated_solinas.cmi                             |   0m00.42s |  104872 ko || +0m00.03s ||      -920 ko |   +7.14% |         -0.87%
  0m00.45s |  107276 ko | ExtractionOCaml/with_bedrock2_solinas_reduction.cmi               |   0m00.44s |  106912 ko || +0m00.01s ||       364 ko |   +2.27% |         +0.34%
  0m00.45s |  104348 ko | ExtractionOCaml/word_by_word_montgomery.cmi                       |   0m00.42s |  105376 ko || +0m00.03s ||     -1028 ko |   +7.14% |         -0.97%
  0m00.45s |   29520 ko | fiat-c/src/curve25519_64.c                                        |   0m00.45s |   31108 ko || +0m00.00s ||     -1588 ko |   +0.00% |         -5.10%
  0m00.44s |  105044 ko | ExtractionOCaml/base_conversion.cmi                               |   0m00.37s |  105320 ko || +0m00.07s ||      -276 ko |  +18.91% |         -0.26%
  0m00.44s |  103868 ko | ExtractionOCaml/solinas_reduction.cmi                             |   0m00.40s |  104720 ko || +0m00.03s ||      -852 ko |   +9.99% |         -0.81%
  0m00.44s |  107368 ko | ExtractionOCaml/with_bedrock2_dettman_multiplication.cmi          |   0m00.43s |  107640 ko || +0m00.01s ||      -272 ko |   +2.32% |         -0.25%
  0m00.44s |  110880 ko | ExtractionOCaml/with_bedrock2_fiat_crypto.cmi                     |   0m00.46s |  110604 ko || -0m00.02s ||       276 ko |   -4.34% |         +0.24%
  0m00.44s |  107632 ko | ExtractionOCaml/with_bedrock2_word_by_word_montgomery.cmi         |   0m00.44s |  108480 ko || +0m00.00s ||      -848 ko |   +0.00% |         -0.78%
  0m00.44s |   37168 ko | fiat-go/64/curve25519solinas/curve25519solinas.go                 |   0m00.41s |   43492 ko || +0m00.03s ||     -6324 ko |   +7.31% |        -14.54%
  0m00.43s |  107460 ko | ExtractionOCaml/bedrock2_solinas_reduction.cmi                    |   0m00.42s |  106644 ko || +0m00.01s ||       816 ko |   +2.38% |         +0.76%
  0m00.43s |  107832 ko | ExtractionOCaml/fiat_crypto.cmi                                   |   0m00.49s |  107092 ko || -0m00.06s ||       740 ko |  -12.24% |         +0.69%
  0m00.42s |  110252 ko | ExtractionOCaml/bedrock2_fiat_crypto.cmi                          |   0m00.45s |  109560 ko || -0m00.03s ||       692 ko |   -6.66% |         +0.63%
  0m00.42s |  107596 ko | ExtractionOCaml/with_bedrock2_base_conversion.cmi                 |   0m00.41s |  107244 ko || +0m00.01s ||       352 ko |   +2.43% |         +0.32%
  0m00.42s |   36584 ko | fiat-rust/src/curve25519_solinas_64.rs                            |   0m00.41s |   42544 ko || +0m00.01s ||     -5960 ko |   +2.43% |        -14.00%
  0m00.42s |   37132 ko | fiat-zig/src/curve25519_solinas_64.zig                            |   0m00.41s |   42192 ko || +0m00.01s ||     -5060 ko |   +2.43% |        -11.99%
  0m00.41s |   36464 ko | fiat-c/src/curve25519_solinas_64.c                                |   0m00.41s |   41988 ko || +0m00.00s ||     -5524 ko |   +0.00% |        -13.15%
  0m00.39s |   38620 ko | fiat-json/src/curve25519_solinas_64.json                          |   0m00.42s |   45928 ko || -0m00.02s ||     -7308 ko |   -7.14% |        -15.91%
  0m00.38s |  322220 ko | Language/TreeCaching.vo                                           |    N/A     |    N/A     || +0m00.38s ||    322220 ko |        ∞ |              ∞
  0m00.35s |   35256 ko | fiat-bedrock2/src/poly1305_32.c                                   |   0m00.25s |   38708 ko || +0m00.09s ||     -3452 ko |  +39.99% |         -8.91%
  0m00.31s |   32200 ko | fiat-bedrock2/src/secp256k1_dettman_64.c                          |   0m00.23s |   33888 ko || +0m00.07s ||     -1688 ko |  +34.78% |         -4.98%
  0m00.29s |   27912 ko | fiat-go/32/poly1305/poly1305.go                                   |   0m00.29s |   29464 ko || +0m00.00s ||     -1552 ko |   +0.00% |         -5.26%
  0m00.26s |   27348 ko | fiat-go/64/secp256k1dettman/secp256k1dettman.go                   |   0m00.23s |   28376 ko || +0m00.03s ||     -1028 ko |  +13.04% |         -3.62%
  0m00.24s |   33520 ko | fiat-json/src/poly1305_32.json                                    |   0m00.24s |   34772 ko || +0m00.00s ||     -1252 ko |   +0.00% |         -3.60%
  0m00.22s |   26908 ko | fiat-zig/src/poly1305_32.zig                                      |   0m00.23s |   28128 ko || -0m00.01s ||     -1220 ko |   -4.34% |         -4.33%
  0m00.21s |   27332 ko | fiat-c/src/poly1305_32.c                                          |   0m00.21s |   28264 ko || +0m00.00s ||      -932 ko |   +0.00% |         -3.29%
  0m00.21s |   27112 ko | fiat-java/src/FiatPoly1305.java                                   |   0m00.22s |   28688 ko || -0m00.01s ||     -1576 ko |   -4.54% |         -5.49%
  0m00.21s |   27048 ko | fiat-rust/src/poly1305_32.rs                                      |   0m00.22s |   28276 ko || -0m00.01s ||     -1228 ko |   -4.54% |         -4.34%
  0m00.19s |   28456 ko | fiat-go/64/poly1305/poly1305.go                                   |   0m00.17s |   29408 ko || +0m00.01s ||      -952 ko |  +11.76% |         -3.23%
  0m00.18s |   27912 ko | fiat-json/src/secp256k1_dettman_64.json                           |   0m00.19s |   28184 ko || -0m00.01s ||      -272 ko |   -5.26% |         -0.96%
  0m00.18s |   23976 ko | fiat-rust/src/secp256k1_dettman_64.rs                             |   0m00.18s |   24544 ko || +0m00.00s ||      -568 ko |   +0.00% |         -2.31%
  0m00.17s |   62552 ko | ExtractionOCaml/perf_unsaturated_solinas.cmi                      |   0m00.16s |   61744 ko || +0m00.01s ||       808 ko |   +6.25% |         +1.30%
  0m00.17s |   60964 ko | ExtractionOCaml/perf_word_by_word_montgomery.cmi                  |   0m00.17s |   61880 ko || +0m00.00s ||      -916 ko |   +0.00% |         -1.48%
  0m00.17s |   24108 ko | fiat-c/src/secp256k1_dettman_64.c                                 |   0m00.17s |   24416 ko || +0m00.00s ||      -308 ko |   +0.00% |         -1.26%
  0m00.17s |   24124 ko | fiat-zig/src/secp256k1_dettman_64.zig                             |   0m00.18s |   24224 ko || -0m00.00s ||      -100 ko |   -5.55% |         -0.41%
  0m00.16s |   31212 ko | fiat-bedrock2/src/poly1305_64.c                                   |   0m00.12s |   31312 ko || +0m00.04s ||      -100 ko |  +33.33% |         -0.31%
  0m00.13s |   30208 ko | fiat-json/src/poly1305_64.json                                    |   0m00.11s |   31244 ko || +0m00.02s ||     -1036 ko |  +18.18% |         -3.31%
  0m00.12s |   25872 ko | fiat-c/src/poly1305_64.c                                          |   0m00.12s |   26464 ko || +0m00.00s ||      -592 ko |   +0.00% |         -2.23%
  0m00.12s |   25840 ko | fiat-rust/src/poly1305_64.rs                                      |   0m00.13s |   26816 ko || -0m00.01s ||      -976 ko |   -7.69% |         -3.63%
  0m00.12s |   25336 ko | fiat-zig/src/poly1305_64.zig                                      |   0m00.12s |   26644 ko || +0m00.00s ||     -1308 ko |   +0.00% |         -4.90%
  0m00.00s |    4500 ko | ExtractionJsOfOCaml/bedrock2_fiat_crypto.cmi                      |   0m00.00s |    4380 ko || +0m00.00s ||       120 ko |   N/A    |         +2.73%
  0m00.00s |    4676 ko | ExtractionJsOfOCaml/fiat_crypto.cmi                               |   0m00.00s |    4440 ko || +0m00.00s ||       236 ko |   N/A    |         +5.31%
  0m00.00s |    4680 ko | ExtractionJsOfOCaml/with_bedrock2_fiat_crypto.cmi                 |   0m00.00s |    4444 ko || +0m00.00s ||       236 ko |   N/A    |         +5.31%

```
</p>
</details>
@JasonGross
Copy link
Collaborator Author

I guess the fundamental problem here is that PHOAS is a semantic encoding of terms, and going from f : A -> B * C to something of type (A -> B) * (A -> C) "without running the code twice" is really a syntactic operation?

@JasonGross
Copy link
Collaborator Author

I guess if we uncurry the surrounding context we don't incur a multiplicative factor of the # abs binders (or, well, we do, but it's not beyond the overhead of using PHOAS in the first place and carrying type annotations at every node)

I guess the way to do this is to have the cache result type depend not just on the type of the PHOAS expression at the current point, but also on the type of the uncurried stack above this point

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant