* [PATCH] rs6000: Fix vec_cpsgn parameter order (PR101985)
@ 2021-09-24 15:20 Bill Schmidt
2021-10-11 22:15 ` Bill Schmidt
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Bill Schmidt @ 2021-09-24 15:20 UTC (permalink / raw)
To: GCC Patches; +Cc: Segher Boessenkool, David Edelsohn
Hi!
This fixes a bug reported in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101985.
The vec_cpsgn built-in function API differs in argument order from the
copysign<mode>3 convention. Currently that pattern is incorrctly used to
implement vec_cpsgn. Fix that while leaving the existing pattern in place
to implement copysignf for vector modes.
Part of the fix when using the new built-in support requires an adjustment
to a pending patch that replaces much of altivec.h with an automatically
generated file. So that adjustment will be coming later...
Also fix a bug in the new built-in overload infrastructure where we were
using the VSX form of the VEC_COPYSIGN built-in when we should default to
the VMX form.
Bootstrapped and tested on powerpc64le-unknown-linux-gnu with no regressions.
Is this okay for trunk?
Thanks!
Bill
2021-09-24 Bill Schmidt <wschmidt@linux.ibm.com>
gcc/
PR target/101985
* config/rs6000/altivec.h (vec_cpsgn): Adjust.
* config/rs6000/rs6000-overload.def (VEC_COPYSIGN): Use SKIP to
avoid generating an automatic #define of vec_cpsgn. Use the
correct built-in for V4SFmode that doesn't depend on VSX.
gcc/testsuite/
PR target/101985
* gcc.target/powerpc/pr101985.c: New.
---
gcc/config/rs6000/altivec.h | 2 +-
gcc/config/rs6000/rs6000-overload.def | 4 ++--
gcc/testsuite/gcc.target/powerpc/pr101985-1.c | 18 ++++++++++++++++++
gcc/testsuite/gcc.target/powerpc/pr101985-2.c | 18 ++++++++++++++++++
4 files changed, 39 insertions(+), 3 deletions(-)
create mode 100644 gcc/testsuite/gcc.target/powerpc/pr101985-1.c
create mode 100644 gcc/testsuite/gcc.target/powerpc/pr101985-2.c
diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
index 5b631c7ebaf..ea72c9c1789 100644
--- a/gcc/config/rs6000/altivec.h
+++ b/gcc/config/rs6000/altivec.h
@@ -129,7 +129,7 @@
#define vec_vcfux __builtin_vec_vcfux
#define vec_cts __builtin_vec_cts
#define vec_ctu __builtin_vec_ctu
-#define vec_cpsgn __builtin_vec_copysign
+#define vec_cpsgn(x,y) __builtin_vec_copysign(y,x)
#define vec_double __builtin_vec_double
#define vec_doublee __builtin_vec_doublee
#define vec_doubleo __builtin_vec_doubleo
diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
index 141f831e2c0..4f583312f36 100644
--- a/gcc/config/rs6000/rs6000-overload.def
+++ b/gcc/config/rs6000/rs6000-overload.def
@@ -1154,9 +1154,9 @@
vus __builtin_vec_convert_4f32_8f16 (vf, vf);
CONVERT_4F32_8F16
-[VEC_COPYSIGN, vec_cpsgn, __builtin_vec_copysign]
+[VEC_COPYSIGN, SKIP, __builtin_vec_copysign]
vf __builtin_vec_copysign (vf, vf);
- CPSGNSP
+ COPYSIGN_V4SF
vd __builtin_vec_copysign (vd, vd);
CPSGNDP
diff --git a/gcc/testsuite/gcc.target/powerpc/pr101985-1.c b/gcc/testsuite/gcc.target/powerpc/pr101985-1.c
new file mode 100644
index 00000000000..a1ec2d68d53
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr101985-1.c
@@ -0,0 +1,18 @@
+/* PR target/101985 */
+/* { dg-do run } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-O2" } */
+
+#include <altivec.h>
+
+int
+main (void)
+{
+ vector float a = { 1, 2, - 3, - 4};
+ vector float b = {-10, 20, -30, 40};
+ vector float c = { 10, 20, -30, -40};
+ a = vec_cpsgn (a, b);
+ if (! vec_all_eq (a, c))
+ __builtin_abort ();
+ return 0;
+}
diff --git a/gcc/testsuite/gcc.target/powerpc/pr101985-2.c b/gcc/testsuite/gcc.target/powerpc/pr101985-2.c
new file mode 100644
index 00000000000..71cc254c170
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/pr101985-2.c
@@ -0,0 +1,18 @@
+/* PR target/101985 */
+/* { dg-do run } */
+/* { dg-require-effective-target vsx_hw } */
+/* { dg-options "-O2" } */
+
+#include <altivec.h>
+
+int
+main (void)
+{
+ vector double a = { 1, -4};
+ vector double b = { -10, 40};
+ vector double c = { 10, -40};
+ a = vec_cpsgn (a, b);
+ if (! vec_all_eq (a, c))
+ __builtin_abort ();
+ return 0;
+}
--
2.27.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] rs6000: Fix vec_cpsgn parameter order (PR101985)
2021-09-24 15:20 [PATCH] rs6000: Fix vec_cpsgn parameter order (PR101985) Bill Schmidt
@ 2021-10-11 22:15 ` Bill Schmidt
2021-10-12 18:59 ` David Edelsohn
2021-10-12 21:37 ` Segher Boessenkool
2 siblings, 0 replies; 5+ messages in thread
From: Bill Schmidt @ 2021-10-11 22:15 UTC (permalink / raw)
To: GCC Patches; +Cc: Segher Boessenkool, David Edelsohn
Hi! Ping, please. :)
Bill
On 9/24/21 10:20 AM, Bill Schmidt wrote:
> Hi!
>
> This fixes a bug reported in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101985.
>
> The vec_cpsgn built-in function API differs in argument order from the
> copysign<mode>3 convention. Currently that pattern is incorrctly used to
> implement vec_cpsgn. Fix that while leaving the existing pattern in place
> to implement copysignf for vector modes.
>
> Part of the fix when using the new built-in support requires an adjustment
> to a pending patch that replaces much of altivec.h with an automatically
> generated file. So that adjustment will be coming later...
>
> Also fix a bug in the new built-in overload infrastructure where we were
> using the VSX form of the VEC_COPYSIGN built-in when we should default to
> the VMX form.
>
> Bootstrapped and tested on powerpc64le-unknown-linux-gnu with no regressions.
> Is this okay for trunk?
>
> Thanks!
> Bill
>
>
> 2021-09-24 Bill Schmidt <wschmidt@linux.ibm.com>
>
> gcc/
> PR target/101985
> * config/rs6000/altivec.h (vec_cpsgn): Adjust.
> * config/rs6000/rs6000-overload.def (VEC_COPYSIGN): Use SKIP to
> avoid generating an automatic #define of vec_cpsgn. Use the
> correct built-in for V4SFmode that doesn't depend on VSX.
>
> gcc/testsuite/
> PR target/101985
> * gcc.target/powerpc/pr101985.c: New.
> ---
> gcc/config/rs6000/altivec.h | 2 +-
> gcc/config/rs6000/rs6000-overload.def | 4 ++--
> gcc/testsuite/gcc.target/powerpc/pr101985-1.c | 18 ++++++++++++++++++
> gcc/testsuite/gcc.target/powerpc/pr101985-2.c | 18 ++++++++++++++++++
> 4 files changed, 39 insertions(+), 3 deletions(-)
> create mode 100644 gcc/testsuite/gcc.target/powerpc/pr101985-1.c
> create mode 100644 gcc/testsuite/gcc.target/powerpc/pr101985-2.c
>
> diff --git a/gcc/config/rs6000/altivec.h b/gcc/config/rs6000/altivec.h
> index 5b631c7ebaf..ea72c9c1789 100644
> --- a/gcc/config/rs6000/altivec.h
> +++ b/gcc/config/rs6000/altivec.h
> @@ -129,7 +129,7 @@
> #define vec_vcfux __builtin_vec_vcfux
> #define vec_cts __builtin_vec_cts
> #define vec_ctu __builtin_vec_ctu
> -#define vec_cpsgn __builtin_vec_copysign
> +#define vec_cpsgn(x,y) __builtin_vec_copysign(y,x)
> #define vec_double __builtin_vec_double
> #define vec_doublee __builtin_vec_doublee
> #define vec_doubleo __builtin_vec_doubleo
> diff --git a/gcc/config/rs6000/rs6000-overload.def b/gcc/config/rs6000/rs6000-overload.def
> index 141f831e2c0..4f583312f36 100644
> --- a/gcc/config/rs6000/rs6000-overload.def
> +++ b/gcc/config/rs6000/rs6000-overload.def
> @@ -1154,9 +1154,9 @@
> vus __builtin_vec_convert_4f32_8f16 (vf, vf);
> CONVERT_4F32_8F16
>
> -[VEC_COPYSIGN, vec_cpsgn, __builtin_vec_copysign]
> +[VEC_COPYSIGN, SKIP, __builtin_vec_copysign]
> vf __builtin_vec_copysign (vf, vf);
> - CPSGNSP
> + COPYSIGN_V4SF
> vd __builtin_vec_copysign (vd, vd);
> CPSGNDP
>
> diff --git a/gcc/testsuite/gcc.target/powerpc/pr101985-1.c b/gcc/testsuite/gcc.target/powerpc/pr101985-1.c
> new file mode 100644
> index 00000000000..a1ec2d68d53
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr101985-1.c
> @@ -0,0 +1,18 @@
> +/* PR target/101985 */
> +/* { dg-do run } */
> +/* { dg-require-effective-target vsx_hw } */
> +/* { dg-options "-O2" } */
> +
> +#include <altivec.h>
> +
> +int
> +main (void)
> +{
> + vector float a = { 1, 2, - 3, - 4};
> + vector float b = {-10, 20, -30, 40};
> + vector float c = { 10, 20, -30, -40};
> + a = vec_cpsgn (a, b);
> + if (! vec_all_eq (a, c))
> + __builtin_abort ();
> + return 0;
> +}
> diff --git a/gcc/testsuite/gcc.target/powerpc/pr101985-2.c b/gcc/testsuite/gcc.target/powerpc/pr101985-2.c
> new file mode 100644
> index 00000000000..71cc254c170
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr101985-2.c
> @@ -0,0 +1,18 @@
> +/* PR target/101985 */
> +/* { dg-do run } */
> +/* { dg-require-effective-target vsx_hw } */
> +/* { dg-options "-O2" } */
> +
> +#include <altivec.h>
> +
> +int
> +main (void)
> +{
> + vector double a = { 1, -4};
> + vector double b = { -10, 40};
> + vector double c = { 10, -40};
> + a = vec_cpsgn (a, b);
> + if (! vec_all_eq (a, c))
> + __builtin_abort ();
> + return 0;
> +}
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] rs6000: Fix vec_cpsgn parameter order (PR101985)
2021-09-24 15:20 [PATCH] rs6000: Fix vec_cpsgn parameter order (PR101985) Bill Schmidt
2021-10-11 22:15 ` Bill Schmidt
@ 2021-10-12 18:59 ` David Edelsohn
2021-10-12 21:37 ` Segher Boessenkool
2 siblings, 0 replies; 5+ messages in thread
From: David Edelsohn @ 2021-10-12 18:59 UTC (permalink / raw)
To: Bill Schmidt; +Cc: GCC Patches, Segher Boessenkool
On Fri, Sep 24, 2021 at 11:20 AM Bill Schmidt <wschmidt@linux.ibm.com> wrote:
>
> Hi!
>
> This fixes a bug reported in https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101985.
>
> The vec_cpsgn built-in function API differs in argument order from the
> copysign<mode>3 convention. Currently that pattern is incorrectly used to
> implement vec_cpsgn. Fix that while leaving the existing pattern in place
> to implement copysignf for vector modes.
It's a little confusing what "that" is. Maybe clarify that the patch
is changing the PowerPC VSX function to invoke the GCC built-in with
the argument in the correct order.
>
> Part of the fix when using the new built-in support requires an adjustment
> to a pending patch that replaces much of altivec.h with an automatically
> generated file. So that adjustment will be coming later...
>
> Also fix a bug in the new built-in overload infrastructure where we were
> using the VSX form of the VEC_COPYSIGN built-in when we should default to
> the VMX form.
>
> Bootstrapped and tested on powerpc64le-unknown-linux-gnu with no regressions.
> Is this okay for trunk?
>
> Thanks!
> Bill
>
>
> 2021-09-24 Bill Schmidt <wschmidt@linux.ibm.com>
>
> gcc/
> PR target/101985
> * config/rs6000/altivec.h (vec_cpsgn): Adjust.
Maybe a little more information than "Adjust"? Swap arguments?
> * config/rs6000/rs6000-overload.def (VEC_COPYSIGN): Use SKIP to
> avoid generating an automatic #define of vec_cpsgn. Use the
> correct built-in for V4SFmode that doesn't depend on VSX.
>
> gcc/testsuite/
> PR target/101985
> * gcc.target/powerpc/pr101985.c: New.
Okay.
Thanks, David
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] rs6000: Fix vec_cpsgn parameter order (PR101985)
2021-09-24 15:20 [PATCH] rs6000: Fix vec_cpsgn parameter order (PR101985) Bill Schmidt
2021-10-11 22:15 ` Bill Schmidt
2021-10-12 18:59 ` David Edelsohn
@ 2021-10-12 21:37 ` Segher Boessenkool
2021-10-12 22:41 ` Bill Schmidt
2 siblings, 1 reply; 5+ messages in thread
From: Segher Boessenkool @ 2021-10-12 21:37 UTC (permalink / raw)
To: Bill Schmidt; +Cc: GCC Patches, David Edelsohn
On Fri, Sep 24, 2021 at 10:20:46AM -0500, Bill Schmidt wrote:
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/powerpc/pr101985-1.c
> @@ -0,0 +1,18 @@
> +/* PR target/101985 */
> +/* { dg-do run } */
> +/* { dg-require-effective-target vsx_hw } */
> +/* { dg-options "-O2" } */
If you need vsx_hw (or vsx_ok), you need -mvsx in the options as well.
(Always, so in both testcases here).
Segher
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] rs6000: Fix vec_cpsgn parameter order (PR101985)
2021-10-12 21:37 ` Segher Boessenkool
@ 2021-10-12 22:41 ` Bill Schmidt
0 siblings, 0 replies; 5+ messages in thread
From: Bill Schmidt @ 2021-10-12 22:41 UTC (permalink / raw)
To: Segher Boessenkool; +Cc: GCC Patches, David Edelsohn
Hi!
On 10/12/21 4:37 PM, Segher Boessenkool wrote:
> On Fri, Sep 24, 2021 at 10:20:46AM -0500, Bill Schmidt wrote:
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/powerpc/pr101985-1.c
>> @@ -0,0 +1,18 @@
>> +/* PR target/101985 */
>> +/* { dg-do run } */
>> +/* { dg-require-effective-target vsx_hw } */
>> +/* { dg-options "-O2" } */
> If you need vsx_hw (or vsx_ok), you need -mvsx in the options as well.
> (Always, so in both testcases here).
Whoops. Fixed, and adjusted ChangeLog/commit message per David. Committed.
Thanks for the reviews!!
Bill
>
>
> Segher
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-10-12 22:41 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-24 15:20 [PATCH] rs6000: Fix vec_cpsgn parameter order (PR101985) Bill Schmidt
2021-10-11 22:15 ` Bill Schmidt
2021-10-12 18:59 ` David Edelsohn
2021-10-12 21:37 ` Segher Boessenkool
2021-10-12 22:41 ` Bill Schmidt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).