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