pr49089: enable avx256 splitting unaligned load/store only when beneficial
authorChangpeng Fang <changpeng.fang@amd.com>
Mon, 20 Jun 2011 21:52:32 +0000 (21:52 +0000)
committerChangpeng Fang <cfang@gcc.gnu.org>
Mon, 20 Jun 2011 21:52:32 +0000 (21:52 +0000)
* config/i386/i386.c (avx256_split_unaligned_load): New definition.
(avx256_split_unaligned_store): New definition.
(ix86_option_override_internal): Enable avx256 unaligned load/store
splitting only when avx256_split_unaligned_load/store is set.

From-SVN: r175230

gcc/ChangeLog
gcc/config/i386/i386.c

index 59300e5..361b584 100644 (file)
@@ -1,3 +1,11 @@
+2011-06-20  Changpeng Fang <changpeng.fang@amd.com>
+
+        PR i386/49089
+       * config/i386/i386.c (avx256_split_unaligned_load): New definition.
+       (avx256_split_unaligned_store): New definition.
+       (ix86_option_override_internal): Enable avx256 unaligned load/store
+       splitting only when avx256_split_unaligned_load/store is set.
+
 2011-06-20  Bernd Schmidt  <bernds@codesourcery.com>
 
        * regrename.c (scan_rtx_reg): Handle the case where we write to an
index 6029010..014401b 100644 (file)
@@ -2122,6 +2122,12 @@ static const unsigned int x86_arch_always_fancy_math_387
   = m_PENT | m_ATOM | m_PPRO | m_AMD_MULTIPLE | m_PENT4
     | m_NOCONA | m_CORE2I7 | m_GENERIC;
 
+static const unsigned int x86_avx256_split_unaligned_load
+  = m_COREI7 | m_GENERIC;
+
+static const unsigned int x86_avx256_split_unaligned_store
+  = m_COREI7 | m_BDVER1 | m_GENERIC;
+
 /* In case the average insn count for single function invocation is
    lower than this constant, emit fast (but longer) prologue and
    epilogue code.  */
@@ -3660,9 +3666,11 @@ ix86_option_override_internal (bool main_args_p)
          if (flag_expensive_optimizations
              && !(target_flags_explicit & MASK_VZEROUPPER))
            target_flags |= MASK_VZEROUPPER;
-         if (!(target_flags_explicit & MASK_AVX256_SPLIT_UNALIGNED_LOAD))
+         if ((x86_avx256_split_unaligned_load & ix86_tune_mask)
+             && !(target_flags_explicit & MASK_AVX256_SPLIT_UNALIGNED_LOAD))
            target_flags |= MASK_AVX256_SPLIT_UNALIGNED_LOAD;
-         if (!(target_flags_explicit & MASK_AVX256_SPLIT_UNALIGNED_STORE))
+         if ((x86_avx256_split_unaligned_store & ix86_tune_mask)
+             && !(target_flags_explicit & MASK_AVX256_SPLIT_UNALIGNED_STORE))
            target_flags |= MASK_AVX256_SPLIT_UNALIGNED_STORE;
        }
     }