On Fri, Jan 8, 2016 at 12:20 PM, Jakub Jelinek <ja...@redhat.com> wrote: > Hi! > > This patch fixes > FAIL: gcc.target/i386/avx512vl-vmovapd-1.c scan-assembler-times vmovapd[ > \\\\t]+[^{\\n]*%xmm[0-9]+[^\\n]*\\\\){%k[1-7]}(?:\\n|[ \\\\t]+#) 1 > FAIL: gcc.target/i386/avx512vl-vmovapd-1.c scan-assembler-times vmovapd[ > \\\\t]+[^{\\n]*%ymm[0-9]+[^\\n]*\\\\){%k[1-7]}(?:\\n|[ \\\\t]+#) 1 > FAIL: gcc.target/i386/avx512vl-vmovaps-1.c scan-assembler-times vmovaps[ > \\\\t]+[^{\\n]*%xmm[0-9]+[^\\n]*\\\\){%k[1-7]}(?:\\n|[ \\\\t]+#) 1 > FAIL: gcc.target/i386/avx512vl-vmovaps-1.c scan-assembler-times vmovaps[ > \\\\t]+[^{\\n]*%ymm[0-9]+[^\\n]*\\\\){%k[1-7]}(?:\\n|[ \\\\t]+#) 1 > regressions that were introduced recently by fixing up the masked store check > for misalignment. > The problem is that for v2df/v4df/v4sf/v8sf masked stores > ix86_expand_special_args_builtin > failed to set aligned_mem and thus didn't set correct memory alignment. > > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > >
gcc.target/i386/avx512vl-vmovapd-1.c has --- include <immintrin.h> double *p; volatile __m256d yy, y2; volatile __m128d xx, x2; volatile __mmask8 m; void extern avx512vl_test (void) { yy = _mm256_mask_mov_pd (yy, m, y2); xx = _mm_mask_mov_pd (xx, m, x2); yy = _mm256_maskz_mov_pd (m, y2); xx = _mm_maskz_mov_pd (m, x2); yy = _mm256_mask_load_pd (yy, m, p); xx = _mm_mask_load_pd (xx, m, p); yy = _mm256_maskz_load_pd (m, p); xx = _mm_maskz_load_pd (m, p); _mm256_mask_store_pd (p, m, yy); _mm_mask_store_pd (p, m, xx); } --- 'p' is misaligned. Why should we change its alignment? H.J.