mu-impl-fast merge requestshttps://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests2017-10-09T10:46:54+11:00https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/43allow REFCAST for global2017-10-09T10:46:54+11:00Yi Linallow REFCAST for globalhttps://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/42Debug exceptions2017-10-04T10:10:20+11:00Isaac Garianoisaac@ecs.vuw.ac.nzDebug exceptionsI added more helpful debug info for exceptions (only when 'MU_LOG_LEVEL=debug' or greater of course), as well as changing the way inlinining works with calls...
(it will now not inline a call whose body has a potentially throwing instru...I added more helpful debug info for exceptions (only when 'MU_LOG_LEVEL=debug' or greater of course), as well as changing the way inlinining works with calls...
(it will now not inline a call whose body has a potentially throwing instruction, if the call has an exception clause, ofcourse we could still inline these, but doing so correctly will require some work and allot of thought...)https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/41Aarch64 fixes2017-10-02T15:08:16+11:00Isaac Garianoisaac@ecs.vuw.ac.nzAarch64 fixesI just fixed some bugs with aarch64, and some architecture independent ones as well.I just fixed some bugs with aarch64, and some architecture independent ones as well.https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/40identify cases where 64b ints are small enough to fit in an i32 immediate2017-09-27T15:59:12+10:00Yi Linidentify cases where 64b ints are small enough to fit in an i32 immediatehttps://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/39Do not use inc/dec for add/sub with 12017-09-27T12:19:33+10:00Yi LinDo not use inc/dec for add/sub with 1It turns out that `inc` and `dec` could be slower than `add x, 1` and `sub x, 1`. x86 instruction selector no longer pick add-1 and sub-1 as a pattern to emit special instructions.It turns out that `inc` and `dec` could be slower than `add x, 1` and `sub x, 1`. x86 instruction selector no longer pick add-1 and sub-1 as a pattern to emit special instructions.https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/38Fix a bug in branch adjustment: when neither label follows a conditional bran...2017-09-21T21:32:38+10:00Yi LinFix a bug in branch adjustment: when neither label follows a conditional branch, a temporary label is properly created.https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/37X86 const pattern2017-09-20T19:42:08+10:00Yi LinX86 const patternInstruction selection patterns for constant 0 and constant 1 in arithmetic operations for x86_64.Instruction selection patterns for constant 0 and constant 1 in arithmetic operations for x86_64.https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/36fix2017-09-20T12:03:08+10:00Isaac Garianoisaac@ecs.vuw.ac.nzfixhttps://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/35Use refined CI configs2017-09-19T16:45:14+10:00Zixian CaiUse refined CI configshttps://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/34A few performance improvements2017-09-19T14:02:19+10:00Yi LinA few performance improvements* fixed broken branch adjustment
* fixed broken branch-to-branch elimination
* rewrote a part of the register allocator, fixed bugs
* PIN/UNPIN is compiled as MOV for x86 (this is not exactly correct though)
* allocation hybrid of unknow...* fixed broken branch adjustment
* fixed broken branch-to-branch elimination
* rewrote a part of the register allocator, fixed bugs
* PIN/UNPIN is compiled as MOV for x86 (this is not exactly correct though)
* allocation hybrid of unknown size will do one call into runtime `allocate_any` instead of checking size in the generated code and call `allocate_fast` and `allocate_large` respectively.https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/33Extra validation2017-09-19T09:46:47+10:00Isaac Garianoisaac@ecs.vuw.ac.nzExtra validationMinor changes (I added a new test for thread locals, and fixed some invalid IR, as well as making dynamic libraries link to libmu properly).
I also made IR validation occur in release builds now, it shouldn't be too expensive, but I adde...Minor changes (I added a new test for thread locals, and fixed some invalid IR, as well as making dynamic libraries link to libmu properly).
I also made IR validation occur in release builds now, it shouldn't be too expensive, but I added a VM option (`--dont-validate-ir`) that will turn it off (I haven't tested it, but it should work, baring concurrency issues...).https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/32Fix signature equality2017-09-13T10:54:41+10:00Isaac Garianoisaac@ecs.vuw.ac.nzFix signature equalityhttps://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/31use main_test.c for tests2017-09-11T22:26:06+10:00Yi Linuse main_test.c for testshttps://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/30Trying to use interpose to overide free and realloc on mac...2017-09-13T10:54:41+10:00Isaac Garianoisaac@ecs.vuw.ac.nzTrying to use interpose to overide free and realloc on mac...Fixed overriding of free and realloc on Mac OSX (hopefully, you probably want to test this fully before accepting the merge).Fixed overriding of free and realloc on Mac OSX (hopefully, you probably want to test this fully before accepting the merge).Yi LinYi Linhttps://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/29Isaac working2017-09-06T12:21:02+10:00Isaac Garianoisaac@ecs.vuw.ac.nzIsaac workingChanges mostly to do with storage of names:
* `MuName`'s are now `Arc<String>` as opposed to `String`
* Only names the client gives my `gen_sym` are stored in `id_name_map` and `name_id_map` (so that `id_of` and `name_of` will only work ...Changes mostly to do with storage of names:
* `MuName`'s are now `Arc<String>` as opposed to `String`
* Only names the client gives my `gen_sym` are stored in `id_name_map` and `name_id_map` (so that `id_of` and `name_of` will only work with these)
* Bootimages now only use `id_name_map` and `name_id_map` when the client calls `id_of` and `name_of`
* Only names for whitelisted entities are dumped in the boot image
* Now use a new version of rodal that allows for better debugging output
* Added a test to check that spilling accros swapstacks works properly
The changes to how names are stored and dumped makes boot image building significantly faster.
(I am currently testing this on aarch64, it should all work perfectly)https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/28WIP: Resolve "DYLD_LIBRARY_PATH dependent tests fails on macOS with SIP enabled"2017-09-04T14:49:19+10:00Zixian CaiWIP: Resolve "DYLD_LIBRARY_PATH dependent tests fails on macOS with SIP enabled"Closes #85Closes #85https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/27Issue82 inf loop in peephole2017-09-01T12:29:58+10:00Yi LinIssue82 inf loop in peepholeOur peephole optimisation will remove jump-to-jump cases.
However, for cases such as
```
L1:
jmp L2
..
L2:
jmp L3
..
L3:
jmp L1
```
the peephole optimiser will get into an infinite loop as we cannot find the final destination to...Our peephole optimisation will remove jump-to-jump cases.
However, for cases such as
```
L1:
jmp L2
..
L2:
jmp L3
..
L3:
jmp L1
```
the peephole optimiser will get into an infinite loop as we cannot find the final destination to jump. We need to be able to detect this infinite loop so the compiler won't get into an infinite loop. We do not apply optimisations (it is a busy infinite loop that does nothing, which is meaningless anyway).https://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/26Reduced contents of name_id_map and id_name_map2017-08-29T17:48:37+10:00Isaac Garianoisaac@ecs.vuw.ac.nzReduced contents of name_id_map and id_name_maphttps://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/25merge with develop: swapstack implementation2017-08-28T11:40:32+10:00Yi Linmerge with develop: swapstack implementationhttps://gitlab.anu.edu.au/mu/mu-impl-fast/-/merge_requests/24Issue83 memory leak2017-08-25T15:29:40+10:00Yi LinIssue83 memory leakImplemented Drop for VM and GC spaces, so the metadata tables are deallocated properly. Running cargo tests requires roughly 200M memory (total allocated memory is 4GB).Implemented Drop for VM and GC spaces, so the metadata tables are deallocated properly. Running cargo tests requires roughly 200M memory (total allocated memory is 4GB).