luau/CodeGen
Arseny Kapoulkine 574e9a7eca CodeGen: Extract all vector tag patching into TAG_VECTOR
Instead of patching the tag component with TVECTOR in every instruction
that produces a vector value, we now use a separate IR instruction to do
this. This reduces implementation redundancy, but more importantly allows
for a class of optimizations:

- NUM_TO_VECTOR previously patched the component unconditionally but the result
was used only in MUL/DIV_VEC instructions that ignore it anyway; we can now remove
this.

- ADD_VEC et al can now forward the source of TAG_VECTOR instruction of either input;
this shortens the latency chain and in the future could allow us to generate
optimal vector instruction sequence once the temporary stores are marked as dead.

- In the future on X64, ADD_VEC et al will be able to analyze the input instruction and
remove tag masking conditionally. This is not part of this PR as it requires a decision
around expected FP environment and/or the necessity of the existing masking to begin with.

I've also renamed NUM_TO_VECTOR to NUM_TO_VEC so that "VEC" always refers to "3 float
values" and for consistency with ADD/etc.

Note: ADD_VEC input forwarding is currently performed unconditionally; it may or may not
increase the spills that can't be reloaded from the stack.
2024-02-19 18:55:56 -08:00
..
include CodeGen: Extract all vector tag patching into TAG_VECTOR 2024-02-19 18:55:56 -08:00
src CodeGen: Extract all vector tag patching into TAG_VECTOR 2024-02-19 18:55:56 -08:00