Hi, This patch is for internal issue1136. It changes insn condition from TARGET_64BIT to TARGET_POWERPC64 for VSX scalar extract/insert instructions. These instructions all use DI registers and can be invoked with -mpowerpc64 in a 32-bit environment.
This patch also changes prototypes of related built-ins and effective target of test cases. Bootstrapped and tested on powerpc64-linux BE and LE with no regressions. Is this okay for trunk? Any recommendations? Thanks a lot. ChangeLog 2022-09-01 Haochen Gui <guih...@linux.ibm.com> gcc/ * config/rs6000/rs6000-builtins.def (__builtin_vsx_scalar_extract_exp): Set return type to const unsigned long long. (__builtin_vsx_scalar_extract_sig): Likewise. * config/rs6000/vsx.md (xsxexpdp): Change insn condition from TARGET_64BIT to TARGET_POWERPC64. (xsxsigdp): Likewise. (xsiexpdp): Likewise. (xsiexpdpf): Likewise. gcc/testsuite/ * gcc.target/powerpc/bfp/scalar-extract-exp-0.c: Change effective target from lp64 to has_arch_ppc64 and add -mpowerpc64 for 32-bit environment. * gcc.target/powerpc/bfp/scalar-extract-exp-6.c: Likewise. * gcc.target/powerpc/bfp/scalar-extract-exp-7.c: Likewise. * gcc.target/powerpc/bfp/scalar-extract-sig-0.c: Likewise. * gcc.target/powerpc/bfp/scalar-extract-sig-6.c: Likewise. * gcc.target/powerpc/bfp/scalar-extract-sig-7.c: Likewise. * gcc.target/powerpc/bfp/scalar-insert-exp-0.c: Likewise. * gcc.target/powerpc/bfp/scalar-insert-exp-12.c: Likewise. * gcc.target/powerpc/bfp/scalar-insert-exp-13.c: Likewise. * gcc.target/powerpc/bfp/scalar-insert-exp-3.c: Likewise. patch.diff diff --git a/gcc/config/rs6000/rs6000-builtins.def b/gcc/config/rs6000/rs6000-builtins.def index f76f54793d7..4ebfd4704a1 100644 --- a/gcc/config/rs6000/rs6000-builtins.def +++ b/gcc/config/rs6000/rs6000-builtins.def @@ -2847,10 +2847,10 @@ pure vsc __builtin_vsx_lxvl (const void *, signed long); LXVL lxvl {} - const signed long __builtin_vsx_scalar_extract_exp (double); + const unsigned long long __builtin_vsx_scalar_extract_exp (double); VSEEDP xsxexpdp {} - const signed long __builtin_vsx_scalar_extract_sig (double); + const unsigned long long __builtin_vsx_scalar_extract_sig (double); VSESDP xsxsigdp {} const double __builtin_vsx_scalar_insert_exp (unsigned long long, \ diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index e226a93bbe5..a01711aa2cb 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -5098,7 +5098,7 @@ (define_insn "xsxexpdp" [(set (match_operand:DI 0 "register_operand" "=r") (unspec:DI [(match_operand:DF 1 "vsx_register_operand" "wa")] UNSPEC_VSX_SXEXPDP))] - "TARGET_P9_VECTOR && TARGET_64BIT" + "TARGET_P9_VECTOR && TARGET_POWERPC64" "xsxexpdp %0,%x1" [(set_attr "type" "integer")]) @@ -5116,7 +5116,7 @@ (define_insn "xsxsigdp" [(set (match_operand:DI 0 "register_operand" "=r") (unspec:DI [(match_operand:DF 1 "vsx_register_operand" "wa")] UNSPEC_VSX_SXSIG))] - "TARGET_P9_VECTOR && TARGET_64BIT" + "TARGET_P9_VECTOR && TARGET_POWERPC64" "xsxsigdp %0,%x1" [(set_attr "type" "integer")]) @@ -5147,7 +5147,7 @@ (define_insn "xsiexpdp" (unspec:DF [(match_operand:DI 1 "register_operand" "r") (match_operand:DI 2 "register_operand" "r")] UNSPEC_VSX_SIEXPDP))] - "TARGET_P9_VECTOR && TARGET_64BIT" + "TARGET_P9_VECTOR && TARGET_POWERPC64" "xsiexpdp %x0,%1,%2" [(set_attr "type" "fpsimple")]) @@ -5157,7 +5157,7 @@ (define_insn "xsiexpdpf" (unspec:DF [(match_operand:DF 1 "register_operand" "r") (match_operand:DI 2 "register_operand" "r")] UNSPEC_VSX_SIEXPDP))] - "TARGET_P9_VECTOR && TARGET_64BIT" + "TARGET_P9_VECTOR && TARGET_POWERPC64" "xsiexpdp %x0,%1,%2" [(set_attr "type" "fpsimple")]) diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c index 35bf1b240f3..81565c50ec7 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-0.c @@ -1,7 +1,8 @@ -/* { dg-do compile { target { powerpc*-*-* } } } */ -/* { dg-require-effective-target lp64 } */ -/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-do compile { target { powerpc*-*-linux* } } } */ /* { dg-options "-mdejagnu-cpu=power9" } */ +/* { dg-additional-options "-mpowerpc64" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ /* This test should succeed only on 64-bit configurations. */ #include <altivec.h> diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c index b9dd7d61aae..33e55d5abc1 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-6.c @@ -1,7 +1,7 @@ -/* { dg-do run { target { powerpc*-*-* } } } */ -/* { dg-require-effective-target lp64 } */ -/* { dg-require-effective-target p9vector_hw } */ +/* { dg-do run { target { powerpc*-*-linux* } } } */ /* { dg-options "-mdejagnu-cpu=power9" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-require-effective-target p9vector_hw } */ /* This test should succeed only on 64-bit configurations. */ #include <altivec.h> diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-7.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-7.c index a36eae049ec..43c38bb31e4 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-7.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-7.c @@ -1,7 +1,7 @@ -/* { dg-do run { target { powerpc*-*-* } } } */ -/* { dg-require-effective-target lp64 } */ -/* { dg-require-effective-target p9vector_hw } */ +/* { dg-do run { target { powerpc*-*-linux* } } } */ /* { dg-options "-mdejagnu-cpu=power9" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-require-effective-target p9vector_hw } */ /* This test should succeed only on 64-bit configurations. */ #include <altivec.h> diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-0.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-0.c index 637080652b7..eb341f1597a 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-0.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-0.c @@ -1,7 +1,8 @@ -/* { dg-do compile { target { powerpc*-*-* } } } */ -/* { dg-require-effective-target lp64 } */ -/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-do compile { target { powerpc*-*-linux* } } } */ /* { dg-options "-mdejagnu-cpu=power9" } */ +/* { dg-additional-options "-mpowerpc64" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ /* This test should succeed only on 64-bit configurations. */ #include <altivec.h> diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-6.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-6.c index c85072da138..25c0f03142d 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-6.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-6.c @@ -1,7 +1,7 @@ -/* { dg-do run { target { powerpc*-*-* } } } */ -/* { dg-require-effective-target lp64 } */ -/* { dg-require-effective-target p9vector_hw } */ +/* { dg-do run { target { powerpc*-*-linux* } } } */ /* { dg-options "-mdejagnu-cpu=power9" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-require-effective-target p9vector_hw } */ /* This test should succeed only on 64-bit configurations. */ #include <altivec.h> diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-7.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-7.c index 8c94e642c57..43974c08dcb 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-7.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-7.c @@ -1,7 +1,7 @@ -/* { dg-do run { target { powerpc*-*-* } } } */ -/* { dg-require-effective-target lp64 } */ -/* { dg-require-effective-target p9vector_hw } */ +/* { dg-do run { target { powerpc*-*-linux* } } } */ /* { dg-options "-mdejagnu-cpu=power9" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-require-effective-target p9vector_hw } */ /* This test should succeed only on 64-bit configurations. */ #include <altivec.h> diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-0.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-0.c index d8243258a67..906d3a07b7d 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-0.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-0.c @@ -1,7 +1,8 @@ -/* { dg-do compile { target { powerpc*-*-* } } } */ -/* { dg-require-effective-target lp64 } */ -/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-do compile { target { powerpc*-*-linux* } } } */ /* { dg-options "-mdejagnu-cpu=power9" } */ +/* { dg-additional-options "-mpowerpc64" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ /* This test should succeed only on 64-bit configurations. */ #include <altivec.h> diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-12.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-12.c index 384fc9cc675..f027d64632c 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-12.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-12.c @@ -1,7 +1,7 @@ -/* { dg-do run { target { powerpc*-*-* } } } */ -/* { dg-require-effective-target lp64 } */ -/* { dg-require-effective-target p9vector_hw } */ +/* { dg-do run { target { powerpc*-*-linux* } } } */ /* { dg-options "-mdejagnu-cpu=power9" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-require-effective-target p9vector_hw } */ /* This test should succeed only on 64-bit configurations. */ #include <altivec.h> diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-13.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-13.c index 0e004224277..4d3808d8450 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-13.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-13.c @@ -1,7 +1,7 @@ -/* { dg-do run { target { powerpc*-*-* } } } */ -/* { dg-require-effective-target lp64 } */ -/* { dg-require-effective-target p9vector_hw } */ +/* { dg-do run { target { powerpc*-*-linux* } } } */ /* { dg-options "-mdejagnu-cpu=power9" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-require-effective-target p9vector_hw } */ /* This test should succeed only on 64-bit configurations. */ #include <altivec.h> diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-3.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-3.c index 3ecbe3318e8..40128470696 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-3.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-insert-exp-3.c @@ -1,7 +1,8 @@ -/* { dg-do compile { target { powerpc*-*-* } } } */ -/* { dg-require-effective-target lp64 } */ -/* { dg-require-effective-target powerpc_p9vector_ok } */ +/* { dg-do compile { target { powerpc*-*-linux* } } } */ /* { dg-options "-mdejagnu-cpu=power9" } */ +/* { dg-additional-options "-mpowerpc64" } */ +/* { dg-require-effective-target has_arch_ppc64 } */ +/* { dg-require-effective-target powerpc_p9vector_ok } */ /* This test should succeed only on 64-bit configurations. */ #include <altivec.h>