Ryan Houdek
7897b6ad55
Merge pull request #4759 from alyssarosenzweig/ra/simplify
...
RegisterAllocationPass: simplify next-use logic
2025-08-04 14:59:13 -07:00
Alyssa Rosenzweig
734ab4429f
RegisterAllocationPass: fix SRA spilling corner
...
I hate this.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-04 17:06:15 -04:00
Alyssa Rosenzweig
dcc458ea94
RegisterAllocationPass: simplify next-use logic
...
I doubt this will fix the regression but it might make it easier to identify.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-04 14:31:08 -04:00
Alyssa Rosenzweig
31091c1053
RegisterAllocationPass: remove some indentation
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-04 08:16:28 -04:00
Alyssa Rosenzweig
7ee5a8065c
RegisterAllocationPass: defer next-use analysis
...
This is expensive and only needed for spilling, so only do it for spilling. This
complicates the RA a bit but speeds us up on average since most blocks
don't spill. Total results of this change (including the prep commits that
slowed things down temporarily):
Difference at 95.0% confidence
-1.71952% +/- 0.455996%
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 13:24:52 -04:00
Alyssa Rosenzweig
2f2353765f
RegisterAllocationPass: use kill bits
...
this is a lot lighter weight than next uses for the same purpose.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 13:24:52 -04:00
Alyssa Rosenzweig
8b4c2f5093
RegisterAllocationPass: consider AnySpilled at start of iteration
...
if we spill for SRA, we don't need/want to execute this code path. this will be
load bearing by the end of this series.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 13:24:52 -04:00
Alyssa Rosenzweig
d80662a9ba
RegisterAllocationPass: ignore kill bit in SRA
...
needed for the backwards pass internally due to ordering. a little awkward but
shrug.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 12:11:53 -04:00
Alyssa Rosenzweig
c82efe7621
RegisterAllocationPass: set AnySpilled less
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-08-01 10:39:11 -04:00
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