x86 SSE: Improved vector initialization.
Optimized vector initialization for x86 SSE, improving code generation for vector types.
This patch significantly refactors x86’s vector initialization (vec_init) to generate more efficient code for SSE. It moves away from recursive “concat” splitting towards “custom” initialization functions tailored to specific vector modes and instruction set asymmetries. This allows better utilization of SSE’s zero-extension semantics, shuffles, and other specialized instructions, leading to performance improvements.
In Details
The i386-expand.cc backend code for vector initialization has been reworked. Instead of generic "concat" recursion, specific initialization routines are now generated for various 128-bit and 256-bit vector types. This accounts for ISA irregularities and exploits specific SSE/AVX instructions like shuffles and element insertion for improved efficiency, moving beyond basic concat/insert logic.
- SSE
- Streaming SIMD Extensions. A set of CPU instructions for parallel processing of data, commonly used for multimedia and scientific applications.
- vec_init
- A backend function or pattern for initializing vector registers.
- concat
- In this context, a recursive technique to build larger vectors by combining smaller initialized vectors.
- zero extension
- An operation that extends a smaller data type to a larger one by padding with zeros.