Commit graph

1678 commits

Author SHA1 Message Date
Folkert
fbab19a937 custom debug instance for LambdaSet
so that symbols are printed as their numbers; makes mono tests reliable
2022-01-19 20:57:36 +01:00
Folkert
859bdf5212 Merge remote-tracking branch 'origin/trunk' into effect-forever 2022-01-19 20:14:24 +01:00
Folkert
4c445f9f24 recognize functions that become tail-recursive after closure conversion 2022-01-19 20:09:20 +01:00
Jan Van Bruggen
1e9d2d1239 Remove accidental trailing spaces 2022-01-18 22:25:46 -07:00
Folkert de Vries
e1d990896a
Merge branch 'trunk' into mono-display 2022-01-14 13:55:52 +01:00
ayazhafiz
9f78eb2e01 Fix bug that caused extraneous assignment in IR generation
Previously we would expand optional record fields to assignments when
converting record patterns to "when" expressions. This resulted in
incorrect code being generated.
2022-01-13 18:34:25 -05:00
ayazhafiz
72ee2d6327 Mark pretty_print_ir_symbols public 2022-01-13 16:35:09 -05:00
ayazhafiz
c38ca2dfa4 Anything for you mr paperclippy 2022-01-13 16:33:26 -05:00
ayazhafiz
8d372edda1 Add config variables for printing IR during mono stages 2022-01-13 16:33:26 -05:00
ayazhafiz
e655ab7d3b Module comments for reset-reuse
Figuring out what this module was doing, and why, took me a bit less
than half an hour. We should document what's happening for others in the
future so they don't need to follow up on Zulip necessarily.
2022-01-13 16:33:23 -05:00
Richard Feldman
f83f50a9a7
Merge pull request #2337 from rtfeldman/i/2331
Use unsigned LLVM intrinsic arithmetic for unsigned integers
2022-01-12 08:29:30 -05:00
ayazhafiz
2c41c43aea Implement saturated add/subtract 2022-01-10 22:37:08 -05:00
ayazhafiz
103e85f339 Pretty-print laayouts when PRETTY_PRINT_IR_SYMBOLS is true 2022-01-10 19:21:18 -05:00
Brian Carroll
5560ecb63e Implement tail recursion for union refcounting procs 2022-01-06 22:43:02 +00:00
Brian Carroll
040b8ce430 Reduce code size for Union refcount procedures 2022-01-06 10:49:34 +00:00
Brian Carroll
d9cc3c5692 Modify refcount of contents *before* structure to prevent use-after-free 2022-01-06 10:49:34 +00:00
Brian Carroll
456bda0895 Prevent confusion between separate instances of RecursivePointer 2022-01-06 10:49:34 +00:00
Brian Carroll
ad95ea4a3b Remove a debug assert 2022-01-06 10:49:34 +00:00
Brian Carroll
5e642c880c Mask out union tag ID from pointer when calculating refcount address 2022-01-06 10:49:34 +00:00
Brian Carroll
5d7b4018b7 Generate refcounting helper procedures for tag unions 2022-01-05 12:24:04 +00:00
Folkert
fc4cea9f75 don't throw away a jump 2022-01-03 16:50:43 +01:00
Folkert
7044e95df8 fix imported function thunk 2022-01-03 16:18:53 +01:00
Brian Carroll
1de26c084d Make Struct DecRef a no-op 2022-01-01 21:57:28 +00:00
Brian Carroll
98ab97083a For DecRef, remove assumption that the refcounted symbol is ARG_1 2022-01-01 21:57:28 +00:00
Brian Carroll
176bb6f6aa Use joinpoints for DecRef 2022-01-01 21:57:28 +00:00
Brian Carroll
e55806fe27 Update is_rc_implemented_yet 2022-01-01 12:33:36 +00:00
Brian Carroll
8078afc74f Delete a stray println from debug 2022-01-01 11:39:55 +00:00
Brian Carroll
953d82b341 Merge branch 'trunk' of github.com:rtfeldman/roc into wasm-refcount-struct 2022-01-01 11:33:27 +00:00
Brian Carroll
310de090a3 Wasm: Refcounting for struct fields 2022-01-01 11:32:53 +00:00
Brian Carroll
12a330dd76 Refactor to move all refcount IR gen to the same file 2021-12-31 23:09:11 +00:00
Folkert
ee9f0b2f04 force imported thunks when assigned to a variable 2021-12-31 21:44:07 +01:00
Brian Carroll
f767014f30
Merge pull request #2301 from rtfeldman/wasm-refcount-list
Wasm refcounting for lists
2021-12-31 13:25:38 +00:00
Brian Carroll
c5663e3538 Generate IR helper proc for list refcounting 2021-12-30 17:15:31 +00:00
Brian Carroll
59472d3310 Slightly improve pretty printing of inc statement 2021-12-30 09:01:22 +00:00
ayazhafiz
d966d8921f Support nullable wrapped tag union layouts in REPL 2021-12-29 17:55:21 -06:00
Brian Carroll
37de499248 Reorganise code gen helper in roc_mono 2021-12-28 11:03:33 +00:00
Folkert de Vries
249878cbd9
Merge pull request #2281 from rtfeldman/i/2149
(llvm) Generate code for tag unions less than 64 bits in size correctly
2021-12-27 22:38:08 +01:00
Brian Carroll
c67b9e7a6f clippy 2021-12-27 18:11:48 +00:00
Brian Carroll
0285cd88c5 Don't emit tail recursion loop for non-recursive unions 2021-12-27 18:08:43 +00:00
Brian Carroll
0d8a2c8a49 Use tail call elimination where possible in == for tag unions 2021-12-27 18:08:43 +00:00
Brian Carroll
65a9464d98 Replace RecursivePointer todo with unreachable 2021-12-27 18:08:43 +00:00
ayazhafiz
a03f7fa46c Update layout tests 2021-12-26 14:44:43 -06:00
ayazhafiz
c8ba554d8c Clippy warning 2021-12-26 11:58:50 -06:00
ayazhafiz
5e5eb6dca8 (llvm) Generate code for tag unions less than 64 bits in size correctly
Previously, we assumed that a union layout always lived on >= 1 64-bit
boundary when generating an LLVM type for it. For small tags unions,
like `[ Ok i8, Err ]` this need not be the case; indeed, a tag union
like that is actually only 2 bits - 1 bit for the "i8" data, and one bit
of the tag kind.

This led to a discrepancy between what the layout IR and generated LLVM
code would assume about the size of tag unions. In the case above, the
layout IR would assume the tag data is 2 bits wide, and the tag id is 1
bit into the data. But the LLVM code would generate a type that was 65
bits wide, the first 64 bits being for the "i8" data and the last 1 bit
being for the tag kind.

Usually, just running the LLVM-emitted code would not present a problem.
But it does present a problem when we use the layout IR to inspect the
result of LLVM-run code, in particular when we try to look up the tag
ID, as the repl does. This patch fixes that issue.

Note that this bug did not present itself in `test_gen` previously
because the data that most tests check against is stored in the front of
the representation.

Closes #2149
2021-12-26 11:45:02 -06:00
Brian Carroll
e54ce0c975 Ensure procs are in the same order as the Symbols 2021-12-26 10:45:23 +00:00
Brian Carroll
9fb7048de0 Rename rec_ptr_layout -> recursive_union
I kept thinking it was of type Layout but it's not
2021-12-26 10:45:23 +00:00
Brian Carroll
ab7867d233 Separate specializations from procs
This was causing issues with recursive procs.
We need to be able to look up the proc's symbol
before we have finished generating it.
2021-12-26 10:45:23 +00:00
Brian Carroll
d08b79295c Fix unique names 2021-12-26 10:40:45 +00:00
Brian Carroll
da4cf721cc Fix equality on empty structures 2021-12-26 10:40:45 +00:00
Brian Carroll
a0afb64cb0 Fix bug storing linker data for generated procs 2021-12-26 10:40:45 +00:00