public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: "Koval, Julia" <julia.koval@intel.com>
To: Richard Biener <richard.guenther@gmail.com>
Cc: Jakub Jelinek <jakub@redhat.com>, "H.J. Lu" <hjl.tools@gmail.com>,
	"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
Date: Tue, 13 Jun 2017 11:37:00 -0000	[thread overview]
Message-ID: <4E89A029A0F8D443B436A5167BA3C53F19956B03@IRSMSX101.ger.corp.intel.com> (raw)
In-Reply-To: <CAFiYyc2rgUw4sK3FvzFmmSXwy+cqywoqjWhV18jUhSSjdkah7g@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 4498 bytes --]

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.guenther@gmail.com]
> Sent: Tuesday, June 13, 2017 10:09 AM
> To: Koval, Julia <julia.koval@intel.com>
> Cc: Jakub Jelinek <jakub@redhat.com>; H.J. Lu <hjl.tools@gmail.com>; 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:50 PM, Koval, Julia <julia.koval@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:jakub@redhat.com]
> >> Sent: Monday, June 12, 2017 6:18 PM
> >> To: H.J. Lu <hjl.tools@gmail.com>
> >> Cc: Koval, Julia <julia.koval@intel.com>; 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 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

[-- Attachment #2: 0001-fix.patch --]
[-- Type: application/octet-stream, Size: 2753 bytes --]

From 7844ba15defae9fb4c276cb796158d5a60938d18 Mon Sep 17 00:00:00 2001
From: julia <jkoval@gkticlel801.igk.intel.com>
Date: Mon, 12 Jun 2017 13:23:29 +0300
Subject: [PATCH] fix

---
 gcc/config/i386/i386.c                    |  4 ++--
 gcc/config/i386/subst.md                  |  9 +++++----
 gcc/testsuite/gcc.target/i386/pr73350-2.c | 33 +++++++++++++++++++++++++++++++
 3 files changed, 40 insertions(+), 6 deletions(-)
 create mode 100644 gcc/testsuite/gcc.target/i386/pr73350-2.c

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index d5c2d46..9f7290a 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -36597,8 +36597,8 @@ ix86_expand_sse_comi_round (const struct builtin_description *d,
     }
   else
     {
-      gcc_assert (GET_CODE (XVECEXP (pat, 0, 0)) == SET);
-      set_dst = SET_DEST (XVECEXP (pat, 0, 0));
+      gcc_assert (GET_CODE (pat) == SET);
+      set_dst = SET_DEST (pat);
     }
 
   emit_insn (pat);
diff --git a/gcc/config/i386/subst.md b/gcc/config/i386/subst.md
index 57fb0d4..4685db3 100644
--- a/gcc/config/i386/subst.md
+++ b/gcc/config/i386/subst.md
@@ -177,10 +177,11 @@
   [(set (match_operand:SUBST_A 0)
         (match_operand:SUBST_A 1))]
   "TARGET_AVX512F"
-  [(parallel[
-     (set (match_dup 0)
-          (match_dup 1))
-     (unspec [(match_operand:SI 2 "const48_operand")] UNSPEC_EMBEDDED_ROUNDING)])])
+  [(set (match_dup 0)
+	(unspec:SUBST_A [(match_dup 1)
+	  (match_operand:SI 2 "const48_operand")]
+	  UNSPEC_EMBEDDED_ROUNDING))
+])
 
 (define_subst_attr "round_expand_name" "round_expand" "" "_round")
 (define_subst_attr "round_expand_nimm_predicate" "round_expand" "nonimmediate_operand" "register_operand")
diff --git a/gcc/testsuite/gcc.target/i386/pr73350-2.c b/gcc/testsuite/gcc.target/i386/pr73350-2.c
new file mode 100644
index 0000000..e7137f7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr73350-2.c
@@ -0,0 +1,33 @@
+/* { dg-do run { target *-*-linux* *-*-gnu* } } */
+/* { dg-options "-O2 -mavx512f -mavx512er" } */
+/* { dg-require-effective-target avx512f } */
+
+#include <x86intrin.h>
+#include <unistd.h>
+#include <signal.h>
+#include <stdlib.h>
+
+void do_exit (int i)
+{
+  exit (0);
+}
+
+void
+main (void)
+{
+  struct sigaction s;
+  sigemptyset (&s.sa_mask);
+  s.sa_handler = do_exit;
+  s.sa_flags = 0;
+  sigaction (SIGFPE, &s, NULL);
+  alarm (1);
+
+  __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);
+  __m512 result2 = _mm512_rsqrt28_round_ps (a, _MM_FROUND_CUR_DIRECTION);
+  
+  if (result1[0] + result2[0])
+    abort ();
+}
-- 
2.5.5


  reply	other threads:[~2017-06-13 11:37 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-12 13:21 Koval, Julia
2017-06-12 13:42 ` H.J. Lu
2017-06-12 16:06   ` Koval, Julia
2017-06-12 16:08     ` H.J. Lu
2017-06-12 16:18       ` Jakub Jelinek
2017-06-12 16:50         ` Koval, Julia
2017-06-13  8:08           ` Richard Biener
2017-06-13 11:37             ` Koval, Julia [this message]
2017-06-14  9:54               ` Uros Bizjak
2017-06-16  6:46                 ` Koval, Julia
2017-06-16  7:05                   ` Uros Bizjak
2017-06-20 18:26                     ` Kirill Yukhin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4E89A029A0F8D443B436A5167BA3C53F19956B03@IRSMSX101.ger.corp.intel.com \
    --to=julia.koval@intel.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=hjl.tools@gmail.com \
    --cc=jakub@redhat.com \
    --cc=kirill.yukhin@gmail.com \
    --cc=richard.guenther@gmail.com \
    --cc=ubizjak@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).