SH: Add movv2sf patterns to support LRA
New patterns for `movv2sf` and related instructions are added to the SH backend to prevent LRA from entering reload cycles.
The SH backend introduces new patterns for the movv2sf instruction and its variations to properly handle splits after register allocation. Without these patterns, the Long-Range Addresser (LRA) can get stuck in infinite reload cycles. The primary use case identified for V2SF mode is the FSCA instruction.
In Details
Introduces new patterns for movv2sf, movv2sf_i, and their splits in config/sh/sh.md. This is necessary because the default RA splits movv2sf into multiple movsf instructions. LRA, however, requires specific patterns for V2SF mode (mainly used by FSCA instruction) to avoid falling into reload cycles. Also restricts V2SF to fp-regs and adjusts sh_max_mov_insn_displacement.
- LRA
- Long-Range Addresser, a register allocator in GCC designed to handle complex register allocation scenarios, particularly in architectures with large register files or specific addressing constraints.
- movv2sf
- A SH-specific instruction for moving two single-precision floating-point values.
- V2SF mode
- A data type mode on the SH architecture representing two single-precision floating-point values.
- FSCA instruction
- A SH-specific instruction that likely operates on V2SF mode data.