-
Notifications
You must be signed in to change notification settings - Fork 76
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
Communicate frontend layouts to lambda #1455
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did not review the following directories:
backend
middle_end
ocaml/lambda
ocaml/middle_end
I did review the following:
ocaml/asmcomp
ocaml/bytecomp
ocaml/ocamldoc
ocaml/testsuite
ocaml/typing
, alphabetically throughlayouts.mli
(when I timed out)
I will review the rest of typing
, along with lambda/matching.ml
. I would appreciate review of the parts I know less about; @mshinwell suggested @Ekdohibs might do this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have now finished reviewing ocaml/typing
. I will attempt matching.ml
, but not today.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have now finished reviewing ocaml/typing
. I will attempt matching.ml
, but not today.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed files with "matching" or "comprehension" in their filename.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A bit more, after looking at recent commits
OK. I have finished my initial review here. Review not done:
@mshinwell and @Ekdohibs are good reviewers for those pieces |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have reviewed the files that @goldfirere did not, see comments.
This deletes a couple safety checks in transl_core. This is fine, because these checks were there to guard against calling [transl_exp] with an expression that has a non-value type (and [transl_exp] now supports that). We still hit an safety check error in this case, it just comes later - these are the changes where errors that didn't used to mention [value_kind] now do. In subsequent commits these may change again to mention [layout], because we'll be providing accurate sorts to [layout] rather than the pre-defined ones in various places.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Only for files in backend and asmcomp owned by me.
It looks like I am also owner of testsuite/tests/typing-layouts
files, which is obviously wrong.
Further work will be needed to support primitives that acutally work correctly on non-value sorts. That should probably be done in the PR that adds float#, as it's hard to do before and float# would be untestable without it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is ok given the reviews of @goldfirere , @Ekdohibs and @gretay-js
Co-authored-by: Chris Casinghino <[email protected]>
df70400 flambda-backend: Fix interface differences in Printtyp (#1918) e7b5ebf flambda-backend: Fix breaking of tail recursion in classic mode (#1915) cbb72d8 flambda-backend: Improve debuginfo for for-loops (and conditionals) (#1870) 19133b6 flambda-backend: Replace thread save/restore API with switch (#1869) 882b067 flambda-backend: Add test showing how `max_arity` affects function splitting (#1904) f1f7da4 flambda-backend: Abbreviate module types when printing error messages (#1895) e4566dd flambda-backend: Add four missing attributes to the `builtin_attrs` table. (#1898) 4bb4c70 flambda-backend: Undo sort changes during snapshot backtrack (#1885) 87c857a flambda-backend: Add a missing check for jane syntax (#1891) 070d57f flambda-backend: Remove mode from Texp_send (#1893) 7d9ef46 flambda-backend: Remove Jkind.of_sort (#1890) 5ad9591 flambda-backend: ocamlformat in Jane-Street only files in typing (#1881) 5e50edf flambda-backend: Remove var_constraint (#1880) b1962fa flambda-backend: Rename "layout" to "jkind" (#1875) f74b090 flambda-backend: Rename layouts.ml to jkind.ml (#1886) cf32778 flambda-backend: Enable ocamlformat for Jane Syntax / language extensions code (#1876) 20b32a0 flambda-backend: Better error when using a float64 library without extension (#1859) 64e883d flambda-backend: Add hint for `#float` (#1864) ab42aac flambda-backend: Port upstream #12368 about abstract environments (#1759) bbc5173 flambda-backend: Support for unboxed products in the middle-end and backend (#1433) 6149a5f flambda-backend: Simplify integer comparisons that use "compare" (#1851) a05adce flambda-backend: Ask user to add `exclave_` instead of `local_` (#1853) cdd7f6a flambda-backend: Bump magic numbers for 4.14.1-19 96ec26a flambda-backend: Manually applied changes from PR #11782 (#1732) ea484d0 flambda-backend: Zero alloc annotation: assume a function never returns normally (#1831) 387893c flambda-backend: All-`float#` records (#1769) c3f9983 flambda-backend: Expose `Pprintast.tyvar` (#1848) 3782152 flambda-backend: Don't allocate a closure unnecessarily (#1836) a8f6aae flambda-backend: Fix bug in `Clambda_primitives.result_layout`. (#1833) 4b2a6f6 flambda-backend: Add dune target for `dumpobj` (#1773) 2089ec0 flambda-backend: tmc: Remove close-on-apply flag when producing a call in non-tail position (#1827) 9f304d8 flambda-backend: Adjust the location on `as` pattern vars for better errors/warnings (#1835) b9cf106 flambda-backend: Zero alloc: assume that works with inlining - propagate via Scoped_location (#1762) 263fa26 flambda-backend: Make -extension immutable_arrays on by default (#1829) 9cca7d2 flambda-backend: Support mode crossing at identifiers (#1811) 7942fed flambda-backend: Finish moving `any` to `layouts_beta` (#1821) 44cd2fc flambda-backend: Fix uncaught Unify exception in filter_arrow (#1820) 3552db6 flambda-backend: Factor out duplicated code in `cmm_helpers` (#1822) caf938f flambda-backend: Fix AFL test in flambda2 (#1824) ddd765a flambda-backend: Move `float64` to `layouts_beta` (#1812) 3b579d7 flambda-backend: Fixed ISO C99 warning introduced in #1705 (#1787) df927f0 flambda-backend: Add a test for an interaction between omitted mli and overeager heap allocation of argument (#1816) 92ddf14 flambda-backend: Fix incorrect sort assumption in lambda for `bop_exp`s in letops (#1793) 1a91f16 flambda-backend: Merging of Debuginfo.t across CSEd occurrences (#1767) f7cd48f flambda-backend: Backport #10364 (#1788) 5740ebd flambda-backend: Enable warnings-as-errors (#1796) 374a2fb flambda-backend: Build Jane Syntax with upstream OCaml in CI (#1780) 1d6471f flambda-backend: A more consistent first-to-last order for `-w53` (unused attributes) (#1658) 6210ee4 flambda-backend: Make sure the Jane syntax extensions don't depend on our compiler changes (#1777) 963bfbc flambda-backend: Add [Obj.uniquely_reachable_words] (#1705) 4cd24bd flambda-backend: mode crossing of LHS of arrow types by coercing (#1701) 910914d flambda-backend: `Pprintast` prints Jane syntax unconditionally (#1770) 46dad5b flambda-backend: Regulate access to [Language_extension] from within Jane Syntax (#1768) a0f8d0c flambda-backend: Lazy strengthening (#1337) 85b5c54 flambda-backend: Small improvement to layout inference for mutually recursive type decl parameters (#1766) 0c57382 flambda-backend: Syntactic function arity parsing (#1548) e8edd13 flambda-backend: Fix modes annotation ghost location (#1761) a669c00 flambda-backend: Refactor Debuginfo.t (#1724) 91ab70a flambda-backend: Basic uniqueness extension (#1552) 5be3cb8 flambda-backend: add the `%get_header` primitive (#1539) 0006b3e flambda-backend: Fix arrow printing when closing over unknown mode (#1744) 226d6ac flambda-backend: Add some checks that the minor GC does not recurse (#1743) f3e7c0a flambda-backend: Bump magic numbers for 4.14.1-18 30cbf0a flambda-backend: Add `Jane_syntax` `Pprintast` tests (#1727) 1269571 flambda-backend: Expose a couple more functions from `Pprintast` (#1731) 159adbe flambda-backend: Propagate the label names of optional parameters (#1723) 4f70f0b flambda-backend: Further refine our debugging infrastructure (#1650) a440f6d flambda-backend: Add mode to `int_as_pointer` (#1648) 0cc5356 flambda-backend: Update `jane-street-merlin-setup.sh` for this repo (#1663) 71879dc flambda-backend: Add code path to read .cmi without adding to environment (#1674) 5394352 flambda-backend: Only substitute once in `Env.read_sign_of_cmi` (#1670) 2a7f015 flambda-backend: Pass `-f` when `rm`ing file during install (#1700) ddaf752 flambda-backend: Set location on topmost Jane Syntax attribute (#1696) 5205836 flambda-backend: Support layout annotations (#1417) 455887f flambda-backend: Simplifications following PR #1667 (#1668) 6c0a9e8 flambda-backend: Don't add a module to the environment when saving it (#1667) 562eb7b flambda-backend: Flambda 2 changes for DWARF variables (#1678) f1352ed flambda-backend: Add modes on parameters and a framework for attributes on them (#1257) 3d23db5 flambda-backend: 128-bit vector primitive types (#1568) 06a3bdc flambda-backend: Bump magic numbers for 4.14.1-16 (#1657) 37c5ea0 flambda-backend: Remove/comment new uses of `not_expecting` in the parser (#1517) 8bbe82d flambda-backend: Float_u stdlib module (#1572) f4075a4 flambda-backend: Add a `float64` layout and `float#` type. (#1528) 43f02af flambda-backend: Test fix in #1457 (#1458) c896a97 flambda-backend: Swap simd flag to language extension (#1569) e6c44d4 flambda-backend: mkuplus and mkuminus must preserve attributes (#1575) 906cfc5 flambda-backend: Make environment lazy in preparation for simd extension (#1570) a222bfc flambda-backend: pattern match local iarray gives local elements(#1574) d3c1413 flambda-backend: 128-bit SIMD vector primitive type (#1499) bcc0a09 flambda-backend: exclave_ implies strictly local (#1554) e3deedb flambda-backend: Factor out kernel of `Language_extension` used by Jane Syntax (#1509) eea5150 flambda-backend: Fix incorrect sort in transl (#1547) d2b44d8 flambda-backend: A + sign usually means Positive (#1536) d1644f9 flambda-backend: Restore #1455: Communicate layouts to middle end (#1511) 5e6524d flambda-backend: Tail-calling local-returning functions should make the current function local-returning as well (#1498) fa71f6b flambda-backend: Increase local stack limit (#1513) c1eecf6 flambda-backend: Generalize `deep_occur` to `deep_occur_list` (#1503) 1a17a8b flambda-backend: Bump magic numbers for 4.14.1-15 a3d1953 flambda-backend: Fix Translcore to look for allocations in exclaves (#1495) 0ea8b04 flambda-backend: Revert "Communicate frontend layouts to lambda" (#1507) 383e158 flambda-backend: Disable `sockets.ml` on macOS (#1505) 3b73a8d flambda-backend: Communicate frontend layouts to lambda (#1455) f94a067 flambda-backend: Allow `make debug` with dune-based build (#1480) 1880d42 flambda-backend: Disable `beat.ml` on macOS (#1496) 4b2e620 flambda-backend: Check that layout variables aren't unconstrained when writing `cmi`s (#1474) 284889c flambda-backend: Add flambda2 -O3 and -Oclassic CI jobs, third attempt (#1493) ef161b9 flambda-backend: Prepare translation of primitives in lambda_to_flambda for unboxed products (#1465) bc1d15a flambda-backend: Remove ast_desc and ast_info from jane-syntax (#1488) be57ed6 flambda-backend: Local immutable arrays (#1420) 3a5d06a flambda-backend: Unboxed literal jane syntax (#1487) cc61a3a flambda-backend: Ensure that all [val]s are [value]s. (#1481) aba14c2 flambda-backend: Check for value in polymorphic variant argument (#1482) 0a20dfb flambda-backend: Jane-syntax support for extension constructors (#1479) 697519a flambda-backend: Remove `nonlocal_` modality (#1452) 0bf6a17 flambda-backend: Use exported modules in Jane_syntax_parsing (#1477) aa6d00f flambda-backend: Flambda1: Simplify `Region (Exclave e)` to `e` (#1473) e472be0 flambda-backend: Remove the `type float# = float` hack (#1478) ebe702d flambda-backend: Fix a typo in language extension parsing/serializing (#1456) 40f0e8c flambda-backend: Lex unboxed float and int literals as single lexemes (#1469) 22f170a flambda-backend: Unboxed float type parsing in `layouts_alpha` (#1467) 740de2a flambda-backend: Revert "Add flambda2 -Oclassic and -O3 CI jobs" (#1462) 6ec73ed flambda-backend: Zero alloc remove annotation from stdlib (#1434) f416497 flambda-backend: Don't pass (unnecessary?) -L flags to `gcc -shared` from opttoplevel (#1363) 416a714 flambda-backend: sync dynlink/dune compiler flags (#1461) d3e555f flambda-backend: Add flambda2 -Oclassic and -O3 CI jobs (#1459) e5eca61 flambda-backend: Add documentation for testing targets to HACKING docs (#1436) f1835c4 flambda-backend: New extensions API, supporting maturity levels (#1454) 1deb5af flambda-backend: Add Make/Dune target for debug printers (#1289) 324f32e flambda-backend: Bugfix for application mode crossing (#1451) 7ac42ab flambda-backend: Don't substitute into exclaves in `simplif.ml` (#1448) a03de20 flambda-backend: Parse unboxed literals, treating them as boxed (#1437) 5283047 flambda-backend: support native `exclave_` syntax (#1338) a1fe4cf flambda-backend: Default layout variables in gadt constructors (#1424) f4c96ff flambda-backend: Fix programmatically enabling and disabling the same layouts extension (#1446) cc58003 flambda-backend: Erasability namespace for Jane Syntax attributes/extensions (#1421) ae9099a flambda-backend: Use layout histories to produce better errors (#1340) 385ada9 flambda-backend: Fix swapgil test C warnings (#1430) ff9a0d1 flambda-backend: Bugfix for caml_switch_runtime_locking_scheme (#1429) df41dae flambda-backend: Remove layout variables from [val]s (#1423) 2e1a05a flambda-backend: Bugfix for GC backlog tracking (#1387) 8bc3fd7 flambda-backend: Allow more function argument / returns to be non-value (#1422) f2a5b93 flambda-backend: Convert Jane Syntax to use attributes for many syntactic categories (#1412) 1e2d5c5 flambda-backend: zero alloc: warning 198 about assume (#1409) 9270fee flambda-backend: Allow non-value function args and returns (#1405) 5319dfe flambda-backend: Bump magic numbers for 4.14.1-13 31fb926 flambda-backend: Fix issue with layout any and Tstr_eval in the native toplevel (#1402) dff4346 flambda-backend: Extend caml_locking_scheme with callbacks for thread start/stop (#1411) 674a335 flambda-backend: Introduce an API to swap the runtime lock for a different lock. (#1365) 1ce68db flambda-backend: Modular syntax for types (#1401) 9f55ade flambda-backend: Missing changes around the renaming to "Jane syntax" (#1400) cf8eaa8 flambda-backend: Move `include functor` over to the modular extensions machinery (#1377) da4e02d flambda-backend: Statically enabled probes (#1388) 093e638 flambda-backend: Bump magic numbers for 4.14.1-12 e7e0bf1 flambda-backend: Move layout from Type_abstract to type_declaration (#1384) 9c53ca7 flambda-backend: Rename `tests/jst-modular-extensions` to `tests/jane-modular-syntax` (#1397) 6881566 flambda-backend: Rename "modular extensions" to "Jane syntax"/"modular syntax" (#1395) bfec906 flambda-backend: Add autocompletion for test-one/promote-one (#1393) 9fc4aac flambda-backend: Fix a bug that -no-rebuild introduced in test-one (#1394) 301b683 flambda-backend: Add -no-rebuild options for test-one and promote-one (#1391) 1e090ac flambda-backend: zero alloc check: ignore functors and entry functions (#1370) 9d3b5a1 flambda-backend: Provide an AST-like view of modular extension extension node names (#1362) 7a92219 flambda-backend: Ltail for lambda and use in dissect_letrec (#1313) 7a7e639 flambda-backend: Add emacs hacking commands (#1372) 8dd6eae flambda-backend: Remove closure from Array.for_all (#1354) a4c4d03 flambda-backend: Fix ghost locations for modular extensions (#1348) ca5a008 flambda-backend: Bump magic numbers for 4.14.1-10 (#1360) a24d2ec flambda-backend: Inline a variable to save 2%+ in allocations (#1353) 96f8f00 flambda-backend: Probe name too long: warning instead of error (#1352) cd34685 flambda-backend: Typedtree module unpacks: Incorporate upstream feedback (#1288) c0482d3 flambda-backend: Add dedicated printline-debugging support (#1308) 7b295b0 flambda-backend: Fix try region closure for "match with exception" under Flambda 2 (#1339) db6552a flambda-backend: Revert ocaml/toplevel/ changes that are duplicative 132f8ba flambda-backend: Revert ocaml/driver/ changes that are duplicative 3d7f37f flambda-backend: Merge ocaml-jst 4646c2e flambda-backend: Merge ocaml-jst e62f2b1 flambda-backend: Bump magic numbers for 4.14.1-8 f617a06 flambda-backend: Revert ocaml/toplevel/ changes that are duplicative 79f91e9 flambda-backend: Revert ocaml/driver/ changes that are duplicative git-subtree-dir: ocaml git-subtree-split: df70400
7da89ee flambda-backend: Error message: add hint for unboxed types (#1960) 559870d flambda-backend: More precise layout for array patterns (#1968) 097204a flambda-backend: Fix boolean functions tail call position bug (#1957) 8bd0b80 flambda-backend: Fix result layout of combined applications (#1963) 91d3de7 flambda-backend: Change error message for non-value class lets (#1953) 27e58ec flambda-backend: Handle empty cases (fixes bug from #1899) (#1955) aafeeda flambda-backend: Zero alloc: add payload "opt" and "-zero-alloc-check {default|all|none|opt}" flag (#1936) e65faae flambda-backend: Make `assert false` behave as local_ or not, depending on what's better (+ 2 bugfixes) (#1899) 0706cec flambda-backend: Install simd.h with other runtime headers (#1935) 82364c9 flambda-backend: Allow parameter modes to be relaxed in type_argument (#1756) cb9fa49 flambda-backend: Add missing iarrayLabels module from stdlib dune file (#1930) 40ddf54 flambda-backend: Runtime helpers for 128-bit vectors (#1897) a336b70 flambda-backend: Update magic numbers for 4.14.1-22 (and add tools/bump_magic_numbers.sh) a1239f0 flambda-backend: 128-bit Array Load/Store (#1682) c3297fc flambda-backend: Fix uncaught exception for non-representable type statements (#1928) 65af444 flambda-backend: Add `Is_stack` for C-stub (#1914) df70400 flambda-backend: Fix interface differences in Printtyp (#1918) e7b5ebf flambda-backend: Fix breaking of tail recursion in classic mode (#1915) cbb72d8 flambda-backend: Improve debuginfo for for-loops (and conditionals) (#1870) 19133b6 flambda-backend: Replace thread save/restore API with switch (#1869) 882b067 flambda-backend: Add test showing how `max_arity` affects function splitting (#1904) f1f7da4 flambda-backend: Abbreviate module types when printing error messages (#1895) e4566dd flambda-backend: Add four missing attributes to the `builtin_attrs` table. (#1898) 4bb4c70 flambda-backend: Undo sort changes during snapshot backtrack (#1885) 87c857a flambda-backend: Add a missing check for jane syntax (#1891) 070d57f flambda-backend: Remove mode from Texp_send (#1893) 7d9ef46 flambda-backend: Remove Jkind.of_sort (#1890) 5ad9591 flambda-backend: ocamlformat in Jane-Street only files in typing (#1881) 5e50edf flambda-backend: Remove var_constraint (#1880) b1962fa flambda-backend: Rename "layout" to "jkind" (#1875) f74b090 flambda-backend: Rename layouts.ml to jkind.ml (#1886) cf32778 flambda-backend: Enable ocamlformat for Jane Syntax / language extensions code (#1876) 20b32a0 flambda-backend: Better error when using a float64 library without extension (#1859) 64e883d flambda-backend: Add hint for `#float` (#1864) ab42aac flambda-backend: Port upstream #12368 about abstract environments (#1759) bbc5173 flambda-backend: Support for unboxed products in the middle-end and backend (#1433) 6149a5f flambda-backend: Simplify integer comparisons that use "compare" (#1851) a05adce flambda-backend: Ask user to add `exclave_` instead of `local_` (#1853) cdd7f6a flambda-backend: Bump magic numbers for 4.14.1-19 96ec26a flambda-backend: Manually applied changes from PR #11782 (#1732) ea484d0 flambda-backend: Zero alloc annotation: assume a function never returns normally (#1831) 387893c flambda-backend: All-`float#` records (#1769) c3f9983 flambda-backend: Expose `Pprintast.tyvar` (#1848) 3782152 flambda-backend: Don't allocate a closure unnecessarily (#1836) a8f6aae flambda-backend: Fix bug in `Clambda_primitives.result_layout`. (#1833) 4b2a6f6 flambda-backend: Add dune target for `dumpobj` (#1773) 2089ec0 flambda-backend: tmc: Remove close-on-apply flag when producing a call in non-tail position (#1827) 9f304d8 flambda-backend: Adjust the location on `as` pattern vars for better errors/warnings (#1835) b9cf106 flambda-backend: Zero alloc: assume that works with inlining - propagate via Scoped_location (#1762) 263fa26 flambda-backend: Make -extension immutable_arrays on by default (#1829) 9cca7d2 flambda-backend: Support mode crossing at identifiers (#1811) 7942fed flambda-backend: Finish moving `any` to `layouts_beta` (#1821) 44cd2fc flambda-backend: Fix uncaught Unify exception in filter_arrow (#1820) 3552db6 flambda-backend: Factor out duplicated code in `cmm_helpers` (#1822) caf938f flambda-backend: Fix AFL test in flambda2 (#1824) ddd765a flambda-backend: Move `float64` to `layouts_beta` (#1812) 3b579d7 flambda-backend: Fixed ISO C99 warning introduced in #1705 (#1787) df927f0 flambda-backend: Add a test for an interaction between omitted mli and overeager heap allocation of argument (#1816) 92ddf14 flambda-backend: Fix incorrect sort assumption in lambda for `bop_exp`s in letops (#1793) 1a91f16 flambda-backend: Merging of Debuginfo.t across CSEd occurrences (#1767) f7cd48f flambda-backend: Backport #10364 (#1788) 5740ebd flambda-backend: Enable warnings-as-errors (#1796) 374a2fb flambda-backend: Build Jane Syntax with upstream OCaml in CI (#1780) 1d6471f flambda-backend: A more consistent first-to-last order for `-w53` (unused attributes) (#1658) 6210ee4 flambda-backend: Make sure the Jane syntax extensions don't depend on our compiler changes (#1777) 963bfbc flambda-backend: Add [Obj.uniquely_reachable_words] (#1705) 4cd24bd flambda-backend: mode crossing of LHS of arrow types by coercing (#1701) 910914d flambda-backend: `Pprintast` prints Jane syntax unconditionally (#1770) 46dad5b flambda-backend: Regulate access to [Language_extension] from within Jane Syntax (#1768) a0f8d0c flambda-backend: Lazy strengthening (#1337) 85b5c54 flambda-backend: Small improvement to layout inference for mutually recursive type decl parameters (#1766) 0c57382 flambda-backend: Syntactic function arity parsing (#1548) e8edd13 flambda-backend: Fix modes annotation ghost location (#1761) a669c00 flambda-backend: Refactor Debuginfo.t (#1724) 91ab70a flambda-backend: Basic uniqueness extension (#1552) 5be3cb8 flambda-backend: add the `%get_header` primitive (#1539) 0006b3e flambda-backend: Fix arrow printing when closing over unknown mode (#1744) 226d6ac flambda-backend: Add some checks that the minor GC does not recurse (#1743) f3e7c0a flambda-backend: Bump magic numbers for 4.14.1-18 30cbf0a flambda-backend: Add `Jane_syntax` `Pprintast` tests (#1727) 1269571 flambda-backend: Expose a couple more functions from `Pprintast` (#1731) 159adbe flambda-backend: Propagate the label names of optional parameters (#1723) 4f70f0b flambda-backend: Further refine our debugging infrastructure (#1650) a440f6d flambda-backend: Add mode to `int_as_pointer` (#1648) 0cc5356 flambda-backend: Update `jane-street-merlin-setup.sh` for this repo (#1663) 71879dc flambda-backend: Add code path to read .cmi without adding to environment (#1674) 5394352 flambda-backend: Only substitute once in `Env.read_sign_of_cmi` (#1670) 2a7f015 flambda-backend: Pass `-f` when `rm`ing file during install (#1700) ddaf752 flambda-backend: Set location on topmost Jane Syntax attribute (#1696) 5205836 flambda-backend: Support layout annotations (#1417) 455887f flambda-backend: Simplifications following PR #1667 (#1668) 6c0a9e8 flambda-backend: Don't add a module to the environment when saving it (#1667) 562eb7b flambda-backend: Flambda 2 changes for DWARF variables (#1678) f1352ed flambda-backend: Add modes on parameters and a framework for attributes on them (#1257) 3d23db5 flambda-backend: 128-bit vector primitive types (#1568) 06a3bdc flambda-backend: Bump magic numbers for 4.14.1-16 (#1657) 37c5ea0 flambda-backend: Remove/comment new uses of `not_expecting` in the parser (#1517) 8bbe82d flambda-backend: Float_u stdlib module (#1572) f4075a4 flambda-backend: Add a `float64` layout and `float#` type. (#1528) 43f02af flambda-backend: Test fix in #1457 (#1458) c896a97 flambda-backend: Swap simd flag to language extension (#1569) e6c44d4 flambda-backend: mkuplus and mkuminus must preserve attributes (#1575) 906cfc5 flambda-backend: Make environment lazy in preparation for simd extension (#1570) a222bfc flambda-backend: pattern match local iarray gives local elements(#1574) d3c1413 flambda-backend: 128-bit SIMD vector primitive type (#1499) bcc0a09 flambda-backend: exclave_ implies strictly local (#1554) e3deedb flambda-backend: Factor out kernel of `Language_extension` used by Jane Syntax (#1509) eea5150 flambda-backend: Fix incorrect sort in transl (#1547) d2b44d8 flambda-backend: A + sign usually means Positive (#1536) d1644f9 flambda-backend: Restore #1455: Communicate layouts to middle end (#1511) 5e6524d flambda-backend: Tail-calling local-returning functions should make the current function local-returning as well (#1498) fa71f6b flambda-backend: Increase local stack limit (#1513) c1eecf6 flambda-backend: Generalize `deep_occur` to `deep_occur_list` (#1503) 1a17a8b flambda-backend: Bump magic numbers for 4.14.1-15 a3d1953 flambda-backend: Fix Translcore to look for allocations in exclaves (#1495) 0ea8b04 flambda-backend: Revert "Communicate frontend layouts to lambda" (#1507) 383e158 flambda-backend: Disable `sockets.ml` on macOS (#1505) 3b73a8d flambda-backend: Communicate frontend layouts to lambda (#1455) f94a067 flambda-backend: Allow `make debug` with dune-based build (#1480) 1880d42 flambda-backend: Disable `beat.ml` on macOS (#1496) 4b2e620 flambda-backend: Check that layout variables aren't unconstrained when writing `cmi`s (#1474) 284889c flambda-backend: Add flambda2 -O3 and -Oclassic CI jobs, third attempt (#1493) ef161b9 flambda-backend: Prepare translation of primitives in lambda_to_flambda for unboxed products (#1465) bc1d15a flambda-backend: Remove ast_desc and ast_info from jane-syntax (#1488) be57ed6 flambda-backend: Local immutable arrays (#1420) 3a5d06a flambda-backend: Unboxed literal jane syntax (#1487) cc61a3a flambda-backend: Ensure that all [val]s are [value]s. (#1481) aba14c2 flambda-backend: Check for value in polymorphic variant argument (#1482) 0a20dfb flambda-backend: Jane-syntax support for extension constructors (#1479) 697519a flambda-backend: Remove `nonlocal_` modality (#1452) 0bf6a17 flambda-backend: Use exported modules in Jane_syntax_parsing (#1477) aa6d00f flambda-backend: Flambda1: Simplify `Region (Exclave e)` to `e` (#1473) e472be0 flambda-backend: Remove the `type float# = float` hack (#1478) ebe702d flambda-backend: Fix a typo in language extension parsing/serializing (#1456) 40f0e8c flambda-backend: Lex unboxed float and int literals as single lexemes (#1469) 22f170a flambda-backend: Unboxed float type parsing in `layouts_alpha` (#1467) 740de2a flambda-backend: Revert "Add flambda2 -Oclassic and -O3 CI jobs" (#1462) 6ec73ed flambda-backend: Zero alloc remove annotation from stdlib (#1434) f416497 flambda-backend: Don't pass (unnecessary?) -L flags to `gcc -shared` from opttoplevel (#1363) 416a714 flambda-backend: sync dynlink/dune compiler flags (#1461) d3e555f flambda-backend: Add flambda2 -Oclassic and -O3 CI jobs (#1459) e5eca61 flambda-backend: Add documentation for testing targets to HACKING docs (#1436) f1835c4 flambda-backend: New extensions API, supporting maturity levels (#1454) 1deb5af flambda-backend: Add Make/Dune target for debug printers (#1289) 324f32e flambda-backend: Bugfix for application mode crossing (#1451) 7ac42ab flambda-backend: Don't substitute into exclaves in `simplif.ml` (#1448) a03de20 flambda-backend: Parse unboxed literals, treating them as boxed (#1437) 5283047 flambda-backend: support native `exclave_` syntax (#1338) a1fe4cf flambda-backend: Default layout variables in gadt constructors (#1424) f4c96ff flambda-backend: Fix programmatically enabling and disabling the same layouts extension (#1446) cc58003 flambda-backend: Erasability namespace for Jane Syntax attributes/extensions (#1421) ae9099a flambda-backend: Use layout histories to produce better errors (#1340) 385ada9 flambda-backend: Fix swapgil test C warnings (#1430) ff9a0d1 flambda-backend: Bugfix for caml_switch_runtime_locking_scheme (#1429) df41dae flambda-backend: Remove layout variables from [val]s (#1423) 2e1a05a flambda-backend: Bugfix for GC backlog tracking (#1387) 8bc3fd7 flambda-backend: Allow more function argument / returns to be non-value (#1422) f2a5b93 flambda-backend: Convert Jane Syntax to use attributes for many syntactic categories (#1412) 1e2d5c5 flambda-backend: zero alloc: warning 198 about assume (#1409) 9270fee flambda-backend: Allow non-value function args and returns (#1405) 5319dfe flambda-backend: Bump magic numbers for 4.14.1-13 31fb926 flambda-backend: Fix issue with layout any and Tstr_eval in the native toplevel (#1402) dff4346 flambda-backend: Extend caml_locking_scheme with callbacks for thread start/stop (#1411) 674a335 flambda-backend: Introduce an API to swap the runtime lock for a different lock. (#1365) 1ce68db flambda-backend: Modular syntax for types (#1401) 9f55ade flambda-backend: Missing changes around the renaming to "Jane syntax" (#1400) cf8eaa8 flambda-backend: Move `include functor` over to the modular extensions machinery (#1377) da4e02d flambda-backend: Statically enabled probes (#1388) 093e638 flambda-backend: Bump magic numbers for 4.14.1-12 e7e0bf1 flambda-backend: Move layout from Type_abstract to type_declaration (#1384) 9c53ca7 flambda-backend: Rename `tests/jst-modular-extensions` to `tests/jane-modular-syntax` (#1397) 6881566 flambda-backend: Rename "modular extensions" to "Jane syntax"/"modular syntax" (#1395) bfec906 flambda-backend: Add autocompletion for test-one/promote-one (#1393) 9fc4aac flambda-backend: Fix a bug that -no-rebuild introduced in test-one (#1394) 301b683 flambda-backend: Add -no-rebuild options for test-one and promote-one (#1391) 1e090ac flambda-backend: zero alloc check: ignore functors and entry functions (#1370) 9d3b5a1 flambda-backend: Provide an AST-like view of modular extension extension node names (#1362) 7a92219 flambda-backend: Ltail for lambda and use in dissect_letrec (#1313) 7a7e639 flambda-backend: Add emacs hacking commands (#1372) 8dd6eae flambda-backend: Remove closure from Array.for_all (#1354) a4c4d03 flambda-backend: Fix ghost locations for modular extensions (#1348) ca5a008 flambda-backend: Bump magic numbers for 4.14.1-10 (#1360) a24d2ec flambda-backend: Inline a variable to save 2%+ in allocations (#1353) 96f8f00 flambda-backend: Probe name too long: warning instead of error (#1352) cd34685 flambda-backend: Typedtree module unpacks: Incorporate upstream feedback (#1288) c0482d3 flambda-backend: Add dedicated printline-debugging support (#1308) 7b295b0 flambda-backend: Fix try region closure for "match with exception" under Flambda 2 (#1339) db6552a flambda-backend: Revert ocaml/toplevel/ changes that are duplicative 132f8ba flambda-backend: Revert ocaml/driver/ changes that are duplicative 3d7f37f flambda-backend: Merge ocaml-jst 4646c2e flambda-backend: Merge ocaml-jst e62f2b1 flambda-backend: Bump magic numbers for 4.14.1-8 f617a06 flambda-backend: Revert ocaml/toplevel/ changes that are duplicative 79f91e9 flambda-backend: Revert ocaml/driver/ changes that are duplicative git-subtree-dir: ocaml git-subtree-split: 7da89ee
This PR hooks up the frontend's inferred layouts to the calculation of
Lambda.layout
s, a necessary step for unboxed floats.The
Typeopt
module, used by the translation to lambda, has a function calledlayout
that computes theLambda.layout
of a type. This information is used by various middle-end optimizations. Previously, this function simply assumed the type it was passed had sortvalue
. Now it gets that information from the front-end, at least in the places we'll need non-values for unboxed floats.The first commit changes
Lambda.layout
to take the extrasort
argument, but doesn't yet compute correct sorts. Instead, we always pass it value. Rather than just writing "Sort.value" explicitly everywhere, I added a bunch of named sorts tolayouts.ml
(e.g.,sort_function_arg
andsort_tuple_element
) and pass those. These named sorts are separated into three categories:The subsequent commits delete the named sorts in the first category, getting the sort information from the type system instead. Sorts were added in a few places in the typed tree to support this.
(Aside: It would be nice to used named layouts and sorts like this everywhere in the compiler. But this is already a reasonably sized PR that needs to be reviewed carefully, so I've left that for another day.)
Testing: There aren't many new tests, because most of this is already covered by the layouts tests. You will see that the relevant sanity check errors have changed to mention
Typeopt.layout
instead ofvalue_kind
. If this PR is correct, every layouts test that currently usesvoid
orany
to exercise a feature that we'll need to work forfloat#
should now hit the sanity check inTypeopt.layout
instead of the one invalue_kind
(because we're passing the accurate sort information from the type system).Reviewing: This needs both type system and middle-end review, and there are a couple small bits in the backend. @goldfirere to review or delegate for the type system. @mshinwell can you nominate someone for the middle-end bits (and the backend bits if needed)? It's probably easiest to review commit by commit, for the main reviewers.
This should be reviewed carefully. It would be hard for this PR to introduce miscompilations because we still have the sanity checks for void. But, when we add unboxed float, we'll be relying on this code to be correct and won't re-review it then.
Notes for reviewers about some of the individual commits:
sort_function_arg
This required adding sorts to
Texp_function
inTypedtree
, and computing those sorts in various places. An alternative would be to add sorts toTarrow
inTypes
. This would probably save some work, but isn't compatible with our plan to allowany
in arrows, and feels inelegant because the sort information would be duplicated in theTarrow
and its components.sort_function_return, sort_let_bound, and sort_pattern_var
These commits and the one after them change the interfaces in
lambda/matching.ml
andlambda/translcore.ml
a bit gratuitously. A thing that has been creeping up on us for a while now is that many functions in these files need to take multiple layouts or sorts as arguments, and lots of those arguments had names likevalue_kind
which is both no longer accurate and totally unclear (thevalue_kind
of which thing?!).The functions touched in these commits now uniformly take named arguments for layouts and sorts, and the names are all
~arg_layout
,~arg_sort
,~return_layout
, or~return_sort
. I think it's a lot clearer. Functions never take the layout and the sort for the same thing - if we need thesort
again after we've already calculated theLambda.layout
, we can easily and cheaply translate it back (sort_of_layout
has been added for this purpose). I tried a few iterations where we passed both sorts and layouts down through the translation and intomatching
, but it was really verbose and it was often unclear which to use.sort_prim_arg and sort_prim_value
Something slightly scary which pre-dates this PR is that there isn't much type checking for primitives. So, for example, this type checks and segfaults
Now you could also get the layouts wrong! I think we're not really making this problem much worse from a front-end perspective, but it would be nice to do something about in the future.
On the other hand, primitives now carry sort information with them, and that sort information will need to be used by the middle-end and backend. I haven't done that yet, because it seems hard to test without another sort, but someone knowlegeable should tell me whether this approach is reasonable and whether the comments I've left saying "this bit needs to change" are correct. I'm sure I haven't identified all such places.
sort_statement
We used to allow any layout and now require a sort for the type of statements (things like
e1
ine1; e2
). This isn't much of a restriction, though. You can still writeassert false; e2
, because we can giveassert false
the type'a : 'sort_var
.