On Sat, 2025-11-01 at 15:39 +0800, Guo Jie wrote:
> Support for conversion between scalar INT and scalar FP.
>
> gcc/ChangeLog:
>
> * config/loongarch/loongarch.cc
> (loongarch_can_change_mode_class): Support for conversion
> between scalar INT and scalar FP.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.target/loongarch/extendsidi2-combine.c: New test.
> * gcc.target/loongarch/spill-less.c: New test.
>
> ---
> gcc/config/loongarch/loongarch.cc | 4 ++++
> .../gcc.target/loongarch/extendsidi2-combine.c | 13 +++++++++++++
> gcc/testsuite/gcc.target/loongarch/spill-less.c | 14 ++++++++++++++
> 3 files changed, 31 insertions(+)
> create mode 100644 gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c
> create mode 100644 gcc/testsuite/gcc.target/loongarch/spill-less.c
>
> diff --git a/gcc/config/loongarch/loongarch.cc
> b/gcc/config/loongarch/loongarch.cc
> index 740c8611a71..a6550647bd7 100644
> --- a/gcc/config/loongarch/loongarch.cc
> +++ b/gcc/config/loongarch/loongarch.cc
> @@ -7087,6 +7087,10 @@ static bool
> loongarch_can_change_mode_class (machine_mode from, machine_mode to,
> reg_class_t rclass)
> {
> + if ((INTEGRAL_MODE_P (from) && FLOAT_MODE_P (to))
> + || (INTEGRAL_MODE_P (to) && FLOAT_MODE_P (from)))
> + return true;
> +
> /* Allow conversions between different LSX/LASX vector modes. */
> if (LASX_SUPPORTED_MODE_P (from) && LASX_SUPPORTED_MODE_P (to))
> return true;
> diff --git a/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c
> b/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c
> new file mode 100644
> index 00000000000..72de35e4769
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/loongarch/extendsidi2-combine.c
> @@ -0,0 +1,13 @@
> +/* { dg-do compile { target { loongarch64*-*-* } } } */
> +/* { dg-options "-O3" } */
Add -fno-strict-aliasing to avoid UB.
/* snip */
> diff --git a/gcc/testsuite/gcc.target/loongarch/spill-less.c
> b/gcc/testsuite/gcc.target/loongarch/spill-less.c
> new file mode 100644
> index 00000000000..983b83da167
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/loongarch/spill-less.c
> @@ -0,0 +1,14 @@
> +/* { dg-do compile { target { loongarch64*-*-* } } } */
> +/* { dg-options "-O3" } */
Likewise. Otherwise LGTM.
--
Xi Ruoyao <[email protected]>