testsuite: Add testcase for sparc ICE [PR105573]

Message ID 20230421193338.3874230-1-sam@gentoo.org
State Accepted
Headers
Series testsuite: Add testcase for sparc ICE [PR105573] |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Sam James April 21, 2023, 7:33 p.m. UTC
  r11-10018-g33914983cf3734c2f8079963ba49fcc117499ef3 fixed PR105312 and added
a test case for target/arm but the duplicate PR105573 has a test case for
target/sparc that was uncommitted until now.

2023-04-21  Sam James   <sam@gentoo.org>
        PR tree-optimization/105312
	PR target/105573
	* gcc/testsuite/gcc.target/sparc/pr105573.c: New test.

Signed-off-by: Sam James <sam@gentoo.org>
---
 gcc/testsuite/gcc.target/sparc/pr105573.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/sparc/pr105573.c
  

Comments

Richard Biener April 24, 2023, 7:36 a.m. UTC | #1
On Fri, 21 Apr 2023, Sam James wrote:

> r11-10018-g33914983cf3734c2f8079963ba49fcc117499ef3 fixed PR105312 and added
> a test case for target/arm but the duplicate PR105573 has a test case for
> target/sparc that was uncommitted until now.

OK.  But see below for a question

> 2023-04-21  Sam James   <sam@gentoo.org>
>         PR tree-optimization/105312
> 	PR target/105573
> 	* gcc/testsuite/gcc.target/sparc/pr105573.c: New test.
> 
> Signed-off-by: Sam James <sam@gentoo.org>
> ---
>  gcc/testsuite/gcc.target/sparc/pr105573.c | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
>  create mode 100644 gcc/testsuite/gcc.target/sparc/pr105573.c
> 
> diff --git a/gcc/testsuite/gcc.target/sparc/pr105573.c b/gcc/testsuite/gcc.target/sparc/pr105573.c
> new file mode 100644
> index 00000000000..9eba2e4beba
> --- /dev/null
> +++ b/gcc/testsuite/gcc.target/sparc/pr105573.c
> @@ -0,0 +1,14 @@
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -mvis3" } */
> +
> +int *UINT_sign_args, UINT_sign_steps;
> +int *UINT_sign_ip1;
> +__attribute__((optimize("O3"))) void UINT_sign() {

is the optimize attribute necessary or does -O3 -mvis3 also reproduce
the issue?

> +  char *op1 = (char*) UINT_sign_args;
> +  int os1 = UINT_sign_steps, i;
> +  for (; i; i++, op1 += os1) {
> +    unsigned in = *(unsigned *)UINT_sign_ip1;
> +    int *out = (int*) op1;
> +    *out = in > 0;
> +  }
> +}
  
Sam James April 24, 2023, 10:29 p.m. UTC | #2
Richard Biener <rguenther@suse.de> writes:

> On Fri, 21 Apr 2023, Sam James wrote:
>
>> r11-10018-g33914983cf3734c2f8079963ba49fcc117499ef3 fixed PR105312 and added
>> a test case for target/arm but the duplicate PR105573 has a test case for
>> target/sparc that was uncommitted until now.
>
> OK.  But see below for a question
>
>> 2023-04-21  Sam James   <sam@gentoo.org>
>>         PR tree-optimization/105312
>> 	PR target/105573
>> 	* gcc/testsuite/gcc.target/sparc/pr105573.c: New test.
>> 
>> Signed-off-by: Sam James <sam@gentoo.org>
>> ---
>>  gcc/testsuite/gcc.target/sparc/pr105573.c | 14 ++++++++++++++
>>  1 file changed, 14 insertions(+)
>>  create mode 100644 gcc/testsuite/gcc.target/sparc/pr105573.c
>> 
>> diff --git a/gcc/testsuite/gcc.target/sparc/pr105573.c b/gcc/testsuite/gcc.target/sparc/pr105573.c
>> new file mode 100644
>> index 00000000000..9eba2e4beba
>> --- /dev/null
>> +++ b/gcc/testsuite/gcc.target/sparc/pr105573.c
>> @@ -0,0 +1,14 @@
>> +/* { dg-do compile } */
>> +/* { dg-options "-O2 -mvis3" } */
>> +
>> +int *UINT_sign_args, UINT_sign_steps;
>> +int *UINT_sign_ip1;
>> +__attribute__((optimize("O3"))) void UINT_sign() {
>
> is the optimize attribute necessary or does -O3 -mvis3 also reproduce
> the issue?

Good point - -O3 -mvis3 is enough, so I've resent w/ that & dropped
attribute.

I don't have push access so will need someone to push for me. Cheers.
  

Patch

diff --git a/gcc/testsuite/gcc.target/sparc/pr105573.c b/gcc/testsuite/gcc.target/sparc/pr105573.c
new file mode 100644
index 00000000000..9eba2e4beba
--- /dev/null
+++ b/gcc/testsuite/gcc.target/sparc/pr105573.c
@@ -0,0 +1,14 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O2 -mvis3" } */
+
+int *UINT_sign_args, UINT_sign_steps;
+int *UINT_sign_ip1;
+__attribute__((optimize("O3"))) void UINT_sign() {
+  char *op1 = (char*) UINT_sign_args;
+  int os1 = UINT_sign_steps, i;
+  for (; i; i++, op1 += os1) {
+    unsigned in = *(unsigned *)UINT_sign_ip1;
+    int *out = (int*) op1;
+    *out = in > 0;
+  }
+}