Re: [PATCH v4 6/7] S/390: Use signaling FP comparison instructions

2019-10-11 Thread Ilya Leoshkevich
> Am 07.10.2019 um 18:19 schrieb Andreas Krebbel :
> 
> On 01.10.19 15:27, Ilya Leoshkevich wrote:
>> dg-torture.exp=inf-compare-1.c is failing, because (qNaN > +Inf)
>> comparison is compiled to CDB instruction, which does not signal an
>> invalid operation exception. KDB should have been used instead.
>> 
>> This patch introduces a new CCmode and a new pattern in order to
>> generate signaling instructions in this and similar cases.
>> 
>> gcc/ChangeLog:
>> 
>> 2019-08-09  Ilya Leoshkevich  
>> 
>>  PR target/77918
>>  * config/s390/2827.md: Add new opcodes.
>>  * config/s390/2964.md: Likewise.
>>  * config/s390/3906.md: Likewise.
>>  * config/s390/8561.md: Likewise.
>>  * config/s390/s390-builtins.def (s390_vfchesb): Use
>>  the new vec_cmpgev4sf_quiet_nocc.
>>  (s390_vfchedb): Use the new vec_cmpgev2df_quiet_nocc.
>>  (s390_vfchsb): Use the new vec_cmpgtv4sf_quiet_nocc.
>>  (s390_vfchdb): Use the new vec_cmpgtv2df_quiet_nocc.
>>  (vec_cmplev4sf): Use the new vec_cmplev4sf_quiet_nocc.
>>  (vec_cmplev2df): Use the new vec_cmplev2df_quiet_nocc.
>>  (vec_cmpltv4sf): Use the new vec_cmpltv4sf_quiet_nocc.
>>  (vec_cmpltv2df): Use the new vec_cmpltv2df_quiet_nocc.
>>  * config/s390/s390-modes.def (CCSFPS): New mode.
>>  * config/s390/s390.c (s390_match_ccmode_set): Support CCSFPS.
>>  (s390_select_ccmode): Return CCSFPS for LT, LE, GT, GE and LTGT.
>>  (s390_branch_condition_mask): Reuse CCS for CCSFPS.
>>  (s390_expand_vec_compare): Use non-signaling patterns where
>>  necessary.
>>  (s390_reverse_condition): Support CCSFPS.
>>  * config/s390/s390.md (*cmp_ccsfps): New pattern.
>>  * config/s390/vector.md: (VFCMP_HW_OP): Remove.
>>  (asm_fcmp_op): Likewise.
>>  (*smaxv2df3_vx): Use pattern for quiet comparison.
>>  (*sminv2df3_vx): Likewise.
>>  (*vec_cmp_nocc): Remove.
>>  (*vec_cmpeq_quiet_nocc): New pattern.
>>  (vec_cmpgt_quiet_nocc): Likewise.
>>  (vec_cmplt_quiet_nocc): New expander.
>>  (vec_cmpge_quiet_nocc): New pattern.
>>  (vec_cmple_quiet_nocc): New expander.
>>  (*vec_cmpeq_signaling_nocc): New pattern.
>>  (*vec_cmpgt_signaling_nocc): Likewise.
>>  (*vec_cmpgt_signaling_finite_nocc): Likewise.
>>  (*vec_cmpge_signaling_nocc): Likewise.
>>  (*vec_cmpge_signaling_finite_nocc): Likewise.
>>  (vec_cmpungt): New expander.
>>  (vec_cmpunge): Likewise.
>>  (vec_cmpuneq): Use quiet patterns.
>>  (vec_cmpltgt): Allow only on z14+.
>>  (vec_cmpordered): Use quiet patterns.
>>  (vec_cmpunordered): Likewise.
>>  (VEC_CMP_EXPAND): Add ungt and unge.
>> 
>> gcc/testsuite/ChangeLog:
>> 
>> 2019-08-09  Ilya Leoshkevich  
>> 
>>  * gcc.target/s390/vector/vec-scalar-cmp-1.c: Adjust
>>  expectations.
> 
> ...
> 
>> diff --git a/gcc/config/s390/s390-modes.def b/gcc/config/s390/s390-modes.def
>> index 7b7c1141449..2d9cd9b5945 100644
>> --- a/gcc/config/s390/s390-modes.def
>> +++ b/gcc/config/s390/s390-modes.def
>> @@ -52,6 +52,8 @@ CCS:  EQ  LT   GT  UNORDERED  
>> (LTGFR, LTGR, LTR, ICM/Y,
>>ADB/R, AEB/R, SDB/R, 
>> SEB/R,
>>SRAG, SRA, SRDA)
>> CCSR: EQ  GT   LT  UNORDERED  (CGF/R, CH/Y)
>> +CCSFPS: EQGT   LT  UNORDERED  (KEB/R, KDB/R, KXBR, 
>> KDTR,
>> +   KXTR, WFK)
> 
> GT and LT need to be swapped.
> 
> Ok with that change. Thanks!

I've swapped GT and LT and committed this as

https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=276871



Re: [PATCH v4 6/7] S/390: Use signaling FP comparison instructions

2019-10-07 Thread Andreas Krebbel
On 01.10.19 15:27, Ilya Leoshkevich wrote:
> dg-torture.exp=inf-compare-1.c is failing, because (qNaN > +Inf)
> comparison is compiled to CDB instruction, which does not signal an
> invalid operation exception. KDB should have been used instead.
> 
> This patch introduces a new CCmode and a new pattern in order to
> generate signaling instructions in this and similar cases.
> 
> gcc/ChangeLog:
> 
> 2019-08-09  Ilya Leoshkevich  
> 
>   PR target/77918
>   * config/s390/2827.md: Add new opcodes.
>   * config/s390/2964.md: Likewise.
>   * config/s390/3906.md: Likewise.
>   * config/s390/8561.md: Likewise.
>   * config/s390/s390-builtins.def (s390_vfchesb): Use
>   the new vec_cmpgev4sf_quiet_nocc.
>   (s390_vfchedb): Use the new vec_cmpgev2df_quiet_nocc.
>   (s390_vfchsb): Use the new vec_cmpgtv4sf_quiet_nocc.
>   (s390_vfchdb): Use the new vec_cmpgtv2df_quiet_nocc.
>   (vec_cmplev4sf): Use the new vec_cmplev4sf_quiet_nocc.
>   (vec_cmplev2df): Use the new vec_cmplev2df_quiet_nocc.
>   (vec_cmpltv4sf): Use the new vec_cmpltv4sf_quiet_nocc.
>   (vec_cmpltv2df): Use the new vec_cmpltv2df_quiet_nocc.
>   * config/s390/s390-modes.def (CCSFPS): New mode.
>   * config/s390/s390.c (s390_match_ccmode_set): Support CCSFPS.
>   (s390_select_ccmode): Return CCSFPS for LT, LE, GT, GE and LTGT.
>   (s390_branch_condition_mask): Reuse CCS for CCSFPS.
>   (s390_expand_vec_compare): Use non-signaling patterns where
>   necessary.
>   (s390_reverse_condition): Support CCSFPS.
>   * config/s390/s390.md (*cmp_ccsfps): New pattern.
>   * config/s390/vector.md: (VFCMP_HW_OP): Remove.
>   (asm_fcmp_op): Likewise.
>   (*smaxv2df3_vx): Use pattern for quiet comparison.
>   (*sminv2df3_vx): Likewise.
>   (*vec_cmp_nocc): Remove.
>   (*vec_cmpeq_quiet_nocc): New pattern.
>   (vec_cmpgt_quiet_nocc): Likewise.
>   (vec_cmplt_quiet_nocc): New expander.
>   (vec_cmpge_quiet_nocc): New pattern.
>   (vec_cmple_quiet_nocc): New expander.
>   (*vec_cmpeq_signaling_nocc): New pattern.
>   (*vec_cmpgt_signaling_nocc): Likewise.
>   (*vec_cmpgt_signaling_finite_nocc): Likewise.
>   (*vec_cmpge_signaling_nocc): Likewise.
>   (*vec_cmpge_signaling_finite_nocc): Likewise.
>   (vec_cmpungt): New expander.
>   (vec_cmpunge): Likewise.
>   (vec_cmpuneq): Use quiet patterns.
>   (vec_cmpltgt): Allow only on z14+.
>   (vec_cmpordered): Use quiet patterns.
>   (vec_cmpunordered): Likewise.
>   (VEC_CMP_EXPAND): Add ungt and unge.
> 
> gcc/testsuite/ChangeLog:
> 
> 2019-08-09  Ilya Leoshkevich  
> 
>   * gcc.target/s390/vector/vec-scalar-cmp-1.c: Adjust
>   expectations.

...

> diff --git a/gcc/config/s390/s390-modes.def b/gcc/config/s390/s390-modes.def
> index 7b7c1141449..2d9cd9b5945 100644
> --- a/gcc/config/s390/s390-modes.def
> +++ b/gcc/config/s390/s390-modes.def
> @@ -52,6 +52,8 @@ CCS:  EQ  LT   GT  UNORDERED  
> (LTGFR, LTGR, LTR, ICM/Y,
> ADB/R, AEB/R, SDB/R, 
> SEB/R,
> SRAG, SRA, SRDA)
>  CCSR: EQ  GT   LT  UNORDERED  (CGF/R, CH/Y)
> +CCSFPS: EQGT   LT  UNORDERED  (KEB/R, KDB/R, KXBR, 
> KDTR,
> +KXTR, WFK)

GT and LT need to be swapped.

Ok with that change. Thanks!

Andreas