Alyssa Rosenzweig
61150a18cc
RegisterAllocationPass: fix bookkeeping with merging
...
this fixes Hades.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-07-03 17:22:53 -04:00
Ryan Houdek
95ca20cfee
Merge pull request #4636 from alyssarosenzweig/bug/ra-invariant
...
RegisterAllocationPass: assert an invariant in post-RA prop
2025-07-02 18:17:08 -07:00
Alyssa Rosenzweig
5a536d47fd
RegisterAllocationPass: assert an invariant in post-RA prop
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-07-02 13:53:47 -04:00
Alyssa Rosenzweig
360d8c629e
RegisterAllocationPass: optimize cpuid
...
for constant function where we don't have a leaf. this isn't fully general but
we can't do better without a more general post-RA optimizer. i'm not inclined to
do that unless/until we get hot blocks demonstrating its value (that we can
compare against the JIT time hit of the heavier-duty optimizer.)
however this special case we can (and should) optimize for now.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-07-02 13:04:49 -04:00
Alyssa Rosenzweig
abb41d39e4
RegisterAllocationPass: optimize xgetbv
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-07-02 13:04:49 -04:00
Alyssa Rosenzweig
d4eb4ef594
IR: plumb CPUID into RA pass
...
for cpuid folding.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-07-02 13:04:49 -04:00
Alyssa Rosenzweig
cda15ce9ea
RegisterAllocationPass: optimize long divsion
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-24 16:10:29 -04:00
Alyssa Rosenzweig
5243f50ed1
RegisterAllocationPass: merge 32-bit mov + 64-bit and
...
mov wA, wB
and xA, xA, ...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-19 13:44:23 -04:00
Alyssa Rosenzweig
cde805147f
RegisterAllocationPass: merge 32-bit moves
...
mov wA, wB
op wA, wA, ..
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-19 13:44:23 -04:00
Alyssa Rosenzweig
7e39eb3df2
RegisterAllocationPass: merge full size moves
...
mov xA, xB
op xA, xA, ..
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-19 13:44:23 -04:00
Alyssa Rosenzweig
af366d4480
RegisterAllocationPass: skip inlineconstant in RA
...
similar reasoning as guestopcode.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-19 13:44:23 -04:00
Alyssa Rosenzweig
33ef98aae7
RegisterAllocationPass: refactor push/pop merge
...
to make way for move merging.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-19 13:44:23 -04:00
Alyssa Rosenzweig
c16db2db4a
RegisterAllocationPass: simplify an expression
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-19 13:44:23 -04:00
Alyssa Rosenzweig
059d980c33
IR: give StoreRegister a precoloured destination
...
this will eliminate an annoying special case in post-RA opts.
No difference proven at 95.0% confidence
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-19 13:44:23 -04:00
Alyssa Rosenzweig
581381fd86
IR: make 0 the invalid physical register
...
so zero init works as expected
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-06-19 13:44:23 -04:00
Alyssa Rosenzweig
6ad7392cd7
RegisterAllocationPass: pair push/pop
...
as a simple post-RA peephole. much much easier to do post-RA than pre-RA.
This isn't a post-RA /pass/ in the traditional sense... it's done while
assigning registers to coalesce the passes over the IR, since we pay per-pass
and we can merge the walks over the IR.
Closes : #4480
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-27 11:33:12 -04:00
Alyssa Rosenzweig
b15d5f299c
RegisterAllocationPass: drop dead IP increment
...
written but never read.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-27 11:32:33 -04:00
Alyssa Rosenzweig
6927c7577a
RegisterAllocationPass: delete trivial instructions
...
lots of instructions only exist for RA, so RA can garbage collect them before
post-RA passes (including the JIT) deals with them. this simplifies our life
now, and makes post-RA passes a LOT simpler for little cost.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-26 15:52:23 -04:00
Alyssa Rosenzweig
babd6e9a7b
RegisterAllocationPass: allow Copy on the input IR
...
useful for pusha.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-26 15:52:23 -04:00
Alyssa Rosenzweig
feb67658e1
RegisterAllocationPass: exploit new IR
...
Now that we can just set registers directly, we can simplify RA a lot. All the
Map/Unmap nonsense - it all goes away. We just assign registers as we go and
everything clicks into place naturally.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
65ee1fafa8
IR: drop RegisterAllocationData
...
This sideband is now unused, registers are encoded directly in the IR. So we can
garbage collect all this code for quite some savings.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
49f8332c5b
JIT: use registers directly from the IR
...
This is the flag day change from the series, using all the new shiny
infrastructre we added.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
30f3b545af
RegisterAllocationPass: use Header spill slots instead
...
Removes even more RAData dependence.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
f66bf3811e
RegisterAllocationPass: set PostRA flag
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
7eaf5ae9e0
IR: drop FillRegister original source
...
this is now unused, and it's problematic with future work.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-16 15:18:06 -04:00
Alyssa Rosenzweig
55bd16e2c8
IR: make FillRegister sizes explicit
...
instead of hacking around it.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-15 14:57:51 -04:00
Alyssa Rosenzweig
9f399f3313
RegisterAllocationPass: rm unused arg to DecodeSRAReg
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-27 16:45:31 -04:00
Alyssa Rosenzweig
3939213336
RegisterAllocationPass: rm useless assertion
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-27 16:45:31 -04:00
Ryan Houdek
b0b41d00ee
Various: More static analysis warnings cleanup
...
NFC
2025-03-12 17:27:41 -07:00
Ryan Houdek
2bf87ff40f
Various: Removes warnings about uninitialized variables
...
NFC. These wouldn't even occur in practice.
2025-03-04 19:59:26 -08:00
Tony Wasserka
da58e6a597
Fix warnings about unused variables
2025-01-21 12:07:33 +01:00
Tony Wasserka
e54b9237c6
Drop use of assume-asserting logging macros
2025-01-21 12:01:33 +01:00
Ryan Houdek
9b6cc8f7e0
IR: Convert OpSize over to enum class
...
NFC
Do the final mopping up to convert the OpSize enum to an enum class!
2024-10-29 16:52:16 -07:00
Ryan Houdek
4a6b5d4ec7
IR: Change VMov to use IR::OpSize
2024-10-27 21:52:11 -07:00
Alyssa Rosenzweig
319f1e66cb
RegisterAllocationPass: eliminate a silly sxtb
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-10-02 13:38:48 -04:00
Alyssa Rosenzweig
d16969bdce
RegisterAllocationPass: simplify
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-10-02 13:38:48 -04:00
Alyssa Rosenzweig
c17858bfeb
RegisterAllocationPass: don't lookup sources
...
lot of silly chasing. not needed.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-10-02 13:38:48 -04:00
Alyssa Rosenzweig
ec24fc3d5d
RegisterAllocationPass: infer AnyRemapped
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-10-02 13:38:48 -04:00
Alyssa Rosenzweig
8819fa88d5
RegisterAllocationPass: avoid allocating remaps
...
shaves 6ms off.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-10-02 13:38:48 -04:00
Alyssa Rosenzweig
5aaa18e7a2
RegisterAllocationPass: remove Class->Allocated
...
not needed anymore.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-10-02 12:41:37 -04:00
Alyssa Rosenzweig
8a551b9e64
RegisterAllocationPass: rm leftover comment
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-10-02 12:41:37 -04:00
Alyssa Rosenzweig
aa548bd19c
RegisterAllocationPass: track if we need a remap
...
should be faster on average.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-10-02 12:41:37 -04:00
Alyssa Rosenzweig
9565f16d84
RegisterAllocationPass: simplify
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-10-02 12:41:37 -04:00
Alyssa Rosenzweig
50a3ca0d6d
IR: introduce dedicated PF/AF instructions
...
this makes reasoning about them a little easier, e.g. for flags. about 1% win
in nodejs.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-09-07 10:59:05 -04:00
Alyssa Rosenzweig
231c28395c
RegisterAllocationPass: clean up after pair removal
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-08-14 09:37:06 -04:00
Alyssa Rosenzweig
64a45c0d29
IR: remove pairs
...
They're now unused. And won't be missed.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-08-14 09:37:06 -04:00
Alyssa Rosenzweig
a9c26cbf71
IR: add coalescing heuristics for pair replacements
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-08-14 09:17:23 -04:00
Alyssa Rosenzweig
504511fe7e
RA: fix interaction between SRA & shuffles
...
missed a Map. tricky case hit by the unit test added in the next commit.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-07-04 13:37:13 -04:00
Alyssa Rosenzweig
9443b18076
RegisterAllocationPass: optimize spill loop
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-06-16 08:15:15 -04:00
Alyssa Rosenzweig
6a314bc9cd
RegisterAllocationPass: prioritize remat over spilling
...
No instcountci changes yet, since nothing currently spills in instcountci. This
mitigates spilling later seen with #3703 , and should help for certain
pathological blocks even without those changes (maybe we should try to get some
of those blocks in instcountci?).
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2024-06-15 20:21:57 -04:00