re PR target/79127 (Error: invalid register for .seh_savexmm in matmul_i4.c)
authorJakub Jelinek <jakub@redhat.com>
Thu, 19 Jan 2017 15:41:15 +0000 (16:41 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 19 Jan 2017 15:41:15 +0000 (16:41 +0100)
PR target/79127
* acinclude.m4 (LIBGFOR_CHECK_AVX512F): Ensure the test clobbers
some zmm16+ registers to verify they are handled by unwind info
properly if needed.
* configure: Regenerated.

From-SVN: r244636

libgfortran/ChangeLog
libgfortran/acinclude.m4
libgfortran/configure

index 3335177eebe66b454cf1e76bb4fa40eb253df589..6d252be9186c0ee231380f4032a634ce876b2b03 100644 (file)
@@ -1,3 +1,11 @@
+2017-01-19  Jakub Jelinek  <jakub@redhat.com>
+
+       PR target/79127
+       * acinclude.m4 (LIBGFOR_CHECK_AVX512F): Ensure the test clobbers
+       some zmm16+ registers to verify they are handled by unwind info
+       properly if needed.
+       * configure: Regenerated.
+
 2017-01-17  Jakub Jelinek  <jakub@redhat.com>
 
        PR other/79046
index 9a7f461af3c4f362a13719d1959c511722d04d13..34e14071aebd996d07dc248ac2a0eb2ebe5a8254 100644 (file)
@@ -437,7 +437,14 @@ AC_DEFUN([LIBGFOR_CHECK_AVX512F], [
        typedef double __m512d __attribute__ ((__vector_size__ (64)));
        __m512d _mm512_add (__m512d a)
        {
-         return __builtin_ia32_addpd512_mask (a, a, a, 1, 4);
+         __m512d b = __builtin_ia32_addpd512_mask (a, a, a, 1, 4);
+         /* For -m64/-mx32 also verify that code will work even if
+            the target uses call saved zmm16+ and needs to emit
+            unwind info for them (e.g. on mingw).  See PR79127.  */
+#ifdef __x86_64__
+         asm volatile ("" : : : "zmm16", "zmm17", "zmm18", "zmm19");
+#endif
+         return b;
         }]], [[]])],
        AC_DEFINE(HAVE_AVX512F, 1,
        [Define if AVX512f instructions can be compiled.]),
index f975e2abc50fae692bdd32579defe0bea4a4eccf..20b5e6817126dca09519e4baa29892c94df56175 100755 (executable)
@@ -26300,7 +26300,14 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
        typedef double __m512d __attribute__ ((__vector_size__ (64)));
        __m512d _mm512_add (__m512d a)
        {
-         return __builtin_ia32_addpd512_mask (a, a, a, 1, 4);
+         __m512d b = __builtin_ia32_addpd512_mask (a, a, a, 1, 4);
+         /* For -m64/-mx32 also verify that code will work even if
+            the target uses call saved zmm16+ and needs to emit
+            unwind info for them (e.g. on mingw).  See PR79127.  */
+#ifdef __x86_64__
+         asm volatile ("" : : : "zmm16", "zmm17", "zmm18", "zmm19");
+#endif
+         return b;
         }
 int
 main ()