re PR target/58853 (ICE in expand_set_or_movmem_prologue_epilogue_by_misaligned_moves)
authorUros Bizjak <ubizjak@gmail.com>
Mon, 11 Nov 2013 20:02:19 +0000 (21:02 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 11 Nov 2013 20:02:19 +0000 (21:02 +0100)
PR target/58853
* config/i386/x86-tune.def
(X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES): Rename from
TARGET_MISALIGNED_MOVE_STRING_PROLOGUES.
* config/i386/i386.h
(TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES): Rename from
TARGET_MISALIGNED_MOVE_STRING_PROLOGUES_EPILOGUES.  Update for renamed
X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES.
* config/i386/i386.c (ix86_expand_set_or_movmem): Use
TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES to calculate
misaligned_prologue_used.  Check that
desired_aling <= epilogue_size_needed.

testsuite/ChangeLog:

PR target/58853
* gcc.target/i386/pr58853.c: New test.

Co-Authored-By: H.J. Lu <hongjiu.lu@intel.com>
From-SVN: r204685

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/config/i386/i386.h
gcc/config/i386/x86-tune.def
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr58853.c [new file with mode: 0644]

index b8f5df4..a140a62 100644 (file)
@@ -1,3 +1,19 @@
+2013-11-11  Uros Bizjak  <ubizjak@gmail.com>
+           H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/58853
+       * config/i386/x86-tune.def
+       (X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES): Rename from
+       TARGET_MISALIGNED_MOVE_STRING_PROLOGUES.
+       * config/i386/i386.h
+       (TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES): Rename from
+       TARGET_MISALIGNED_MOVE_STRING_PROLOGUES_EPILOGUES.  Update for renamed
+       X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES.
+       * config/i386/i386.c (ix86_expand_set_or_movmem): Use
+       TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES to calculate
+       misaligned_prologue_used.  Check that
+       desired_aling <= epilogue_size_needed.
+
 2013-11-11  Cong Hou  <congh@google.com>
 
        PR tree-optimization/59050
index 430d562..8b8cdfa 100644 (file)
@@ -23761,13 +23761,15 @@ ix86_expand_set_or_movmem (rtx dst, rtx src, rtx count_exp, rtx val_exp,
     }
   gcc_assert (desired_align >= 1 && align >= 1);
 
-  /* Misaligned move sequences handles both prologues and epilogues at once.
-     Default code generation results in smaller code for large alignments and
-     also avoids redundant job when sizes are known precisely.  */
-  misaligned_prologue_used = (TARGET_MISALIGNED_MOVE_STRING_PROLOGUES
-                             && MAX (desired_align, epilogue_size_needed) <= 32
-                             && ((desired_align > align && !align_bytes)
-                                 || (!count && epilogue_size_needed > 1)));
+  /* Misaligned move sequences handle both prologue and epilogue at once.
+     Default code generation results in a smaller code for large alignments
+     and also avoids redundant job when sizes are known precisely.  */
+  misaligned_prologue_used
+    = (TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES
+       && MAX (desired_align, epilogue_size_needed) <= 32
+       && desired_align <= epilogue_size_needed
+       && ((desired_align > align && !align_bytes)
+          || (!count && epilogue_size_needed > 1)));
 
   /* Do the cheap promotion to allow better CSE across the
      main loop and epilogue (ie one load of the big constant in the
index 9836a40..123e3fa 100644 (file)
@@ -353,8 +353,8 @@ extern unsigned char ix86_tune_features[X86_TUNE_LAST];
 #define TARGET_PROMOTE_QImode  ix86_tune_features[X86_TUNE_PROMOTE_QIMODE]
 #define TARGET_FAST_PREFIX     ix86_tune_features[X86_TUNE_FAST_PREFIX]
 #define TARGET_SINGLE_STRINGOP ix86_tune_features[X86_TUNE_SINGLE_STRINGOP]
-#define TARGET_MISALIGNED_MOVE_STRING_PROLOGUES_EPILOGUES \
-       ix86_tune_features[TARGET_MISALIGNED_MOVE_STRING_PROLOGUES]
+#define TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES \
+       ix86_tune_features[X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES]
 #define TARGET_QIMODE_MATH     ix86_tune_features[X86_TUNE_QIMODE_MATH]
 #define TARGET_HIMODE_MATH     ix86_tune_features[X86_TUNE_HIMODE_MATH]
 #define TARGET_PROMOTE_QI_REGS ix86_tune_features[X86_TUNE_PROMOTE_QI_REGS]
index 1a85ce2..23879f9 100644 (file)
@@ -257,13 +257,13 @@ DEF_TUNE (X86_TUNE_AVOID_MEM_OPND_FOR_CMOVE, "avoid_mem_opnd_for_cmove",
    as MOVS and STOS (without a REP prefix) to move/set sequences of bytes.  */
 DEF_TUNE (X86_TUNE_SINGLE_STRINGOP, "single_stringop", m_386 | m_P4_NOCONA)
 
-/* TARGET_MISALIGNED_MOVE_STRING_PROLOGUES: Enable generation of compace
-   prologues and epilogues by issuing a misaligned moves.  This require
-   target to handle misaligned moves and partial memory stalls resonably
-   well.  
-   FIXME: This actualy may be a win on more targets than listed here.  */
-DEF_TUNE (TARGET_MISALIGNED_MOVE_STRING_PROLOGUES,
-         "misaligned_move_string_prologues",
+/* X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES: Enable generation of
+   compact prologues and epilogues by issuing a misaligned moves.  This
+   requires target to handle misaligned moves and partial memory stalls
+   reasonably well.
+   FIXME: This may actualy be a win on more targets than listed here.  */
+DEF_TUNE (X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES,
+         "misaligned_move_string_pro_epilogues",
          m_386 | m_486 | m_CORE_ALL | m_AMD_MULTIPLE | m_GENERIC)
 
 /* X86_TUNE_USE_SAHF: Controls use of SAHF.  */
index f58ee48..74a2d56 100644 (file)
@@ -1,3 +1,8 @@
+2013-11-11  Uros Bizjak  <ubizjak@gmail.com>
+
+       PR target/58853
+       * gcc.target/i386/pr58853.c: New test.
+
 2013-11-11  Joern Rennecke  <joern.rennecke@embecosm.com>
 
        * gcc.dg/tree-ssa/forwprop-28.c: Adjust for ARC
diff --git a/gcc/testsuite/gcc.target/i386/pr58853.c b/gcc/testsuite/gcc.target/i386/pr58853.c
new file mode 100644 (file)
index 0000000..046da8b
--- /dev/null
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-minline-all-stringops" } */
+/* { dg-additional-options "-mtune=pentiumpro" { target { ia32 } } } */
+
+void
+my_memcpy (char *dest, const char *src, int n)
+{
+  __builtin_memcpy (dest, src, n);
+}