summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-11 20:02:19 +0000
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2013-11-11 20:02:19 +0000
commit4151af9b5c45b22b609e34fefab91881d13d6e48 (patch)
tree751c66d387964afc5ded5eb70600325d74f8b33e
parent6648bb2d69710600eaa86073b6996b872e1b0179 (diff)
downloadgcc-4151af9b5c45b22b609e34fefab91881d13d6e48.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@204685 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog16
-rw-r--r--gcc/config/i386/i386.c16
-rw-r--r--gcc/config/i386/i386.h4
-rw-r--r--gcc/config/i386/x86-tune.def14
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr58853.c9
6 files changed, 48 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b8f5df447e2..a140a62851a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 430d5620234..8b8cdfae681 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -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
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 9836a40b46c..123e3faed4b 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -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]
diff --git a/gcc/config/i386/x86-tune.def b/gcc/config/i386/x86-tune.def
index 1a85ce266df..23879f9ec18 100644
--- a/gcc/config/i386/x86-tune.def
+++ b/gcc/config/i386/x86-tune.def
@@ -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. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f58ee48a2d8..74a2d56622e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 00000000000..046da8bee5f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr58853.c
@@ -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);
+}