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:richard.guent...@gmail.com] > Sent: Tuesday, June 13, 2017 10:09 AM > To: Koval, Julia <julia.ko...@intel.com> > Cc: Jakub Jelinek <ja...@redhat.com>; H.J. Lu <hjl.to...@gmail.com>; GCC > Patches <gcc-patches@gcc.gnu.org>; Uros Bizjak <ubiz...@gmail.com>; Kirill > Yukhin <kirill.yuk...@gmail.com> > Subject: Re: [PATCH][X86] Fix rounding pattern similar to PR73350 > > On Mon, Jun 12, 2017 at 6:50 PM, Koval, Julia <julia.ko...@intel.com> 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:ja...@redhat.com] > >> Sent: Monday, June 12, 2017 6:18 PM > >> To: H.J. Lu <hjl.to...@gmail.com> > >> Cc: Koval, Julia <julia.ko...@intel.com>; GCC Patches <gcc- > >> patc...@gcc.gnu.org>; Uros Bizjak <ubiz...@gmail.com>; Kirill Yukhin > >> <kirill.yuk...@gmail.com> > >> 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 <julia.ko...@intel.com> > 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:hjl.to...@gmail.com] > >> > >> Sent: Monday, June 12, 2017 3:43 PM > >> > >> To: Koval, Julia <julia.ko...@intel.com> > >> > >> Cc: GCC Patches <gcc-patches@gcc.gnu.org>; Uros Bizjak > >> > >> <ubiz...@gmail.com>; Kirill Yukhin <kirill.yuk...@gmail.com> > >> > >> Subject: Re: [PATCH][X86] Fix rounding pattern similar to PR73350 > >> > >> > >> > >> On Mon, Jun 12, 2017 at 6:21 AM, Koval, Julia <julia.ko...@intel.com> > >> 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
0001-fix.patch
Description: 0001-fix.patch