x86_64: Enable STV conversion for TImode register moves.
Extends x86_64's Scalar-To-Vector (STV) pass to handle TImode register moves with hard registers.
This commit extends the x86_64 Scalar-To-Vector (STV) pass to include chains that originate or terminate with moves from/to hard registers. By supporting STV conversion for TImode register-to-register moves, where either the source or destination (but not both) is a hard register, the compiler can now convert more code sequences to use SSE instructions which leads to faster execution.
In Details
The x86_64 STV pass converts scalar operations to vector operations. This commit extends this pass to handle TImode register-to-register moves involving hard registers. Before this patch, STV candidate instructions explicitly excluded those that mentioned hard registers. This change improves code generation for functions like foo_out and foo_fun, which were not previously converted.
For Context
Modern x86 processors have SIMD (Single Instruction, Multiple Data) instructions like SSE and AVX that can perform the same operation on multiple data elements simultaneously. This commit improves GCC's ability to use these instructions when operating on 128-bit integers, by allowing the compiler to convert more sequences of scalar operations into vector operations. This can lead to significant performance improvements for code that uses 128-bit integers.