Repository navigation
Commit a36e919
authored
Add
* format: add the transform context for compiler optimizations
Introduce the `transform` context: a flat sibling key on an instruction
listing the optimization passes (fold, coalesce, tailcall, inline) the
compiler applied to it, so a debugger can distinguish
compiler-synthesized code from the source the user wrote.
Adds the schema, the format TypeScript type, and the spec page, and
registers the context page in the docs schema index.
* tailcall: emit, render, and document the tail-call transform
Emit `transform: ["tailcall"]` on the TCO back-edge JUMP, alongside the
invoke/return pair it already carries, so a debugger sees the pair as a
tail-call-optimized back-edge rather than a real frame push/pop and does
not invent a spurious frame.
Render it in the tracer drawer — an optimizer-level (O0-O3) selector and a
tail-call-aware call stack — and document it with a tracing example and a
walkthrough homed in the trace playground.
Introduces the shared `Ir.Utils.addTransform` helper — the fold, coalesce,
and inline emitters all route through it — and the transform-emission test
file (`transform-contexts.test.ts`, with the `countTransform` helper),
covering the tailcall marker: absent at O0/O1, present at O2/O3.
* bugc: emit the fold transform on constant folding
Mark constant-folded values with `transform: ["fold"]` through a shared
`addTransform` helper, so the tracer can show a value as a
compile-time-evaluated constant rather than source. The marker composes
with later passes into a multiset (e.g. `["fold", "coalesce"]`).
* bugc: emit the coalesce transform on read-write merging
Mark the SHL/OR field-packing sequence produced by read-write merging
with `transform: ["coalesce"]`, so a packed-storage write reads as
compiler-synthesized rather than source the user wrote. Composes with a
folded value into `["fold", "coalesce"]`.
* inline: spec, compiler pass, tracer reconstruction, and examples
Add the function-inlining transform end to end:
- spec the inlined-call virtual-activation contract — push/pop pairing
via the virtual invoke/return versus the per-instruction `inline`
membership marker;
- add the bugc inlining pass (level 2): splice eligible leaf callees into
their call sites, emit `transform: ["inline"]` on the spliced body, and
bracket it with a virtual invoke/return; bracket those boundary ops in
evmgen so the activation nests correctly;
- reconstruct the inline virtual activations in the tracer's call stack;
- add the inlining showcase examples and the trace-playground section.
* format: correlate activations with an activation identifier
Correlate activations with an `activation` identifier on invoke, return,
and revert: the invoke that opens an activation and the return or revert
that closes it carry the same value, so a debugger pairs a call with its
return independent of trace order. It lives inside the
invoke/return/revert object, keeping a tail call's two facts flat without
a `gather`.
* web: surface optimizer transforms in the tracer instruction list
Show the tailcall and inline transform annotations inline in the tracer's
instruction list, so the optimizer passes applied to each instruction are
visible as you step through the trace.transform context for annotating compiler optimizations (#216)1 parent c6f391c commit a36e919
38 files changed
Lines changed: 2963 additions & 436 deletions
File tree
- packages
- bugc/src
- evmgen
- generation
- control-flow
- ir/utils
- optimizer
- steps
- format/src/types/program
- programs-react/src
- components
- utils
- web
- docs
- core-schemas/programs
- explore
- spec/program/context
- function
- src
- theme/ProgramExample
- schemas/program
- context
- function
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| |||
161 | 162 | | |
162 | 163 | | |
163 | 164 | | |
164 | | - | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
165 | 169 | | |
166 | | - | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
167 | 190 | | |
168 | 191 | | |
169 | 192 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
| 3 | + | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
| |||
411 | 412 | | |
412 | 413 | | |
413 | 414 | | |
414 | | - | |
415 | | - | |
| 415 | + | |
| 416 | + | |
416 | 417 | | |
417 | 418 | | |
| 419 | + | |
418 | 420 | | |
419 | 421 | | |
420 | 422 | | |
421 | 423 | | |
422 | 424 | | |
423 | 425 | | |
424 | 426 | | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
425 | 434 | | |
426 | 435 | | |
427 | 436 | | |
| |||
432 | 441 | | |
433 | 442 | | |
434 | 443 | | |
435 | | - | |
| 444 | + | |
436 | 445 | | |
437 | 446 | | |
438 | 447 | | |
| |||
462 | 471 | | |
463 | 472 | | |
464 | 473 | | |
465 | | - | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
466 | 484 | | |
467 | 485 | | |
468 | 486 | | |
| |||
0 commit comments