diff mbox series

[v2] s390: Implement TARGET_NOCE_CONVERSION_PROFITABLE_P [PR109549]

Message ID 20240517065904.265380-2-stefansf@linux.ibm.com
State New
Headers show
Series [v2] s390: Implement TARGET_NOCE_CONVERSION_PROFITABLE_P [PR109549] | expand

Commit Message

Stefan Schulze Frielinghaus May 17, 2024, 6:59 a.m. UTC
I've adapted the patch as follows and will push.

Thanks,
Stefan

--

Consider a NOCE conversion as profitable if there is at least one
conditional move.

gcc/ChangeLog:

	* config/s390/s390.cc (TARGET_NOCE_CONVERSION_PROFITABLE_P):
	Define.
	(s390_noce_conversion_profitable_p): Implement.

gcc/testsuite/ChangeLog:

	* gcc.target/s390/ccor.c: Order of loads are reversed, now, as a
	consequence the condition has to be reversed.
---
 gcc/config/s390/s390.cc              | 32 ++++++++++++++++++++++++++++
 gcc/testsuite/gcc.target/s390/ccor.c |  4 ++--
 2 files changed, 34 insertions(+), 2 deletions(-)

Comments

Stefan Schulze Frielinghaus June 2, 2024, 12:07 p.m. UTC | #1
Since the patch works fine so far for mainline, ok to backport to GCC 14?

On Fri, May 17, 2024 at 08:59:05AM +0200, Stefan Schulze Frielinghaus wrote:
> I've adapted the patch as follows and will push.
> 
> Thanks,
> Stefan
> 
> --
> 
> Consider a NOCE conversion as profitable if there is at least one
> conditional move.
> 
> gcc/ChangeLog:
> 
> 	* config/s390/s390.cc (TARGET_NOCE_CONVERSION_PROFITABLE_P):
> 	Define.
> 	(s390_noce_conversion_profitable_p): Implement.
> 
> gcc/testsuite/ChangeLog:
> 
> 	* gcc.target/s390/ccor.c: Order of loads are reversed, now, as a
> 	consequence the condition has to be reversed.
> ---
>  gcc/config/s390/s390.cc              | 32 ++++++++++++++++++++++++++++
>  gcc/testsuite/gcc.target/s390/ccor.c |  4 ++--
>  2 files changed, 34 insertions(+), 2 deletions(-)
> 
> diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
> index bf46eab2d63..7f8f1681c2a 100644
> --- a/gcc/config/s390/s390.cc
> +++ b/gcc/config/s390/s390.cc
> @@ -78,6 +78,7 @@ along with GCC; see the file COPYING3.  If not see
>  #include "tree-pass.h"
>  #include "context.h"
>  #include "builtins.h"
> +#include "ifcvt.h"
>  #include "rtl-iter.h"
>  #include "intl.h"
>  #include "tm-constrs.h"
> @@ -18037,6 +18038,34 @@ s390_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode,
>    return vectorize_vec_perm_const_1 (d);
>  }
>  
> +/* Consider a NOCE conversion as profitable if there is at least one
> +   conditional move.  */
> +
> +static bool
> +s390_noce_conversion_profitable_p (rtx_insn *seq, struct noce_if_info *if_info)
> +{
> +  if (if_info->speed_p)
> +    {
> +      for (rtx_insn *insn = seq; insn; insn = NEXT_INSN (insn))
> +	{
> +	  rtx set = single_set (insn);
> +	  if (set == NULL)
> +	    continue;
> +	  if (GET_CODE (SET_SRC (set)) != IF_THEN_ELSE)
> +	    continue;
> +	  rtx src = SET_SRC (set);
> +	  machine_mode mode = GET_MODE (src);
> +	  if (GET_MODE_CLASS (mode) != MODE_INT
> +	      && GET_MODE_CLASS (mode) != MODE_FLOAT)
> +	    continue;
> +	  if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
> +	    continue;
> +	  return true;
> +	}
> +    }
> +  return default_noce_conversion_profitable_p (seq, if_info);
> +}
> +
>  /* Initialize GCC target structure.  */
>  
>  #undef  TARGET_ASM_ALIGNED_HI_OP
> @@ -18350,6 +18379,9 @@ s390_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode,
>  #undef TARGET_VECTORIZE_VEC_PERM_CONST
>  #define TARGET_VECTORIZE_VEC_PERM_CONST s390_vectorize_vec_perm_const
>  
> +#undef TARGET_NOCE_CONVERSION_PROFITABLE_P
> +#define TARGET_NOCE_CONVERSION_PROFITABLE_P s390_noce_conversion_profitable_p
> +
>  struct gcc_target targetm = TARGET_INITIALIZER;
>  
>  #include "gt-s390.h"
> diff --git a/gcc/testsuite/gcc.target/s390/ccor.c b/gcc/testsuite/gcc.target/s390/ccor.c
> index 31f30f60314..36a3c3a999a 100644
> --- a/gcc/testsuite/gcc.target/s390/ccor.c
> +++ b/gcc/testsuite/gcc.target/s390/ccor.c
> @@ -42,7 +42,7 @@ GENFUN1(2)
>  
>  GENFUN1(3)
>  
> -/* { dg-final { scan-assembler {locrno} } } */
> +/* { dg-final { scan-assembler {locro} } } */
>  
>  GENFUN2(0,1)
>  
> @@ -58,7 +58,7 @@ GENFUN2(0,3)
>  
>  GENFUN2(1,2)
>  
> -/* { dg-final { scan-assembler {locrnlh} } } */
> +/* { dg-final { scan-assembler {locrlh} } } */
>  
>  GENFUN2(1,3)
>  
> -- 
> 2.45.0
>
Stefan Schulze Frielinghaus June 13, 2024, 7:43 a.m. UTC | #2
Ping.

On Sun, Jun 02, 2024 at 02:07:24PM +0200, Stefan Schulze Frielinghaus wrote:
> Since the patch works fine so far for mainline, ok to backport to GCC 14?
> 
> On Fri, May 17, 2024 at 08:59:05AM +0200, Stefan Schulze Frielinghaus wrote:
> > I've adapted the patch as follows and will push.
> > 
> > Thanks,
> > Stefan
> > 
> > --
> > 
> > Consider a NOCE conversion as profitable if there is at least one
> > conditional move.
> > 
> > gcc/ChangeLog:
> > 
> > 	* config/s390/s390.cc (TARGET_NOCE_CONVERSION_PROFITABLE_P):
> > 	Define.
> > 	(s390_noce_conversion_profitable_p): Implement.
> > 
> > gcc/testsuite/ChangeLog:
> > 
> > 	* gcc.target/s390/ccor.c: Order of loads are reversed, now, as a
> > 	consequence the condition has to be reversed.
> > ---
> >  gcc/config/s390/s390.cc              | 32 ++++++++++++++++++++++++++++
> >  gcc/testsuite/gcc.target/s390/ccor.c |  4 ++--
> >  2 files changed, 34 insertions(+), 2 deletions(-)
> > 
> > diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
> > index bf46eab2d63..7f8f1681c2a 100644
> > --- a/gcc/config/s390/s390.cc
> > +++ b/gcc/config/s390/s390.cc
> > @@ -78,6 +78,7 @@ along with GCC; see the file COPYING3.  If not see
> >  #include "tree-pass.h"
> >  #include "context.h"
> >  #include "builtins.h"
> > +#include "ifcvt.h"
> >  #include "rtl-iter.h"
> >  #include "intl.h"
> >  #include "tm-constrs.h"
> > @@ -18037,6 +18038,34 @@ s390_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode,
> >    return vectorize_vec_perm_const_1 (d);
> >  }
> >  
> > +/* Consider a NOCE conversion as profitable if there is at least one
> > +   conditional move.  */
> > +
> > +static bool
> > +s390_noce_conversion_profitable_p (rtx_insn *seq, struct noce_if_info *if_info)
> > +{
> > +  if (if_info->speed_p)
> > +    {
> > +      for (rtx_insn *insn = seq; insn; insn = NEXT_INSN (insn))
> > +	{
> > +	  rtx set = single_set (insn);
> > +	  if (set == NULL)
> > +	    continue;
> > +	  if (GET_CODE (SET_SRC (set)) != IF_THEN_ELSE)
> > +	    continue;
> > +	  rtx src = SET_SRC (set);
> > +	  machine_mode mode = GET_MODE (src);
> > +	  if (GET_MODE_CLASS (mode) != MODE_INT
> > +	      && GET_MODE_CLASS (mode) != MODE_FLOAT)
> > +	    continue;
> > +	  if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
> > +	    continue;
> > +	  return true;
> > +	}
> > +    }
> > +  return default_noce_conversion_profitable_p (seq, if_info);
> > +}
> > +
> >  /* Initialize GCC target structure.  */
> >  
> >  #undef  TARGET_ASM_ALIGNED_HI_OP
> > @@ -18350,6 +18379,9 @@ s390_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode,
> >  #undef TARGET_VECTORIZE_VEC_PERM_CONST
> >  #define TARGET_VECTORIZE_VEC_PERM_CONST s390_vectorize_vec_perm_const
> >  
> > +#undef TARGET_NOCE_CONVERSION_PROFITABLE_P
> > +#define TARGET_NOCE_CONVERSION_PROFITABLE_P s390_noce_conversion_profitable_p
> > +
> >  struct gcc_target targetm = TARGET_INITIALIZER;
> >  
> >  #include "gt-s390.h"
> > diff --git a/gcc/testsuite/gcc.target/s390/ccor.c b/gcc/testsuite/gcc.target/s390/ccor.c
> > index 31f30f60314..36a3c3a999a 100644
> > --- a/gcc/testsuite/gcc.target/s390/ccor.c
> > +++ b/gcc/testsuite/gcc.target/s390/ccor.c
> > @@ -42,7 +42,7 @@ GENFUN1(2)
> >  
> >  GENFUN1(3)
> >  
> > -/* { dg-final { scan-assembler {locrno} } } */
> > +/* { dg-final { scan-assembler {locro} } } */
> >  
> >  GENFUN2(0,1)
> >  
> > @@ -58,7 +58,7 @@ GENFUN2(0,3)
> >  
> >  GENFUN2(1,2)
> >  
> > -/* { dg-final { scan-assembler {locrnlh} } } */
> > +/* { dg-final { scan-assembler {locrlh} } } */
> >  
> >  GENFUN2(1,3)
> >  
> > -- 
> > 2.45.0
> >
Andreas Krebbel June 14, 2024, 5:37 a.m. UTC | #3
On 6/2/24 14:07, Stefan Schulze Frielinghaus wrote:
> Since the patch works fine so far for mainline, ok to backport to GCC 14?

Yes please do. Thanks!


Andreas


>
> On Fri, May 17, 2024 at 08:59:05AM +0200, Stefan Schulze Frielinghaus wrote:
>> I've adapted the patch as follows and will push.
>>
>> Thanks,
>> Stefan
>>
>> --
>>
>> Consider a NOCE conversion as profitable if there is at least one
>> conditional move.
>>
>> gcc/ChangeLog:
>>
>> 	* config/s390/s390.cc (TARGET_NOCE_CONVERSION_PROFITABLE_P):
>> 	Define.
>> 	(s390_noce_conversion_profitable_p): Implement.
>>
>> gcc/testsuite/ChangeLog:
>>
>> 	* gcc.target/s390/ccor.c: Order of loads are reversed, now, as a
>> 	consequence the condition has to be reversed.
>> ---
>>   gcc/config/s390/s390.cc              | 32 ++++++++++++++++++++++++++++
>>   gcc/testsuite/gcc.target/s390/ccor.c |  4 ++--
>>   2 files changed, 34 insertions(+), 2 deletions(-)
>>
>> diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
>> index bf46eab2d63..7f8f1681c2a 100644
>> --- a/gcc/config/s390/s390.cc
>> +++ b/gcc/config/s390/s390.cc
>> @@ -78,6 +78,7 @@ along with GCC; see the file COPYING3.  If not see
>>   #include "tree-pass.h"
>>   #include "context.h"
>>   #include "builtins.h"
>> +#include "ifcvt.h"
>>   #include "rtl-iter.h"
>>   #include "intl.h"
>>   #include "tm-constrs.h"
>> @@ -18037,6 +18038,34 @@ s390_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode,
>>     return vectorize_vec_perm_const_1 (d);
>>   }
>>   
>> +/* Consider a NOCE conversion as profitable if there is at least one
>> +   conditional move.  */
>> +
>> +static bool
>> +s390_noce_conversion_profitable_p (rtx_insn *seq, struct noce_if_info *if_info)
>> +{
>> +  if (if_info->speed_p)
>> +    {
>> +      for (rtx_insn *insn = seq; insn; insn = NEXT_INSN (insn))
>> +	{
>> +	  rtx set = single_set (insn);
>> +	  if (set == NULL)
>> +	    continue;
>> +	  if (GET_CODE (SET_SRC (set)) != IF_THEN_ELSE)
>> +	    continue;
>> +	  rtx src = SET_SRC (set);
>> +	  machine_mode mode = GET_MODE (src);
>> +	  if (GET_MODE_CLASS (mode) != MODE_INT
>> +	      && GET_MODE_CLASS (mode) != MODE_FLOAT)
>> +	    continue;
>> +	  if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
>> +	    continue;
>> +	  return true;
>> +	}
>> +    }
>> +  return default_noce_conversion_profitable_p (seq, if_info);
>> +}
>> +
>>   /* Initialize GCC target structure.  */
>>   
>>   #undef  TARGET_ASM_ALIGNED_HI_OP
>> @@ -18350,6 +18379,9 @@ s390_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode,
>>   #undef TARGET_VECTORIZE_VEC_PERM_CONST
>>   #define TARGET_VECTORIZE_VEC_PERM_CONST s390_vectorize_vec_perm_const
>>   
>> +#undef TARGET_NOCE_CONVERSION_PROFITABLE_P
>> +#define TARGET_NOCE_CONVERSION_PROFITABLE_P s390_noce_conversion_profitable_p
>> +
>>   struct gcc_target targetm = TARGET_INITIALIZER;
>>   
>>   #include "gt-s390.h"
>> diff --git a/gcc/testsuite/gcc.target/s390/ccor.c b/gcc/testsuite/gcc.target/s390/ccor.c
>> index 31f30f60314..36a3c3a999a 100644
>> --- a/gcc/testsuite/gcc.target/s390/ccor.c
>> +++ b/gcc/testsuite/gcc.target/s390/ccor.c
>> @@ -42,7 +42,7 @@ GENFUN1(2)
>>   
>>   GENFUN1(3)
>>   
>> -/* { dg-final { scan-assembler {locrno} } } */
>> +/* { dg-final { scan-assembler {locro} } } */
>>   
>>   GENFUN2(0,1)
>>   
>> @@ -58,7 +58,7 @@ GENFUN2(0,3)
>>   
>>   GENFUN2(1,2)
>>   
>> -/* { dg-final { scan-assembler {locrnlh} } } */
>> +/* { dg-final { scan-assembler {locrlh} } } */
>>   
>>   GENFUN2(1,3)
>>   
>> -- 
>> 2.45.0
>>
diff mbox series

Patch

diff --git a/gcc/config/s390/s390.cc b/gcc/config/s390/s390.cc
index bf46eab2d63..7f8f1681c2a 100644
--- a/gcc/config/s390/s390.cc
+++ b/gcc/config/s390/s390.cc
@@ -78,6 +78,7 @@  along with GCC; see the file COPYING3.  If not see
 #include "tree-pass.h"
 #include "context.h"
 #include "builtins.h"
+#include "ifcvt.h"
 #include "rtl-iter.h"
 #include "intl.h"
 #include "tm-constrs.h"
@@ -18037,6 +18038,34 @@  s390_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode,
   return vectorize_vec_perm_const_1 (d);
 }
 
+/* Consider a NOCE conversion as profitable if there is at least one
+   conditional move.  */
+
+static bool
+s390_noce_conversion_profitable_p (rtx_insn *seq, struct noce_if_info *if_info)
+{
+  if (if_info->speed_p)
+    {
+      for (rtx_insn *insn = seq; insn; insn = NEXT_INSN (insn))
+	{
+	  rtx set = single_set (insn);
+	  if (set == NULL)
+	    continue;
+	  if (GET_CODE (SET_SRC (set)) != IF_THEN_ELSE)
+	    continue;
+	  rtx src = SET_SRC (set);
+	  machine_mode mode = GET_MODE (src);
+	  if (GET_MODE_CLASS (mode) != MODE_INT
+	      && GET_MODE_CLASS (mode) != MODE_FLOAT)
+	    continue;
+	  if (GET_MODE_SIZE (mode) > UNITS_PER_WORD)
+	    continue;
+	  return true;
+	}
+    }
+  return default_noce_conversion_profitable_p (seq, if_info);
+}
+
 /* Initialize GCC target structure.  */
 
 #undef  TARGET_ASM_ALIGNED_HI_OP
@@ -18350,6 +18379,9 @@  s390_vectorize_vec_perm_const (machine_mode vmode, machine_mode op_mode,
 #undef TARGET_VECTORIZE_VEC_PERM_CONST
 #define TARGET_VECTORIZE_VEC_PERM_CONST s390_vectorize_vec_perm_const
 
+#undef TARGET_NOCE_CONVERSION_PROFITABLE_P
+#define TARGET_NOCE_CONVERSION_PROFITABLE_P s390_noce_conversion_profitable_p
+
 struct gcc_target targetm = TARGET_INITIALIZER;
 
 #include "gt-s390.h"
diff --git a/gcc/testsuite/gcc.target/s390/ccor.c b/gcc/testsuite/gcc.target/s390/ccor.c
index 31f30f60314..36a3c3a999a 100644
--- a/gcc/testsuite/gcc.target/s390/ccor.c
+++ b/gcc/testsuite/gcc.target/s390/ccor.c
@@ -42,7 +42,7 @@  GENFUN1(2)
 
 GENFUN1(3)
 
-/* { dg-final { scan-assembler {locrno} } } */
+/* { dg-final { scan-assembler {locro} } } */
 
 GENFUN2(0,1)
 
@@ -58,7 +58,7 @@  GENFUN2(0,3)
 
 GENFUN2(1,2)
 
-/* { dg-final { scan-assembler {locrnlh} } } */
+/* { dg-final { scan-assembler {locrlh} } } */
 
 GENFUN2(1,3)