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
88682a457a
IR: add RemovePostRA helper
...
Remove blows up because of use tracking, but we can do a much simpler version
for post-RA and elide lots of checks from trying to make Remove more general.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-26 15:52:23 -04:00
Alyssa Rosenzweig
61ae53cc03
IR: add paired PushTwo/PopTwo helpers
...
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
bf1597920c
IR: use post-RA flag
...
rather than implicitly depending on the RA data.
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
a01e29ac99
IR: extend the IR header with RA info
...
Beyond the actual registers allocated, there are two pieces of sideband data we
store in the RAData object:
* # of spill slots (explicitly)
* whether RA has run (implicitly by the existence of RAData)
We want to get rid of RAData, so we'll move these to the header.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
3136a5e2f8
IR: add helpers to extract physical registers from IR
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
c4f00a05df
IR: add space for registers right in OrderedNode *
...
This again follows the same idea of eliminating the RAData sideband.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-19 13:42:59 -04:00
Alyssa Rosenzweig
261ae7a195
IR: add immediates into OrderedNodeWrapper
...
this will let us encode registers directly inside OrderedNodeWrapper, rather
than pointers to OrderedNode *. that will let us speed up RA & onwards.
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
10a02449b1
IR: drop RA validation
...
There's no reasonable way to keep this around without adding significant
complexity to RA. This series prefers to drop complexity from RA, lessening the
need for validation in the first place.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-16 15:18:06 -04:00
Alyssa Rosenzweig
8532593d91
IR: specify DestSize for RMWHandle
...
seems to just have been an oversight.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-15 14:58:05 -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
c7797d56c9
IR: don't use GetOpSize in ExitFunction
...
nothing else does this, and it complicates upcoming refactor to move away from
IR builder helpers doing IR dereferencing.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-15 14:51:11 -04:00
Ryan Houdek
221ae2d7b4
Merge pull request #4571 from alyssarosenzweig/opt/constprop-xor-1
...
ConstProp: optimize XOR with all-1
2025-05-14 12:59:12 -07:00
Alyssa Rosenzweig
ad75563a26
IR: drop irrelevant reference to x86
...
we don't run the JIT on x86 anymore.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-14 15:32:07 -04:00
Alyssa Rosenzweig
fbd706c191
ConstProp: optimize XOR with all-1
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-05-14 14:48:29 -04:00
Tony Wasserka
39a5c2021e
ThreadPoolAllocator: Rename FixedSizePoolAllocation to PoolBufferWithTimedRetirement
...
This more accurately reflects that the core feature of the helper is the
timer-based unclaiming of buffers instead of the allocation size.
2025-05-14 13:29:44 +02:00
Ryan Houdek
1a0d97d5f7
Various: UBSAN fixes around unaligned accesses
2025-04-23 00:31:09 -07:00
Ryan Houdek
60565cc2ef
OpcodeDispatcher: Implement support for self-synchronizing cycle counter
...
FEAT_ECV added a new synchronizing cycle counter instruction that
restrict speculation across the cycle counter access. Because it
restricts speculation, it effectively acts like an isb and load dsb.
Luckily for us, this actually matches behaviour for what rdtscp does, so
we can take advantage of it if the host supports FEAT_ECV.
2025-04-15 15:42:43 -07:00
LC
d5db2ccf18
Merge pull request #4475 from Sonicadvance1/x87_stack_bug
...
x87OptimizationPass: Fixes {Inc,Dec}StackPop
2025-04-03 11:25:53 -04:00
Ryan Houdek
cebcf50c65
x87OptimizationPass: Fixes {Inc,Dec}StackPop
...
On the slow path these were pushing and popping in the wrong direction.
Switch them around to ensure the unittests work.
2025-04-02 14:25:02 -07:00
Ryan Houdek
9b0bb29d78
IR: Implement support for sha256h{2,}
...
I keep carrying this patch around. Not yet wired up to the instruction
implementation yet, but I don't want to forget about it.
2025-04-01 17:53:48 -07:00
Alyssa Rosenzweig
1f08f8df0d
IR: allow VUShrNI with bitshift=0
...
encodes to Xtn, we need this to narrow.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-31 16:03:18 -04:00
Alyssa Rosenzweig
0038a0b19c
IR: plumb Vector_FToISized op
...
this exposes the frint* opcodes in a new ir op
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-31 16:03:18 -04:00
Ryan Houdek
feab0bce4b
x87StackOptimizationPass: Initialize a couple of arrays
...
Just to silence some warnings that think these aren't zero initialized
before using.
2025-03-29 14:02:46 -07:00
Lioncache
bfba74dab9
IR: Replace use of deprecated std::is_trivial_v template
...
This is deprecated in C++26
2025-03-29 00:33:39 -04:00
Ryan Houdek
bd1d6820b7
Merge pull request #4438 from Sonicadvance1/static_analysis_wars
...
Static analysis warning fixes
2025-03-27 20:30:37 -07:00
Ryan Houdek
fbe3a86c4e
Merge pull request #4443 from alyssarosenzweig/ra/cleanup
...
RA: small cleanups
2025-03-27 19:46:14 -07: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
Paulo Matos
4565f2b689
Initialize class fields to null/zero
...
Silence a couple of static analyzer warnings.
2025-03-27 15:35:40 +01:00
Ryan Houdek
4ab6c2252d
IR: More validation for shifts
2025-03-27 04:36:41 -07:00
Ryan Houdek
4ebc307744
IR: Ensure BFE ops can't try to extract element larger than size
2025-03-27 04:26:40 -07:00
Ryan Houdek
0b519b29d9
IR/IRDumper: static analysis warnings
2025-03-27 04:26:40 -07:00
Ryan Houdek
8881e8d96e
IR/IREmitter: static analysis warnings
2025-03-27 04:26:40 -07:00
Ryan Houdek
9a99608f68
Passes/ConstProp: static analysis warnings
2025-03-27 04:26:40 -07:00
Alyssa Rosenzweig
694e674fe6
IR: tie VExtr
...
needed for sve-256 move reduction.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-25 15:22:55 -04:00
Alyssa Rosenzweig
7ebc0f32b8
IR: tie VInsGPR
...
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-25 15:16:25 -04:00
Alyssa Rosenzweig
68cacc2fc3
IR: tie VFMin/VFMax
...
this was missed.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-25 15:16:25 -04:00
Alyssa Rosenzweig
43eb597044
IR: tie VBSL source
...
this was missed before, noticed while experimenting with round robin RA.
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io >
2025-03-25 14:14:21 -04:00
Paulo Matos
b18f148575
Abstract AddressMode into its own header
...
Also refactor usage of utility functions into x87 Stack Optimization Pass.
2025-03-20 11:41:26 +01:00
Paulo Matos
e18a661b50
Refactor OP_STORESTACKMEM case in x87 Stack Opt Pass
2025-03-18 18:34:06 +01:00