diff --git a/.gitignore b/.gitignore index 29f4e35..ea7b0d5 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ /gcc-7.0.1-20170211.tar.bz2 /gcc-7.0.1-20170219.tar.bz2 /gcc-7.0.1-20170225.tar.bz2 +/gcc-7.0.1-20170308.tar.bz2 diff --git a/gcc.spec b/gcc.spec index 7e5aeef..2413868 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,10 +1,10 @@ -%global DATE 20170225 -%global SVNREV 245736 +%global DATE 20170308 +%global SVNREV 245981 %global gcc_version 7.0.1 %global gcc_major 7 # Note, gcc_release must be integer, if you want to add suffixes to # %{release}, append them after %{gcc_release} on Release: line. -%global gcc_release 0.10 +%global gcc_release 0.11 %global nvptx_tools_gitrev c28050f60193b3b95a18866a96f03334e874e78f %global nvptx_newlib_gitrev aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24 %global _unpackaged_files_terminate_build 0 @@ -232,6 +232,10 @@ Patch8: gcc7-no-add-needed.patch Patch9: gcc7-aarch64-async-unw-tables.patch Patch10: gcc7-foffload-default.patch Patch11: gcc7-Wno-format-security.patch +Patch12: gcc7-pr79932-1.patch +Patch13: gcc7-pr79932-2.patch +Patch14: gcc7-pr79941.patch +Patch15: gcc7-pr79944.patch Patch1000: nvptx-tools-no-ptxas.patch Patch1001: nvptx-tools-build.patch @@ -820,6 +824,10 @@ package or when debugging this package. %patch9 -p0 -b .aarch64-async-unw-tables~ %patch10 -p0 -b .foffload-default~ %patch11 -p0 -b .Wno-format-security~ +%patch12 -p0 -b .pr79932-1~ +%patch13 -p0 -b .pr79932-2~ +%patch14 -p0 -b .pr79941~ +%patch15 -p0 -b .pr79944~ cd nvptx-tools-%{nvptx_tools_gitrev} %patch1000 -p1 -b .nvptx-tools-no-ptxas~ @@ -3236,6 +3244,37 @@ fi %endif %changelog +* Wed Mar 8 2017 Jakub Jelinek 7.0.1-0.11 +- update from the trunk + - PRs ada/79903, ada/79945, c++/42000, c++/64574, c++/70266, c++/71568, + c++/79414, c++/79681, c++/79746, c++/79782, c++/79791, c++/79796, + c++/79821, c++/79822, c++/79825, c/79756, c/79758, c/79834, c/79836, + c/79837, c/79847, c/79855, c/79940, demangler/67264, demangler/70909, + fortran/51119, fortran/78379, fortran/79739, fortran/79841, + fortran/79894, libstdc++/79789, libstdc++/79798, lto/78140, lto/79625, + lto/79760, middle-end/68270, middle-end/79692, middle-end/79721, + middle-end/79731, middle-end/79805, middle-end/79809, + middle-end/79818, rtl-optimization/79571, rtl-optimization/79584, + rtl-optimization/79780, rtl-optimization/79901, sanitize/79783, + sanitizer/79897, sanitizer/79904, target/43763, target/68739, + target/79395, target/79439, target/79514, target/79544, target/79729, + target/79742, target/79749, target/79752, target/79793, target/79807, + target/79812, tree-optimization/45397, tree-optimization/66768, + tree-optimization/77536, tree-optimization/79345, + tree-optimization/79690, tree-optimization/79691, + tree-optimization/79699, tree-optimization/79723, + tree-optimization/79732, tree-optimization/79734, + tree-optimization/79737, tree-optimization/79740, + tree-optimization/79777, tree-optimization/79803, + tree-optimization/79824, tree-optimization/79894, + tree-optimization/79920, tree-optimization/79943, + tree-optimization/79955 +- fix 64 avx512vl and 6 avx512bw intrinsics that were not available with -O0 + (PR target/79932) +- temporarily disable incorrect folding of Altivec vmul[oe]u[bh] intrinsics + (#1429961, PR middle-end/79941) +- fix -fsanitize=address with some atomic/sync builtins (PR sanitizer/79944) + * Sat Feb 25 2017 Jakub Jelinek 7.0.1-0.10 - update from the trunk - PRs c++/17729, c++/41727, c++/50308, c++/69523, c++/78139, c++/78282, diff --git a/gcc7-pr79932-1.patch b/gcc7-pr79932-1.patch new file mode 100644 index 0000000..2d822f7 --- /dev/null +++ b/gcc7-pr79932-1.patch @@ -0,0 +1,181 @@ +2017-03-07 Jakub Jelinek + + PR target/79932 + * config/i386/avx512bwintrin.h (_mm512_packs_epi32, + _mm512_maskz_packs_epi32, _mm512_mask_packs_epi32, + _mm512_packus_epi32, _mm512_maskz_packus_epi32, + _mm512_mask_packus_epi32): Move definitions outside of __OPTIMIZE__ + guarded section. + + * gcc.target/i386/pr79932-1.c: New test. + +--- gcc/config/i386/avx512bwintrin.h.jj 2017-01-23 18:09:48.000000000 +0100 ++++ gcc/config/i386/avx512bwintrin.h 2017-03-07 07:47:28.900049849 +0100 +@@ -2656,6 +2656,72 @@ _mm512_cmple_epi16_mask (__m512i __X, __ + (__mmask32) -1); + } + ++extern __inline __m512i ++__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm512_packs_epi32 (__m512i __A, __m512i __B) ++{ ++ return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A, ++ (__v16si) __B, ++ (__v32hi) ++ _mm512_setzero_si512 (), ++ (__mmask32) -1); ++} ++ ++extern __inline __m512i ++__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm512_maskz_packs_epi32 (__mmask32 __M, __m512i __A, __m512i __B) ++{ ++ return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A, ++ (__v16si) __B, ++ (__v32hi) ++ _mm512_setzero_si512 (), ++ __M); ++} ++ ++extern __inline __m512i ++__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm512_mask_packs_epi32 (__m512i __W, __mmask32 __M, __m512i __A, ++ __m512i __B) ++{ ++ return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A, ++ (__v16si) __B, ++ (__v32hi) __W, ++ __M); ++} ++ ++extern __inline __m512i ++__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm512_packus_epi32 (__m512i __A, __m512i __B) ++{ ++ return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A, ++ (__v16si) __B, ++ (__v32hi) ++ _mm512_setzero_si512 (), ++ (__mmask32) -1); ++} ++ ++extern __inline __m512i ++__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm512_maskz_packus_epi32 (__mmask32 __M, __m512i __A, __m512i __B) ++{ ++ return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A, ++ (__v16si) __B, ++ (__v32hi) ++ _mm512_setzero_si512 (), ++ __M); ++} ++ ++extern __inline __m512i ++__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm512_mask_packus_epi32 (__m512i __W, __mmask32 __M, __m512i __A, ++ __m512i __B) ++{ ++ return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A, ++ (__v16si) __B, ++ (__v32hi) __W, ++ __M); ++} ++ + #ifdef __OPTIMIZE__ + extern __inline __mmask32 + __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +@@ -3012,72 +3078,6 @@ _mm512_cmp_epu8_mask (__m512i __X, __m51 + } + + extern __inline __m512i +-__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm512_packs_epi32 (__m512i __A, __m512i __B) +-{ +- return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A, +- (__v16si) __B, +- (__v32hi) +- _mm512_setzero_si512 (), +- (__mmask32) -1); +-} +- +-extern __inline __m512i +-__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm512_maskz_packs_epi32 (__mmask32 __M, __m512i __A, __m512i __B) +-{ +- return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A, +- (__v16si) __B, +- (__v32hi) +- _mm512_setzero_si512 (), +- __M); +-} +- +-extern __inline __m512i +-__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm512_mask_packs_epi32 (__m512i __W, __mmask32 __M, __m512i __A, +- __m512i __B) +-{ +- return (__m512i) __builtin_ia32_packssdw512_mask ((__v16si) __A, +- (__v16si) __B, +- (__v32hi) __W, +- __M); +-} +- +-extern __inline __m512i +-__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm512_packus_epi32 (__m512i __A, __m512i __B) +-{ +- return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A, +- (__v16si) __B, +- (__v32hi) +- _mm512_setzero_si512 (), +- (__mmask32) -1); +-} +- +-extern __inline __m512i +-__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm512_maskz_packus_epi32 (__mmask32 __M, __m512i __A, __m512i __B) +-{ +- return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A, +- (__v16si) __B, +- (__v32hi) +- _mm512_setzero_si512 (), +- __M); +-} +- +-extern __inline __m512i +-__attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm512_mask_packus_epi32 (__m512i __W, __mmask32 __M, __m512i __A, +- __m512i __B) +-{ +- return (__m512i) __builtin_ia32_packusdw512_mask ((__v16si) __A, +- (__v16si) __B, +- (__v32hi) __W, +- __M); +-} +- +-extern __inline __m512i + __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) + _mm512_bslli_epi128 (__m512i __A, const int __N) + { +--- gcc/testsuite/gcc.target/i386/pr79932-1.c.jj 2017-03-07 07:54:45.181339418 +0100 ++++ gcc/testsuite/gcc.target/i386/pr79932-1.c 2017-03-07 07:54:24.000000000 +0100 +@@ -0,0 +1,19 @@ ++/* PR target/79932 */ ++/* { dg-do compile } */ ++/* { dg-options "-O0 -mavx512bw" } */ ++ ++#include ++ ++__m512i a, b, c, d, e, f, g, h, i; ++__mmask32 m; ++ ++void ++foo (void) ++{ ++ d = _mm512_packs_epi32 (a, b); ++ e = _mm512_maskz_packs_epi32 (m, a, b); ++ f = _mm512_mask_packs_epi32 (c, m, a, b); ++ g = _mm512_packus_epi32 (a, b); ++ h = _mm512_maskz_packus_epi32 (m, a, b); ++ i = _mm512_mask_packus_epi32 (c, m, a, b); ++} diff --git a/gcc7-pr79932-2.patch b/gcc7-pr79932-2.patch new file mode 100644 index 0000000..93d3b7b --- /dev/null +++ b/gcc7-pr79932-2.patch @@ -0,0 +1,1286 @@ +2017-03-07 Jakub Jelinek + + PR target/79932 + * config/i386/avx512vlintrin.h (_mm256_cmpge_epi32_mask, + _mm256_cmpge_epi64_mask, _mm256_cmpge_epu32_mask, + _mm256_cmpge_epu64_mask, _mm256_cmple_epi32_mask, + _mm256_cmple_epi64_mask, _mm256_cmple_epu32_mask, + _mm256_cmple_epu64_mask, _mm256_cmplt_epi32_mask, + _mm256_cmplt_epi64_mask, _mm256_cmplt_epu32_mask, + _mm256_cmplt_epu64_mask, _mm256_cmpneq_epi32_mask, + _mm256_cmpneq_epi64_mask, _mm256_cmpneq_epu32_mask, + _mm256_cmpneq_epu64_mask, _mm256_mask_cmpge_epi32_mask, + _mm256_mask_cmpge_epi64_mask, _mm256_mask_cmpge_epu32_mask, + _mm256_mask_cmpge_epu64_mask, _mm256_mask_cmple_epi32_mask, + _mm256_mask_cmple_epi64_mask, _mm256_mask_cmple_epu32_mask, + _mm256_mask_cmple_epu64_mask, _mm256_mask_cmplt_epi32_mask, + _mm256_mask_cmplt_epi64_mask, _mm256_mask_cmplt_epu32_mask, + _mm256_mask_cmplt_epu64_mask, _mm256_mask_cmpneq_epi32_mask, + _mm256_mask_cmpneq_epi64_mask, _mm256_mask_cmpneq_epu32_mask, + _mm256_mask_cmpneq_epu64_mask, _mm_cmpge_epi32_mask, + _mm_cmpge_epi64_mask, _mm_cmpge_epu32_mask, _mm_cmpge_epu64_mask, + _mm_cmple_epi32_mask, _mm_cmple_epi64_mask, _mm_cmple_epu32_mask, + _mm_cmple_epu64_mask, _mm_cmplt_epi32_mask, _mm_cmplt_epi64_mask, + _mm_cmplt_epu32_mask, _mm_cmplt_epu64_mask, _mm_cmpneq_epi32_mask, + _mm_cmpneq_epi64_mask, _mm_cmpneq_epu32_mask, _mm_cmpneq_epu64_mask, + _mm_mask_cmpge_epi32_mask, _mm_mask_cmpge_epi64_mask, + _mm_mask_cmpge_epu32_mask, _mm_mask_cmpge_epu64_mask, + _mm_mask_cmple_epi32_mask, _mm_mask_cmple_epi64_mask, + _mm_mask_cmple_epu32_mask, _mm_mask_cmple_epu64_mask, + _mm_mask_cmplt_epi32_mask, _mm_mask_cmplt_epi64_mask, + _mm_mask_cmplt_epu32_mask, _mm_mask_cmplt_epu64_mask, + _mm_mask_cmpneq_epi32_mask, _mm_mask_cmpneq_epi64_mask, + _mm_mask_cmpneq_epu32_mask, _mm_mask_cmpneq_epu64_mask): Move + definitions outside of __OPTIMIZE__ guarded section. + + * gcc.target/i386/pr79932-2.c: New test. + +--- gcc/config/i386/avx512vlintrin.h.jj 2017-01-17 18:40:59.000000000 +0100 ++++ gcc/config/i386/avx512vlintrin.h 2017-03-07 08:27:31.071641043 +0100 +@@ -9172,6 +9172,582 @@ _mm256_mask_permutexvar_epi32 (__m256i _ + __M); + } + ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmpneq_epu32_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 4, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmpneq_epu32_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 4, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmplt_epu32_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 1, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmplt_epu32_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 1, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmpge_epu32_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 5, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmpge_epu32_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 5, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmple_epu32_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 2, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmple_epu32_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 2, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmpneq_epu64_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 4, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmpneq_epu64_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 4, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmplt_epu64_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 1, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmplt_epu64_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 1, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmpge_epu64_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 5, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmpge_epu64_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 5, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmple_epu64_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 2, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmple_epu64_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 2, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmpneq_epi32_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 4, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmpneq_epi32_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 4, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmplt_epi32_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 1, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmplt_epi32_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 1, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmpge_epi32_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 5, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmpge_epi32_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 5, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmple_epi32_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 2, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmple_epi32_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, ++ (__v8si) __Y, 2, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmpneq_epi64_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 4, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmpneq_epi64_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 4, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmplt_epi64_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 1, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmplt_epi64_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 1, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmpge_epi64_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 5, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmpge_epi64_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 5, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_mask_cmple_epi64_mask (__mmask8 __M, __m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 2, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm256_cmple_epi64_mask (__m256i __X, __m256i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, ++ (__v4di) __Y, 2, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmpneq_epu32_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 4, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmpneq_epu32_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 4, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmplt_epu32_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 1, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmplt_epu32_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 1, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmpge_epu32_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 5, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmpge_epu32_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 5, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmple_epu32_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 2, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmple_epu32_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 2, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmpneq_epu64_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 4, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmpneq_epu64_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 4, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmplt_epu64_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 1, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmplt_epu64_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 1, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmpge_epu64_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 5, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmpge_epu64_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 5, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmple_epu64_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 2, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmple_epu64_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 2, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmpneq_epi32_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 4, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmpneq_epi32_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 4, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmplt_epi32_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 1, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmplt_epi32_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 1, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmpge_epi32_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 5, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmpge_epi32_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 5, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmple_epi32_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 2, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmple_epi32_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, ++ (__v4si) __Y, 2, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmpneq_epi64_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 4, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmpneq_epi64_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 4, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmplt_epi64_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 1, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmplt_epi64_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 1, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmpge_epi64_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 5, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmpge_epi64_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 5, ++ (__mmask8) -1); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_mask_cmple_epi64_mask (__mmask8 __M, __m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 2, ++ (__mmask8) __M); ++} ++ ++extern __inline __mmask8 ++ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) ++_mm_cmple_epi64_mask (__m128i __X, __m128i __Y) ++{ ++ return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, ++ (__v2di) __Y, 2, ++ (__mmask8) -1); ++} ++ + #ifdef __OPTIMIZE__ + extern __inline __m256i + __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +@@ -11784,582 +12360,6 @@ _mm256_permutex_pd (__m256d __X, const i + (__mmask8) -1); + } + +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmpneq_epu32_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 4, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmpneq_epu32_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 4, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmplt_epu32_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 1, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmplt_epu32_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 1, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmpge_epu32_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 5, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmpge_epu32_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 5, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmple_epu32_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 2, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmple_epu32_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 2, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmpneq_epu64_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 4, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmpneq_epu64_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 4, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmplt_epu64_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 1, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmplt_epu64_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 1, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmpge_epu64_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 5, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmpge_epu64_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 5, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmple_epu64_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 2, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmple_epu64_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 2, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmpneq_epi32_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 4, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmpneq_epi32_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 4, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmplt_epi32_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 1, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmplt_epi32_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 1, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmpge_epi32_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 5, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmpge_epi32_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 5, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmple_epi32_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 2, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmple_epi32_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd256_mask ((__v8si) __X, +- (__v8si) __Y, 2, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmpneq_epi64_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 4, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmpneq_epi64_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 4, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmplt_epi64_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 1, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmplt_epi64_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 1, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmpge_epi64_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 5, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmpge_epi64_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 5, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_mask_cmple_epi64_mask (__mmask8 __M, __m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 2, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm256_cmple_epi64_mask (__m256i __X, __m256i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq256_mask ((__v4di) __X, +- (__v4di) __Y, 2, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmpneq_epu32_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 4, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmpneq_epu32_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 4, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmplt_epu32_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 1, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmplt_epu32_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 1, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmpge_epu32_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 5, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmpge_epu32_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 5, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmple_epu32_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 2, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmple_epu32_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 2, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmpneq_epu64_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 4, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmpneq_epu64_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 4, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmplt_epu64_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 1, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmplt_epu64_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 1, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmpge_epu64_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 5, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmpge_epu64_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 5, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmple_epu64_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 2, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmple_epu64_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_ucmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 2, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmpneq_epi32_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 4, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmpneq_epi32_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 4, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmplt_epi32_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 1, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmplt_epi32_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 1, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmpge_epi32_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 5, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmpge_epi32_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 5, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmple_epi32_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 2, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmple_epi32_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpd128_mask ((__v4si) __X, +- (__v4si) __Y, 2, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmpneq_epi64_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 4, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmpneq_epi64_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 4, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmplt_epi64_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 1, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmplt_epi64_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 1, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmpge_epi64_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 5, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmpge_epi64_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 5, +- (__mmask8) -1); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_mask_cmple_epi64_mask (__mmask8 __M, __m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 2, +- (__mmask8) __M); +-} +- +-extern __inline __mmask8 +- __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) +-_mm_cmple_epi64_mask (__m128i __X, __m128i __Y) +-{ +- return (__mmask8) __builtin_ia32_cmpq128_mask ((__v2di) __X, +- (__v2di) __Y, 2, +- (__mmask8) -1); +-} +- + #else + #define _mm256_permutex_pd(X, M) \ + ((__m256d) __builtin_ia32_permdf256_mask ((__v4df)(__m256d)(X), (int)(M), \ +--- gcc/testsuite/gcc.target/i386/pr79932-2.c.jj 2017-03-07 08:37:10.835990732 +0100 ++++ gcc/testsuite/gcc.target/i386/pr79932-2.c 2017-03-07 08:36:13.000000000 +0100 +@@ -0,0 +1,78 @@ ++/* PR target/79932 */ ++/* { dg-do compile } */ ++/* { dg-options "-O0 -mavx512vl" } */ ++ ++#include ++ ++__m256i a, b; ++__m128i c, d; ++__mmask32 e, f[64]; ++ ++void ++foo (void) ++{ ++ f[0] = _mm256_cmpge_epi32_mask (a, b); ++ f[1] = _mm256_cmpge_epi64_mask (a, b); ++ f[2] = _mm256_cmpge_epu32_mask (a, b); ++ f[3] = _mm256_cmpge_epu64_mask (a, b); ++ f[4] = _mm256_cmple_epi32_mask (a, b); ++ f[5] = _mm256_cmple_epi64_mask (a, b); ++ f[6] = _mm256_cmple_epu32_mask (a, b); ++ f[7] = _mm256_cmple_epu64_mask (a, b); ++ f[8] = _mm256_cmplt_epi32_mask (a, b); ++ f[9] = _mm256_cmplt_epi64_mask (a, b); ++ f[10] = _mm256_cmplt_epu32_mask (a, b); ++ f[11] = _mm256_cmplt_epu64_mask (a, b); ++ f[12] = _mm256_cmpneq_epi32_mask (a, b); ++ f[13] = _mm256_cmpneq_epi64_mask (a, b); ++ f[14] = _mm256_cmpneq_epu32_mask (a, b); ++ f[15] = _mm256_cmpneq_epu64_mask (a, b); ++ f[16] = _mm256_mask_cmpge_epi32_mask (e, a, b); ++ f[17] = _mm256_mask_cmpge_epi64_mask (e, a, b); ++ f[18] = _mm256_mask_cmpge_epu32_mask (e, a, b); ++ f[19] = _mm256_mask_cmpge_epu64_mask (e, a, b); ++ f[20] = _mm256_mask_cmple_epi32_mask (e, a, b); ++ f[21] = _mm256_mask_cmple_epi64_mask (e, a, b); ++ f[22] = _mm256_mask_cmple_epu32_mask (e, a, b); ++ f[23] = _mm256_mask_cmple_epu64_mask (e, a, b); ++ f[24] = _mm256_mask_cmplt_epi32_mask (e, a, b); ++ f[25] = _mm256_mask_cmplt_epi64_mask (e, a, b); ++ f[26] = _mm256_mask_cmplt_epu32_mask (e, a, b); ++ f[27] = _mm256_mask_cmplt_epu64_mask (e, a, b); ++ f[28] = _mm256_mask_cmpneq_epi32_mask (e, a, b); ++ f[29] = _mm256_mask_cmpneq_epi64_mask (e, a, b); ++ f[30] = _mm256_mask_cmpneq_epu32_mask (e, a, b); ++ f[31] = _mm256_mask_cmpneq_epu64_mask (e, a, b); ++ f[32] = _mm_cmpge_epi32_mask (c, d); ++ f[33] = _mm_cmpge_epi64_mask (c, d); ++ f[34] = _mm_cmpge_epu32_mask (c, d); ++ f[35] = _mm_cmpge_epu64_mask (c, d); ++ f[36] = _mm_cmple_epi32_mask (c, d); ++ f[37] = _mm_cmple_epi64_mask (c, d); ++ f[38] = _mm_cmple_epu32_mask (c, d); ++ f[39] = _mm_cmple_epu64_mask (c, d); ++ f[40] = _mm_cmplt_epi32_mask (c, d); ++ f[41] = _mm_cmplt_epi64_mask (c, d); ++ f[42] = _mm_cmplt_epu32_mask (c, d); ++ f[43] = _mm_cmplt_epu64_mask (c, d); ++ f[44] = _mm_cmpneq_epi32_mask (c, d); ++ f[45] = _mm_cmpneq_epi64_mask (c, d); ++ f[46] = _mm_cmpneq_epu32_mask (c, d); ++ f[47] = _mm_cmpneq_epu64_mask (c, d); ++ f[48] = _mm_mask_cmpge_epi32_mask (e, c, d); ++ f[49] = _mm_mask_cmpge_epi64_mask (e, c, d); ++ f[50] = _mm_mask_cmpge_epu32_mask (e, c, d); ++ f[51] = _mm_mask_cmpge_epu64_mask (e, c, d); ++ f[52] = _mm_mask_cmple_epi32_mask (e, c, d); ++ f[53] = _mm_mask_cmple_epi64_mask (e, c, d); ++ f[54] = _mm_mask_cmple_epu32_mask (e, c, d); ++ f[55] = _mm_mask_cmple_epu64_mask (e, c, d); ++ f[56] = _mm_mask_cmplt_epi32_mask (e, c, d); ++ f[57] = _mm_mask_cmplt_epi64_mask (e, c, d); ++ f[58] = _mm_mask_cmplt_epu32_mask (e, c, d); ++ f[59] = _mm_mask_cmplt_epu64_mask (e, c, d); ++ f[60] = _mm_mask_cmpneq_epi32_mask (e, c, d); ++ f[61] = _mm_mask_cmpneq_epi64_mask (e, c, d); ++ f[62] = _mm_mask_cmpneq_epu32_mask (e, c, d); ++ f[63] = _mm_mask_cmpneq_epu64_mask (e, c, d); ++} diff --git a/gcc7-pr79941.patch b/gcc7-pr79941.patch new file mode 100644 index 0000000..24e4216 --- /dev/null +++ b/gcc7-pr79941.patch @@ -0,0 +1,92 @@ +2017-03-07 Will Schmidt + + PR middle-end/79941 + * config/rs6000/rs6000.c (gimplify_init_constructor): Remove multiply + even and multiply odd unsigned (vmule/vmulo) intrinsics from the + multiply folding sequence. + + * gcc.target/powerpc/fold-vec-mult-even_odd_misc.c: New test. + +--- gcc/config/rs6000/rs6000.c 2017-03-03 20:31:01.000000000 +0100 ++++ gcc/config/rs6000/rs6000.c 2017-03-08 18:52:48.409967121 +0100 +@@ -16855,9 +16855,6 @@ rs6000_gimple_fold_builtin (gimple_stmt_ + /* Even element flavors of vec_mul (signed). */ + case ALTIVEC_BUILTIN_VMULESB: + case ALTIVEC_BUILTIN_VMULESH: +- /* Even element flavors of vec_mul (unsigned). */ +- case ALTIVEC_BUILTIN_VMULEUB: +- case ALTIVEC_BUILTIN_VMULEUH: + { + arg0 = gimple_call_arg (stmt, 0); + arg1 = gimple_call_arg (stmt, 1); +@@ -16870,9 +16867,6 @@ rs6000_gimple_fold_builtin (gimple_stmt_ + /* Odd element flavors of vec_mul (signed). */ + case ALTIVEC_BUILTIN_VMULOSB: + case ALTIVEC_BUILTIN_VMULOSH: +- /* Odd element flavors of vec_mul (unsigned). */ +- case ALTIVEC_BUILTIN_VMULOUB: +- case ALTIVEC_BUILTIN_VMULOUH: + { + arg0 = gimple_call_arg (stmt, 0); + arg1 = gimple_call_arg (stmt, 1); +--- gcc/testsuite/gcc.target/powerpc/fold-vec-mult-even_odd_misc.c ++++ gcc/testsuite/gcc.target/powerpc/fold-vec-mult-even_odd_misc.c +@@ -0,0 +1,58 @@ ++ ++/* { dg-do run } */ ++/* { dg-require-effective-target powerpc_vsx_ok } */ ++/* { dg-options "-maltivec -mvsx -O2 -save-temps" } */ ++ ++#include ++ ++__attribute__((noinline)) void ++test_eub_char () ++{ ++ vector unsigned char v0 = {1, 0, 0, 0, 0, 0, 0, 0}; ++ vector unsigned char v1 = {0xff, 0, 0, 0, 0, 0, 0, 0}; ++ vector unsigned short res = vec_vmuleub (v0, v1); ++ if (res[0] != (unsigned short)v0[0] * (unsigned short)v1[0]) ++ __builtin_abort (); ++} ++__attribute__((noinline)) void ++test_oub_char () ++{ ++ vector unsigned char v0 = {0, 1, 0, 0, 0, 0, 0, 0}; ++ vector unsigned char v1 = {0, 0xff, 0, 0, 0, 0, 0, 0}; ++ vector unsigned short res = vec_vmuloub (v0, v1); ++ if (res[0] != (unsigned short)v0[1] * (unsigned short)v1[1]) ++ __builtin_abort (); ++} ++ ++__attribute__((noinline)) void ++test_euh_short () ++{ ++ vector unsigned short v0 = {1, 0, 0, 0}; ++ vector unsigned short v1 = {0xff, 0, 0, 0}; ++ vector unsigned int res = vec_vmuleuh (v0, v1); ++ if (res[0] != (unsigned int)v0[0] * (unsigned int)v1[0]) ++ __builtin_abort (); ++} ++__attribute__((noinline)) void ++test_ouh_short () ++{ ++ vector unsigned short v0 = {0, 1, 0, 0}; ++ vector unsigned short v1 = {0, 0xff, 0, 0}; ++ vector unsigned int res = vec_vmulouh (v0, v1); ++ if (res[0] != (unsigned int)v0[1] * (unsigned int)v1[1]) ++ __builtin_abort (); ++} ++ ++int main () ++{ ++ test_eub_char(); ++ test_oub_char(); ++ test_euh_short(); ++ test_ouh_short(); ++} ++ ++/* { dg-final { scan-assembler-times "vmuleub" 1 } } */ ++/* { dg-final { scan-assembler-times "vmuloub" 1 } } */ ++/* { dg-final { scan-assembler-times "vmuleuh" 1 } } */ ++/* { dg-final { scan-assembler-times "vmulouh" 1 } } */ ++ diff --git a/gcc7-pr79944.patch b/gcc7-pr79944.patch new file mode 100644 index 0000000..ffcc829 --- /dev/null +++ b/gcc7-pr79944.patch @@ -0,0 +1,406 @@ +2017-03-08 Jakub Jelinek + + PR sanitizer/79944 + * asan.c (get_mem_refs_of_builtin_call): For BUILT_IN_ATOMIC* and + BUILT_IN_SYNC*, determine the access type from the size suffix and + always build a MEM_REF with that type. Handle forgotten + BUILT_IN_SYNC_FETCH_AND_NAND_16 and BUILT_IN_SYNC_NAND_AND_FETCH_16. + + * c-c++-common/asan/pr79944.c: New test. + +--- gcc/asan.c.jj 2017-03-06 12:32:28.000000000 +0100 ++++ gcc/asan.c 2017-03-08 12:24:11.151353229 +0100 +@@ -603,218 +603,208 @@ get_mem_refs_of_builtin_call (const gcal + case BUILT_IN_STRLEN: + source0 = gimple_call_arg (call, 0); + len = gimple_call_lhs (call); +- break ; ++ break; + + /* And now the __atomic* and __sync builtins. + These are handled differently from the classical memory memory + access builtins above. */ + + case BUILT_IN_ATOMIC_LOAD_1: +- case BUILT_IN_ATOMIC_LOAD_2: +- case BUILT_IN_ATOMIC_LOAD_4: +- case BUILT_IN_ATOMIC_LOAD_8: +- case BUILT_IN_ATOMIC_LOAD_16: + is_store = false; +- /* fall through. */ +- ++ /* FALLTHRU */ + case BUILT_IN_SYNC_FETCH_AND_ADD_1: +- case BUILT_IN_SYNC_FETCH_AND_ADD_2: +- case BUILT_IN_SYNC_FETCH_AND_ADD_4: +- case BUILT_IN_SYNC_FETCH_AND_ADD_8: +- case BUILT_IN_SYNC_FETCH_AND_ADD_16: +- + case BUILT_IN_SYNC_FETCH_AND_SUB_1: +- case BUILT_IN_SYNC_FETCH_AND_SUB_2: +- case BUILT_IN_SYNC_FETCH_AND_SUB_4: +- case BUILT_IN_SYNC_FETCH_AND_SUB_8: +- case BUILT_IN_SYNC_FETCH_AND_SUB_16: +- + case BUILT_IN_SYNC_FETCH_AND_OR_1: +- case BUILT_IN_SYNC_FETCH_AND_OR_2: +- case BUILT_IN_SYNC_FETCH_AND_OR_4: +- case BUILT_IN_SYNC_FETCH_AND_OR_8: +- case BUILT_IN_SYNC_FETCH_AND_OR_16: +- + case BUILT_IN_SYNC_FETCH_AND_AND_1: +- case BUILT_IN_SYNC_FETCH_AND_AND_2: +- case BUILT_IN_SYNC_FETCH_AND_AND_4: +- case BUILT_IN_SYNC_FETCH_AND_AND_8: +- case BUILT_IN_SYNC_FETCH_AND_AND_16: +- + case BUILT_IN_SYNC_FETCH_AND_XOR_1: +- case BUILT_IN_SYNC_FETCH_AND_XOR_2: +- case BUILT_IN_SYNC_FETCH_AND_XOR_4: +- case BUILT_IN_SYNC_FETCH_AND_XOR_8: +- case BUILT_IN_SYNC_FETCH_AND_XOR_16: +- + case BUILT_IN_SYNC_FETCH_AND_NAND_1: +- case BUILT_IN_SYNC_FETCH_AND_NAND_2: +- case BUILT_IN_SYNC_FETCH_AND_NAND_4: +- case BUILT_IN_SYNC_FETCH_AND_NAND_8: +- + case BUILT_IN_SYNC_ADD_AND_FETCH_1: +- case BUILT_IN_SYNC_ADD_AND_FETCH_2: +- case BUILT_IN_SYNC_ADD_AND_FETCH_4: +- case BUILT_IN_SYNC_ADD_AND_FETCH_8: +- case BUILT_IN_SYNC_ADD_AND_FETCH_16: +- + case BUILT_IN_SYNC_SUB_AND_FETCH_1: +- case BUILT_IN_SYNC_SUB_AND_FETCH_2: +- case BUILT_IN_SYNC_SUB_AND_FETCH_4: +- case BUILT_IN_SYNC_SUB_AND_FETCH_8: +- case BUILT_IN_SYNC_SUB_AND_FETCH_16: +- + case BUILT_IN_SYNC_OR_AND_FETCH_1: +- case BUILT_IN_SYNC_OR_AND_FETCH_2: +- case BUILT_IN_SYNC_OR_AND_FETCH_4: +- case BUILT_IN_SYNC_OR_AND_FETCH_8: +- case BUILT_IN_SYNC_OR_AND_FETCH_16: +- + case BUILT_IN_SYNC_AND_AND_FETCH_1: +- case BUILT_IN_SYNC_AND_AND_FETCH_2: +- case BUILT_IN_SYNC_AND_AND_FETCH_4: +- case BUILT_IN_SYNC_AND_AND_FETCH_8: +- case BUILT_IN_SYNC_AND_AND_FETCH_16: +- + case BUILT_IN_SYNC_XOR_AND_FETCH_1: +- case BUILT_IN_SYNC_XOR_AND_FETCH_2: +- case BUILT_IN_SYNC_XOR_AND_FETCH_4: +- case BUILT_IN_SYNC_XOR_AND_FETCH_8: +- case BUILT_IN_SYNC_XOR_AND_FETCH_16: +- + case BUILT_IN_SYNC_NAND_AND_FETCH_1: +- case BUILT_IN_SYNC_NAND_AND_FETCH_2: +- case BUILT_IN_SYNC_NAND_AND_FETCH_4: +- case BUILT_IN_SYNC_NAND_AND_FETCH_8: +- + case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_1: +- case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2: +- case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4: +- case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8: +- case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16: +- + case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_1: +- case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2: +- case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4: +- case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8: +- case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16: +- + case BUILT_IN_SYNC_LOCK_TEST_AND_SET_1: +- case BUILT_IN_SYNC_LOCK_TEST_AND_SET_2: +- case BUILT_IN_SYNC_LOCK_TEST_AND_SET_4: +- case BUILT_IN_SYNC_LOCK_TEST_AND_SET_8: +- case BUILT_IN_SYNC_LOCK_TEST_AND_SET_16: +- + case BUILT_IN_SYNC_LOCK_RELEASE_1: +- case BUILT_IN_SYNC_LOCK_RELEASE_2: +- case BUILT_IN_SYNC_LOCK_RELEASE_4: +- case BUILT_IN_SYNC_LOCK_RELEASE_8: +- case BUILT_IN_SYNC_LOCK_RELEASE_16: +- + case BUILT_IN_ATOMIC_EXCHANGE_1: +- case BUILT_IN_ATOMIC_EXCHANGE_2: +- case BUILT_IN_ATOMIC_EXCHANGE_4: +- case BUILT_IN_ATOMIC_EXCHANGE_8: +- case BUILT_IN_ATOMIC_EXCHANGE_16: +- + case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_1: +- case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2: +- case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4: +- case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8: +- case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16: +- + case BUILT_IN_ATOMIC_STORE_1: +- case BUILT_IN_ATOMIC_STORE_2: +- case BUILT_IN_ATOMIC_STORE_4: +- case BUILT_IN_ATOMIC_STORE_8: +- case BUILT_IN_ATOMIC_STORE_16: +- + case BUILT_IN_ATOMIC_ADD_FETCH_1: +- case BUILT_IN_ATOMIC_ADD_FETCH_2: +- case BUILT_IN_ATOMIC_ADD_FETCH_4: +- case BUILT_IN_ATOMIC_ADD_FETCH_8: +- case BUILT_IN_ATOMIC_ADD_FETCH_16: +- + case BUILT_IN_ATOMIC_SUB_FETCH_1: +- case BUILT_IN_ATOMIC_SUB_FETCH_2: +- case BUILT_IN_ATOMIC_SUB_FETCH_4: +- case BUILT_IN_ATOMIC_SUB_FETCH_8: +- case BUILT_IN_ATOMIC_SUB_FETCH_16: +- + case BUILT_IN_ATOMIC_AND_FETCH_1: +- case BUILT_IN_ATOMIC_AND_FETCH_2: +- case BUILT_IN_ATOMIC_AND_FETCH_4: +- case BUILT_IN_ATOMIC_AND_FETCH_8: +- case BUILT_IN_ATOMIC_AND_FETCH_16: +- + case BUILT_IN_ATOMIC_NAND_FETCH_1: +- case BUILT_IN_ATOMIC_NAND_FETCH_2: +- case BUILT_IN_ATOMIC_NAND_FETCH_4: +- case BUILT_IN_ATOMIC_NAND_FETCH_8: +- case BUILT_IN_ATOMIC_NAND_FETCH_16: +- + case BUILT_IN_ATOMIC_XOR_FETCH_1: +- case BUILT_IN_ATOMIC_XOR_FETCH_2: +- case BUILT_IN_ATOMIC_XOR_FETCH_4: +- case BUILT_IN_ATOMIC_XOR_FETCH_8: +- case BUILT_IN_ATOMIC_XOR_FETCH_16: +- + case BUILT_IN_ATOMIC_OR_FETCH_1: +- case BUILT_IN_ATOMIC_OR_FETCH_2: +- case BUILT_IN_ATOMIC_OR_FETCH_4: +- case BUILT_IN_ATOMIC_OR_FETCH_8: +- case BUILT_IN_ATOMIC_OR_FETCH_16: +- + case BUILT_IN_ATOMIC_FETCH_ADD_1: +- case BUILT_IN_ATOMIC_FETCH_ADD_2: +- case BUILT_IN_ATOMIC_FETCH_ADD_4: +- case BUILT_IN_ATOMIC_FETCH_ADD_8: +- case BUILT_IN_ATOMIC_FETCH_ADD_16: +- + case BUILT_IN_ATOMIC_FETCH_SUB_1: +- case BUILT_IN_ATOMIC_FETCH_SUB_2: +- case BUILT_IN_ATOMIC_FETCH_SUB_4: +- case BUILT_IN_ATOMIC_FETCH_SUB_8: +- case BUILT_IN_ATOMIC_FETCH_SUB_16: +- + case BUILT_IN_ATOMIC_FETCH_AND_1: +- case BUILT_IN_ATOMIC_FETCH_AND_2: +- case BUILT_IN_ATOMIC_FETCH_AND_4: +- case BUILT_IN_ATOMIC_FETCH_AND_8: +- case BUILT_IN_ATOMIC_FETCH_AND_16: +- + case BUILT_IN_ATOMIC_FETCH_NAND_1: +- case BUILT_IN_ATOMIC_FETCH_NAND_2: +- case BUILT_IN_ATOMIC_FETCH_NAND_4: +- case BUILT_IN_ATOMIC_FETCH_NAND_8: +- case BUILT_IN_ATOMIC_FETCH_NAND_16: +- + case BUILT_IN_ATOMIC_FETCH_XOR_1: +- case BUILT_IN_ATOMIC_FETCH_XOR_2: +- case BUILT_IN_ATOMIC_FETCH_XOR_4: +- case BUILT_IN_ATOMIC_FETCH_XOR_8: +- case BUILT_IN_ATOMIC_FETCH_XOR_16: +- + case BUILT_IN_ATOMIC_FETCH_OR_1: ++ access_size = 1; ++ goto do_atomic; ++ ++ case BUILT_IN_ATOMIC_LOAD_2: ++ is_store = false; ++ /* FALLTHRU */ ++ case BUILT_IN_SYNC_FETCH_AND_ADD_2: ++ case BUILT_IN_SYNC_FETCH_AND_SUB_2: ++ case BUILT_IN_SYNC_FETCH_AND_OR_2: ++ case BUILT_IN_SYNC_FETCH_AND_AND_2: ++ case BUILT_IN_SYNC_FETCH_AND_XOR_2: ++ case BUILT_IN_SYNC_FETCH_AND_NAND_2: ++ case BUILT_IN_SYNC_ADD_AND_FETCH_2: ++ case BUILT_IN_SYNC_SUB_AND_FETCH_2: ++ case BUILT_IN_SYNC_OR_AND_FETCH_2: ++ case BUILT_IN_SYNC_AND_AND_FETCH_2: ++ case BUILT_IN_SYNC_XOR_AND_FETCH_2: ++ case BUILT_IN_SYNC_NAND_AND_FETCH_2: ++ case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_2: ++ case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_2: ++ case BUILT_IN_SYNC_LOCK_TEST_AND_SET_2: ++ case BUILT_IN_SYNC_LOCK_RELEASE_2: ++ case BUILT_IN_ATOMIC_EXCHANGE_2: ++ case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_2: ++ case BUILT_IN_ATOMIC_STORE_2: ++ case BUILT_IN_ATOMIC_ADD_FETCH_2: ++ case BUILT_IN_ATOMIC_SUB_FETCH_2: ++ case BUILT_IN_ATOMIC_AND_FETCH_2: ++ case BUILT_IN_ATOMIC_NAND_FETCH_2: ++ case BUILT_IN_ATOMIC_XOR_FETCH_2: ++ case BUILT_IN_ATOMIC_OR_FETCH_2: ++ case BUILT_IN_ATOMIC_FETCH_ADD_2: ++ case BUILT_IN_ATOMIC_FETCH_SUB_2: ++ case BUILT_IN_ATOMIC_FETCH_AND_2: ++ case BUILT_IN_ATOMIC_FETCH_NAND_2: ++ case BUILT_IN_ATOMIC_FETCH_XOR_2: + case BUILT_IN_ATOMIC_FETCH_OR_2: ++ access_size = 2; ++ goto do_atomic; ++ ++ case BUILT_IN_ATOMIC_LOAD_4: ++ is_store = false; ++ /* FALLTHRU */ ++ case BUILT_IN_SYNC_FETCH_AND_ADD_4: ++ case BUILT_IN_SYNC_FETCH_AND_SUB_4: ++ case BUILT_IN_SYNC_FETCH_AND_OR_4: ++ case BUILT_IN_SYNC_FETCH_AND_AND_4: ++ case BUILT_IN_SYNC_FETCH_AND_XOR_4: ++ case BUILT_IN_SYNC_FETCH_AND_NAND_4: ++ case BUILT_IN_SYNC_ADD_AND_FETCH_4: ++ case BUILT_IN_SYNC_SUB_AND_FETCH_4: ++ case BUILT_IN_SYNC_OR_AND_FETCH_4: ++ case BUILT_IN_SYNC_AND_AND_FETCH_4: ++ case BUILT_IN_SYNC_XOR_AND_FETCH_4: ++ case BUILT_IN_SYNC_NAND_AND_FETCH_4: ++ case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_4: ++ case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_4: ++ case BUILT_IN_SYNC_LOCK_TEST_AND_SET_4: ++ case BUILT_IN_SYNC_LOCK_RELEASE_4: ++ case BUILT_IN_ATOMIC_EXCHANGE_4: ++ case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_4: ++ case BUILT_IN_ATOMIC_STORE_4: ++ case BUILT_IN_ATOMIC_ADD_FETCH_4: ++ case BUILT_IN_ATOMIC_SUB_FETCH_4: ++ case BUILT_IN_ATOMIC_AND_FETCH_4: ++ case BUILT_IN_ATOMIC_NAND_FETCH_4: ++ case BUILT_IN_ATOMIC_XOR_FETCH_4: ++ case BUILT_IN_ATOMIC_OR_FETCH_4: ++ case BUILT_IN_ATOMIC_FETCH_ADD_4: ++ case BUILT_IN_ATOMIC_FETCH_SUB_4: ++ case BUILT_IN_ATOMIC_FETCH_AND_4: ++ case BUILT_IN_ATOMIC_FETCH_NAND_4: ++ case BUILT_IN_ATOMIC_FETCH_XOR_4: + case BUILT_IN_ATOMIC_FETCH_OR_4: ++ access_size = 4; ++ goto do_atomic; ++ ++ case BUILT_IN_ATOMIC_LOAD_8: ++ is_store = false; ++ /* FALLTHRU */ ++ case BUILT_IN_SYNC_FETCH_AND_ADD_8: ++ case BUILT_IN_SYNC_FETCH_AND_SUB_8: ++ case BUILT_IN_SYNC_FETCH_AND_OR_8: ++ case BUILT_IN_SYNC_FETCH_AND_AND_8: ++ case BUILT_IN_SYNC_FETCH_AND_XOR_8: ++ case BUILT_IN_SYNC_FETCH_AND_NAND_8: ++ case BUILT_IN_SYNC_ADD_AND_FETCH_8: ++ case BUILT_IN_SYNC_SUB_AND_FETCH_8: ++ case BUILT_IN_SYNC_OR_AND_FETCH_8: ++ case BUILT_IN_SYNC_AND_AND_FETCH_8: ++ case BUILT_IN_SYNC_XOR_AND_FETCH_8: ++ case BUILT_IN_SYNC_NAND_AND_FETCH_8: ++ case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_8: ++ case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_8: ++ case BUILT_IN_SYNC_LOCK_TEST_AND_SET_8: ++ case BUILT_IN_SYNC_LOCK_RELEASE_8: ++ case BUILT_IN_ATOMIC_EXCHANGE_8: ++ case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_8: ++ case BUILT_IN_ATOMIC_STORE_8: ++ case BUILT_IN_ATOMIC_ADD_FETCH_8: ++ case BUILT_IN_ATOMIC_SUB_FETCH_8: ++ case BUILT_IN_ATOMIC_AND_FETCH_8: ++ case BUILT_IN_ATOMIC_NAND_FETCH_8: ++ case BUILT_IN_ATOMIC_XOR_FETCH_8: ++ case BUILT_IN_ATOMIC_OR_FETCH_8: ++ case BUILT_IN_ATOMIC_FETCH_ADD_8: ++ case BUILT_IN_ATOMIC_FETCH_SUB_8: ++ case BUILT_IN_ATOMIC_FETCH_AND_8: ++ case BUILT_IN_ATOMIC_FETCH_NAND_8: ++ case BUILT_IN_ATOMIC_FETCH_XOR_8: + case BUILT_IN_ATOMIC_FETCH_OR_8: ++ access_size = 8; ++ goto do_atomic; ++ ++ case BUILT_IN_ATOMIC_LOAD_16: ++ is_store = false; ++ /* FALLTHRU */ ++ case BUILT_IN_SYNC_FETCH_AND_ADD_16: ++ case BUILT_IN_SYNC_FETCH_AND_SUB_16: ++ case BUILT_IN_SYNC_FETCH_AND_OR_16: ++ case BUILT_IN_SYNC_FETCH_AND_AND_16: ++ case BUILT_IN_SYNC_FETCH_AND_XOR_16: ++ case BUILT_IN_SYNC_FETCH_AND_NAND_16: ++ case BUILT_IN_SYNC_ADD_AND_FETCH_16: ++ case BUILT_IN_SYNC_SUB_AND_FETCH_16: ++ case BUILT_IN_SYNC_OR_AND_FETCH_16: ++ case BUILT_IN_SYNC_AND_AND_FETCH_16: ++ case BUILT_IN_SYNC_XOR_AND_FETCH_16: ++ case BUILT_IN_SYNC_NAND_AND_FETCH_16: ++ case BUILT_IN_SYNC_BOOL_COMPARE_AND_SWAP_16: ++ case BUILT_IN_SYNC_VAL_COMPARE_AND_SWAP_16: ++ case BUILT_IN_SYNC_LOCK_TEST_AND_SET_16: ++ case BUILT_IN_SYNC_LOCK_RELEASE_16: ++ case BUILT_IN_ATOMIC_EXCHANGE_16: ++ case BUILT_IN_ATOMIC_COMPARE_EXCHANGE_16: ++ case BUILT_IN_ATOMIC_STORE_16: ++ case BUILT_IN_ATOMIC_ADD_FETCH_16: ++ case BUILT_IN_ATOMIC_SUB_FETCH_16: ++ case BUILT_IN_ATOMIC_AND_FETCH_16: ++ case BUILT_IN_ATOMIC_NAND_FETCH_16: ++ case BUILT_IN_ATOMIC_XOR_FETCH_16: ++ case BUILT_IN_ATOMIC_OR_FETCH_16: ++ case BUILT_IN_ATOMIC_FETCH_ADD_16: ++ case BUILT_IN_ATOMIC_FETCH_SUB_16: ++ case BUILT_IN_ATOMIC_FETCH_AND_16: ++ case BUILT_IN_ATOMIC_FETCH_NAND_16: ++ case BUILT_IN_ATOMIC_FETCH_XOR_16: + case BUILT_IN_ATOMIC_FETCH_OR_16: ++ access_size = 16; ++ /* FALLTHRU */ ++ do_atomic: + { + dest = gimple_call_arg (call, 0); + /* DEST represents the address of a memory location. + instrument_derefs wants the memory location, so lets + dereference the address DEST before handing it to + instrument_derefs. */ +- if (TREE_CODE (dest) == ADDR_EXPR) +- dest = TREE_OPERAND (dest, 0); +- else if (TREE_CODE (dest) == SSA_NAME || TREE_CODE (dest) == INTEGER_CST) +- dest = build2 (MEM_REF, TREE_TYPE (TREE_TYPE (dest)), +- dest, build_int_cst (TREE_TYPE (dest), 0)); +- else +- gcc_unreachable (); +- +- access_size = int_size_in_bytes (TREE_TYPE (dest)); ++ tree type = build_nonstandard_integer_type (access_size ++ * BITS_PER_UNIT, 1); ++ dest = build2 (MEM_REF, type, dest, ++ build_int_cst (build_pointer_type (char_type_node), 0)); ++ break; + } + + default: +--- gcc/testsuite/c-c++-common/asan/pr79944.c.jj 2017-03-08 12:50:40.428617273 +0100 ++++ gcc/testsuite/c-c++-common/asan/pr79944.c 2017-03-08 12:34:47.000000000 +0100 +@@ -0,0 +1,18 @@ ++/* PR sanitizer/79944 */ ++/* { dg-do run } */ ++ ++struct S { int i; char p[1024]; }; ++ ++int ++main () ++{ ++ struct S *p = (struct S *) __builtin_malloc (__builtin_offsetof (struct S, p) + 64); ++ p->i = 5; ++ asm volatile ("" : "+r" (p) : : "memory"); ++ __atomic_fetch_add ((int *) p, 5, __ATOMIC_RELAXED); ++ asm volatile ("" : "+r" (p) : : "memory"); ++ if (p->i != 10) ++ __builtin_abort (); ++ __builtin_free (p); ++ return 0; ++} diff --git a/nvptx-tools-no-ptxas.patch b/nvptx-tools-no-ptxas.patch index f3bd5ed..28bc597 100644 --- a/nvptx-tools-no-ptxas.patch +++ b/nvptx-tools-no-ptxas.patch @@ -211,13 +211,12 @@ break; case 'v': verbose = true; -@@ -948,7 +1071,9 @@ Usage: nvptx-none-as [option...] [asmfile]\n\ +@@ -948,7 +1071,8 @@ Usage: nvptx-none-as [option...] [asmfile]\n\ Options:\n\ -o FILE Write output to FILE\n\ -v Be verbose\n\ + --verify Do verify output is acceptable to ptxas\n\ --no-verify Do not verify output is acceptable to ptxas\n\ -+ --verify Do verify output is acceptable to ptxas\n\ --help Print this help and exit\n\ --version Print version number and exit\n\ \n\ diff --git a/sources b/sources index 0c3d927..fc2bdf0 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (gcc-7.0.1-20170225.tar.bz2) = de6413101567ede96422f49d007c4072314ace58bf09886949858c315df54e8480289967cdf70636a4469a21705c6cddced9ff85c950eef6fd9e6fcad2533be0 +SHA512 (gcc-7.0.1-20170308.tar.bz2) = 8fdadf218ac0d50107516cd9ea72ac03606b79db44f7a3d1fe665d1f1c51b7a54c5f37df3f6af9ab070de1b3990989745762ce4d3c2a4aa4d12bdfe29fe00dcd SHA512 (nvptx-newlib-aadc8eb0ec43b7cd0dd2dfb484bae63c8b05ef24.tar.bz2) = 38f97c9297ad108568352a4d28277455a3c01fd8b7864e798037e5006b6f757022e874bbf3f165775fe3b873781bc108137bbeb42dd5ed3c7d3e6747746fa918 SHA512 (nvptx-tools-c28050f60193b3b95a18866a96f03334e874e78f.tar.bz2) = 95b577a06a93bb044dbc8033e550cb36bcf2ab2687da030a7318cdc90e7467ed49665e247dcafb5ff4a7e92cdc264291d19728bd17fab902fb64b22491269330