Chris Fallin
|
22eed0a6ae
|
Make bitvec public; it is used by regalloc.rs shim too.
|
2021-06-19 12:47:02 -07:00 |
|
Chris Fallin
|
736f636c36
|
Add fixed-non-allocatable operand support.
|
2021-06-19 12:17:18 -07:00 |
|
Chris Fallin
|
50eb6fc42f
|
Keep internal modules private, but re-export under fuzzing feature flag
|
2021-06-19 12:08:37 -07:00 |
|
Chris Fallin
|
caf7274efd
|
Remove unused pred_pos
|
2021-06-19 11:48:54 -07:00 |
|
Chris Fallin
|
36975b8b6f
|
Add doc-comment note on Edit that stack-to-stack moves are never generated.
|
2021-06-19 11:34:05 -07:00 |
|
Chris Fallin
|
b36a563d69
|
Cleanup: split allocator implemntation into 11 files of more reasonable size.
|
2021-06-18 16:51:41 -07:00 |
|
Chris Fallin
|
6944bc4735
|
Fix typo (thanks @bjorn3).
Co-authored-by: bjorn3 <bjorn3@users.noreply.github.com>
|
2021-06-18 15:24:11 -07:00 |
|
Chris Fallin
|
6ec6207717
|
Add design document.
|
2021-06-18 13:59:12 -07:00 |
|
Chris Fallin
|
a686d5a513
|
Always recompute prio when recomputing bundle properties; otherwise is zero on new bundles and causes spill weight to be zeroed
|
2021-06-11 13:21:50 -07:00 |
|
Chris Fallin
|
ea814225a2
|
Update TODO list
|
2021-06-10 23:34:18 -07:00 |
|
Chris Fallin
|
1bd1248cb5
|
Avoid stack-to-stack moves by allocating an extra spillslot and re-using the scratch reg instead.
|
2021-06-10 22:36:02 -07:00 |
|
Chris Fallin
|
09b2dd4e73
|
TODO list update
|
2021-06-10 17:34:04 -07:00 |
|
Chris Fallin
|
fcbf384d74
|
Use hashset to avoid linear scan in conflict-bundle-set deduplication
|
2021-06-09 23:53:54 -07:00 |
|
Chris Fallin
|
4ba7b2f57e
|
Improve redundant-move elimination: don't skip the case where we don't hvae vreg metadata within a BB. Instead, keep the checker happy by feeding more metadata to it on every move.
|
2021-06-09 23:29:48 -07:00 |
|
Chris Fallin
|
2851ac80c7
|
Working redundant-move elimination
|
2021-06-09 23:03:16 -07:00 |
|
Chris Fallin
|
f898b8dcbd
|
Some fuzzbug fixes
|
2021-06-09 20:58:54 -07:00 |
|
Chris Fallin
|
e33790d8e7
|
do not remove redundant move if we don't have local (within-basic-block) vreg tags, as this might throw off the checker
|
2021-06-08 01:30:29 -07:00 |
|
Chris Fallin
|
0f270e5bcc
|
WIP.
|
2021-06-08 01:14:10 -07:00 |
|
Chris Fallin
|
940bc40fae
|
Redundant move eliminator.
|
2021-06-08 00:08:28 -07:00 |
|
Chris Fallin
|
c6bcd3c941
|
WIP: redundant-move elimination.
|
2021-06-07 21:15:32 -07:00 |
|
Chris Fallin
|
2be7bdbc22
|
Split-at-first-conflict: first conflict is first of (start of our range), (start of conflict range), not just the latter; otherwise we have a too-early split sometimes
|
2021-06-07 12:27:58 -07:00 |
|
Chris Fallin
|
0eaa0fde06
|
Fix to checker: analyze all blocks, even if out-state of entry block is empty
|
2021-06-05 14:47:55 -07:00 |
|
Chris Fallin
|
30f42a8717
|
Fix fuzzbug: properly detect too-many-live-regs condition on fuzzing input. Must be careful in how we probe the BTree when we have multiple "equal" (overlapping) keys.
|
2021-06-03 23:48:33 -07:00 |
|
Chris Fallin
|
5560499b80
|
Adaptive commitment-map scanning: re-probe from root if we skip too many entries in linear BTree scan
|
2021-06-03 18:17:28 -07:00 |
|
Chris Fallin
|
00e4240c93
|
merge bundles much faster by just concatenating range-lists and unstable-sorting, rather than a merge-sort-like traversal. Rust stdlib sort is very optimized. clang.wasm 9.1s -> 6.8s now.
|
2021-06-03 17:34:19 -07:00 |
|
Chris Fallin
|
6a0739b62a
|
Implement spill-bundle: move all empty ranges, and empty leading/trailing pieces surrounding split points, to a single spill bundle, in an attempt to avoid excessive movement
|
2021-06-03 00:18:27 -07:00 |
|
Chris Fallin
|
dc2b0d1913
|
Add a perf idea to TODO list
|
2021-06-01 23:13:08 -07:00 |
|
Chris Fallin
|
2fe276ca04
|
BTreeMap probe fix (fuzzbug): BTree does not interact nicely with LiveRangeKey definition of equality; need to probe with one-less-than start to get proper range
|
2021-06-01 23:10:34 -07:00 |
|
Chris Fallin
|
a2a770ec50
|
Fuzzbug fix
|
2021-06-01 18:57:07 -07:00 |
|
Chris Fallin
|
2614eac21e
|
fuzzbug fix: restore clean error exit required by regalloc.rs fuzzer on too-many-live-regs error
|
2021-06-01 16:31:33 -07:00 |
|
Chris Fallin
|
e49727dc75
|
Fuzzbug fix: fix some weirdness with BTree iteration inner loop
|
2021-06-01 15:32:12 -07:00 |
|
Chris Fallin
|
44ca1893c3
|
Fuzzbug fix: properly check for conflicting reqs before merging bundles (cached values are not computed yet)
|
2021-06-01 14:52:59 -07:00 |
|
Chris Fallin
|
f49167e0fe
|
emit annotations at Info level, for easier selective perf-debugging
|
2021-05-28 18:40:39 -07:00 |
|
Chris Fallin
|
789651f947
|
Rework inner allocation-loop code: choose more wisely between splitting and evicting based on costs (and unify the fixed-reg-constraint case)
|
2021-05-28 17:36:06 -07:00 |
|
Chris Fallin
|
43d7095cbd
|
Properly split when we hit a fixed conflict
|
2021-05-28 16:49:32 -07:00 |
|
Chris Fallin
|
7171624750
|
Don't generate r1->scratch,scratch-r1 sequence for cyclic moves of r1->r1 that are generated to change vreg ownership and keep the checker happy. Seems to eliminate a bit of braindeadness and improve bz2 by ~5-10%.
|
2021-05-26 21:35:43 -07:00 |
|
Chris Fallin
|
13bde99d7d
|
bugfix with clean-spill opt: avoid if liverange starts at start of block (this is like a def) or if has starts-at-def flag.
|
2021-05-26 18:08:41 -07:00 |
|
Chris Fallin
|
e521811b88
|
Avoid re-spilling to spillslot when still clean: intra-block edition (inter-block needs more analysis and careful thought)
|
2021-05-26 17:08:14 -07:00 |
|
Chris Fallin
|
dcf6f473ca
|
inline some things
|
2021-05-26 00:48:41 -07:00 |
|
Chris Fallin
|
4e0dd1f296
|
little tweak to avoid a div/mod on every iter of a PReg alloc loop
|
2021-05-26 00:38:53 -07:00 |
|
Chris Fallin
|
b3dc2b25a5
|
Alloc spillsets for whole vreg, not just spilled LRs. This is a prerequisite to allowing a "clean" value to remain in spillslot while also in reg and avoiding the re-spill. It should also reduce stack-to-stack moves (though they can still come from progmoves).
|
2021-05-25 18:19:25 -07:00 |
|
Chris Fallin
|
ca5f24f6b7
|
Hint the same PReg for both halves of a split
|
2021-05-24 23:49:47 -07:00 |
|
Chris Fallin
|
7cdcb2031e
|
Split heuristic: split before entering deeper loop nest
|
2021-05-24 23:09:05 -07:00 |
|
Chris Fallin
|
8887077b59
|
small fix: preserve starts-at-def flag when setting liverange weight
|
2021-05-24 22:45:25 -07:00 |
|
Chris Fallin
|
3382f9a2e8
|
Split based on first conflict of lowest-weight conflict, not first conflict. Also stop scanning PRegs when max bundle weight in conflict bundle list exceeds current best option.
|
2021-05-24 22:26:57 -07:00 |
|
Chris Fallin
|
5b47462e0c
|
Loop depth instead of hot/cold, with fast O(n) loop-depth computation. Use this to compute use weights.
|
2021-05-24 22:09:41 -07:00 |
|
Chris Fallin
|
5895ae8a2d
|
Remove precomputed requirements from ranges and bundles; cost of struct size and updates is not worth it. Instead, do a simple conflicting-requirements check on each attempted merge, but minimize cost by (i) only checking after ruling out overlaps, and (ii) only checking if we know one of the sides has at least one non-register constraint.
|
2021-05-24 21:32:41 -07:00 |
|
Chris Fallin
|
5120681730
|
Fuzzbug fix for requirement recomputation on minimal bundles with multiple LRs
|
2021-05-24 17:49:45 -07:00 |
|
Chris Fallin
|
10d926557a
|
avoid some redundant work by computing initial reqs only once
|
2021-05-24 15:52:14 -07:00 |
|
Chris Fallin
|
78c009181c
|
Fuzzbug fix re: new requirements computation and multi-fixed-reg fixup.
|
2021-05-24 15:47:15 -07:00 |
|