-
Notifications
You must be signed in to change notification settings - Fork 97
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
experiment: precise heap tags #4544
base: master
Are you sure you want to change the base?
Conversation
…t.Array in compile.ml
…stream_write_text to accept blob or text
I think I've addressed all the issue. PTAL @luc-blaeser |
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.
Also the tagging of the actor and shared function references looks really good. Thank you very much. I will now try to merge with the EOP PRs.
Co-authored-by: Luc Blaeser <[email protected]>
Co-authored-by: Luc Blaeser <[email protected]>
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.
The patch is long, but mostly type-directed, I don't see correctness hazards. Hopefully the blob conversions will not cause perf concerns, as they are mostly small. LGTM
@ggreif, since Luc has already merged this branch into his EOP PRs, and a squash merge of this PR to master may cause him trouble merging later, we've decide not to merge this branch directly into master but as part of larger PR. That's also why I'm not addressing the issues you found (which are mostly cosmetic). |
Not merging into master as already merged into Luc's EOP PRs. |
I now merged the PR into the EOP PR stack. I think we could probably now close this PR. |
Implement precise tagging of heap allocated objects.
Splits
TAG_ARRAY
into consecutiveTAG_ARRAY_I
,TAG_ARRAY_M
,TAG_ARRAY_T
,TAG_ARRAY_S
(immutable array, array, tuple, shared function).TAG_BLOB
into consecutiveTAG_BLOB_B
,TAB_BLOB_T
andTAG_BLOB_P
,TAG_BLOB_A
(blob, text, principal, actor reference).TAG_BITS_32
into consecutiveTAG_BITS32_U
,TAG_BITS32_S
andTAG_BITS32_F
((boxed) Nat32/Int32, Float32 (reserved for future use).TAG_BITS_64
into consecutiveTAG_BITS64_U
,TAG_BITS64_S
andTAG_BITS64_F
((boxed) Nat64/Int32, Float64).Modifies array slicing logic to preserve the base tag of the underlying array, by stealing the top 2 bits of the slice start field, relying on the fact that array indices are < 2^30. For clarity, the tag in decompressed on each iteration. For efficiency, it could actually be maintained during slicing compressed form as a sort ( see 448962f).
TODO:
[ ] print refined tags in debug output?(rts debug printing is rarely used and can be adapted later)