This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
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.koval@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.tools@gmail.com]
> >> Sent: Monday, June 12, 2017 3:43 PM
> >> To: Koval, Julia <julia.koval@intel.com>
> >> Cc: GCC Patches <gcc-patches@gcc.gnu.org>; Uros Bizjak
> >> <ubizjak@gmail.com>; Kirill Yukhin <kirill.yukhin@gmail.com>
> >> Subject: Re: [PATCH][X86] Fix rounding pattern similar to PR73350
> >>
> >> On Mon, Jun 12, 2017 at 6:21 AM, Koval, Julia <julia.koval@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