PR target/59163
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 4 Dec 2013 11:12:04 +0000 (11:12 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 4 Dec 2013 11:12:04 +0000 (11:12 +0000)
* config/i386/i386.c (ix86_legitimate_combined_insn): If for
!TARGET_AVX there is misaligned MEM operand with vector mode
and get_attr_ssememalign is 0, return false.
(ix86_expand_special_args_builtin): Add get_pointer_alignment
computed alignment and for non-temporal loads/stores also
at least GET_MODE_ALIGNMENT as MEM_ALIGN.
* config/i386/sse.md
(<sse>_loadu<ssemodesuffix><avxsizesuffix><mask_name>,
<sse>_storeu<ssemodesuffix><avxsizesuffix>,
<sse2_avx_avx512f>_loaddqu<mode><mask_name>,
<sse2_avx_avx512f>_storedqu<mode>, <sse3>_lddqu<avxsizesuffix>,
sse_vmrcpv4sf2, sse_vmrsqrtv4sf2, sse2_cvtdq2pd, sse_movhlps,
sse_movlhps, sse_storehps, sse_loadhps, sse_loadlps,
*vec_interleave_highv2df, *vec_interleave_lowv2df,
*vec_extractv2df_1_sse, sse2_movsd, sse4_1_<code>v8qiv8hi2,
sse4_1_<code>v4qiv4si2, sse4_1_<code>v4hiv4si2,
sse4_1_<code>v2qiv2di2, sse4_1_<code>v2hiv2di2,
sse4_1_<code>v2siv2di2, sse4_2_pcmpestr, *sse4_2_pcmpestr_unaligned,
sse4_2_pcmpestri, sse4_2_pcmpestrm, sse4_2_pcmpestr_cconly,
sse4_2_pcmpistr, *sse4_2_pcmpistr_unaligned, sse4_2_pcmpistri,
sse4_2_pcmpistrm, sse4_2_pcmpistr_cconly): Add ssememalign attribute.
* config/i386/i386.md (ssememalign): New define_attr.

* g++.dg/torture/pr59163.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@205663 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/i386/i386.c

index f9b06d1..7bf8c1e 100644 (file)
@@ -32649,7 +32649,7 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
             on it.  Try to improve it using get_pointer_alignment,
             and if the special builtin is one that requires strict
             mode alignment, also from it's GET_MODE_ALIGNMENT.
-            Failure to do so could leak to ix86_legitimate_combined_insn
+            Failure to do so could lead to ix86_legitimate_combined_insn
             rejecting all changes to such insns.  */
          unsigned int align = get_pointer_alignment (arg);
          if (aligned_mem && align < GET_MODE_ALIGNMENT (tmode))
@@ -32705,7 +32705,7 @@ ix86_expand_special_args_builtin (const struct builtin_description *d,
                 on it.  Try to improve it using get_pointer_alignment,
                 and if the special builtin is one that requires strict
                 mode alignment, also from it's GET_MODE_ALIGNMENT.
-                Failure to do so could leak to ix86_legitimate_combined_insn
+                Failure to do so could lead to ix86_legitimate_combined_insn
                 rejecting all changes to such insns.  */
              unsigned int align = get_pointer_alignment (arg);
              if (aligned_mem && align < GET_MODE_ALIGNMENT (mode))