Thank you for your help. I fixed the test similar to existing sigaction tests.

gcc/
        * config/i386/i386.c: Fix rounding expand for new pattern.
        * config/i386/subst.md: Fix pattern (parallel -> unspec).
gcc/testsuite/
        * gcc.target/i386/pr73350-2.c: New test.

Thanks,
Julia

> -----Original Message-----
> From: Richard Biener [mailto:[email protected]]
> Sent: Tuesday, June 13, 2017 10:09 AM
> To: Koval, Julia <[email protected]>
> Cc: Jakub Jelinek <[email protected]>; H.J. Lu <[email protected]>; GCC
> Patches <[email protected]>; Uros Bizjak <[email protected]>; Kirill
> Yukhin <[email protected]>
> Subject: Re: [PATCH][X86] Fix rounding pattern similar to PR73350
> 
> On Mon, Jun 12, 2017 at 6:50 PM, Koval, Julia <[email protected]> wrote:
> > I'm so sorry, but I really don't get it. The right result of the test is: 
> > Floating
> point exception (core dumped). The wrong result of the test is: nan(no
> exception). If I get an exception(which is right) - the test is failed 
> anyway. The
> exception is raised in one instruction, I can't get any intermediate value 
> there..
> 
> We do have a few testcases catching these cases by installing a signal
> handler (grep for sigaction in testsuite/)
> 
> Richard.
> 
> > I tried to replaced it with compile time test(attached), which shows, that 
> > both
> instruction are generated(not combined) - is it ok?
> >
> > Thanks,
> > Julia
> >
> >> -----Original Message-----
> >> From: Jakub Jelinek [mailto:[email protected]]
> >> Sent: Monday, June 12, 2017 6:18 PM
> >> To: H.J. Lu <[email protected]>
> >> Cc: Koval, Julia <[email protected]>; GCC Patches <gcc-
> >> [email protected]>; Uros Bizjak <[email protected]>; Kirill Yukhin
> >> <[email protected]>
> >> Subject: Re: [PATCH][X86] Fix rounding pattern similar to PR73350
> >>
> >> On Mon, Jun 12, 2017 at 09:08:00AM -0700, H.J. Lu wrote:
> >> > On Mon, Jun 12, 2017 at 9:06 AM, Koval, Julia <[email protected]>
> wrote:
> >> > > I would like to, but as far as I know the only testcase possible is 
> >> > > below,
> and
> >> as far as I know there is no possibility to use dg-error for runtime
> >> exceptions(Sorry, if I'm wrong). There are only 2 versions of the flag
> exception
> >> or no exception and the error is, when they are combined in CSE.
> >> >
> >> > Can you use
> >> >
> >> > if (wrong)
> >> >   abort ();
> >> >
> >> > in testcase?
> >>
> >> Where wrong can also be if (__builtin_fabsf (somefloatval - expectedval) <
> >> epsilon)
> >> or similar if needed.  Also, the testcase contains many unnecessary
> >> includes, if you use __builtin_abort, I'd hope you only need x86intrin.h 
> >> and
> >> nothing else.  And, main can be just int main (), argc and argv aren't 
> >> used.
> >> >
> >> > >> -----Original Message-----
> >> > >> From: H.J. Lu [mailto:[email protected]]
> >> > >> Sent: Monday, June 12, 2017 3:43 PM
> >> > >> To: Koval, Julia <[email protected]>
> >> > >> Cc: GCC Patches <[email protected]>; Uros Bizjak
> >> > >> <[email protected]>; Kirill Yukhin <[email protected]>
> >> > >> Subject: Re: [PATCH][X86] Fix rounding pattern similar to PR73350
> >> > >>
> >> > >> On Mon, Jun 12, 2017 at 6:21 AM, Koval, Julia <[email protected]>
> >> wrote:
> >> > >> > This is the same issue as PR73350 and PR80862 for disabling FP
> >> exceptions.
> >> > >> >
> >> > >> > gcc -O0 -mavx512f -mavx512er returns exception
> >> > >> > gcc -O2 -mavx512f -mavx512er returns nan
> >> > >> >
> >> > >> > For this code:
> >> > >> >
> >> > >> > #include <stdio.h>
> >> > >> > #include <math.h>
> >> > >> > #include <x86intrin.h>
> >> > >> > #include <limits.h>
> >> > >> > #include <float.h>
> >> > >> >
> >> > >> > int main(int argc, char *argv[]) {
> >> > >> >     __m512 a = _mm512_set1_ps((float) -1);
> >> > >> >     __m512 b = _mm512_set1_ps((float) -1);
> >> > >> >     _mm_setcsr( _MM_MASK_MASK &~
> >> > >> >
> >> > >>
> (_MM_MASK_OVERFLOW|_MM_MASK_INVALID|_MM_MASK_DIV_ZERO)
> >> );
> >> > >> >     __m512 result1 = _mm512_rsqrt28_round_ps(a,
> >> _MM_FROUND_NO_EXC );
> >> > >> >     printf("%d %d\n", _MM_FROUND_CUR_DIRECTION,
> >> > >> _MM_FROUND_NO_EXC);
> >> > >> >     __m512 result2 = _mm512_rsqrt28_round_ps(a,
> >> > >> _MM_FROUND_CUR_DIRECTION);
> >> > >> >
> >> > >> >     printf("%g\n", result1[0] - result2[0]);
> >> > >> >
> >> > >> >     return 0;
> >> > >> > }
> >>
> >>       Jakub

Attachment: 0001-fix.patch
Description: 0001-fix.patch

Reply via email to