On Fri, 14 Nov 2025 05:17:12 GMT, Shaojin Wen <[email protected]> wrote:

> We can see there are two SotreC instructions here. Is it possible to merge 
> these into OrI + StoreI, writing 4 bytes at a time?

Can you describe the pattern in a bit more detail here?

Currently, we only merge stores where the inputs are either:
- All constants -> merge to a new constant
- All extracts of the same larger value -> when merging we just get the larger 
value. Example: Integer value is split into its 4 bytes, and each byte is 
stored separately -> we can merge the byte stores to an integer store, and just 
store the original integer value.

What you seem to ask for is a third category:
You have two consecutive stores, with two unrelated values. You could merge the 
two values with shift/or, and then store it with a larger store. Example:

a[i+0] = x; // StoreI
a[i+1] = y; // StoreI

Turns into `StoreL`, with value `x | ((long)(y) << 32)`.

One would also have to prove that this is in general profitable:
- Before: 2 stores
- After: 1 store + shift + or

It's not immediately clear that there are not cases where this could not lead 
to regressions, though they would probably be quite rare and hard to find.

Is that what you are asking for? I suppose that is in theory possible. I 
personally don't have time for it, but maybe someone volunteers for it?

-------------

PR Comment: https://git.openjdk.org/jdk/pull/26911#issuecomment-3531215264

Reply via email to