re PR target/58853 (ICE in expand_set_or_movmem_prologue_epilogue_by_misaligned_moves)
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
This commit is contained in:
parent
eb47f18904
commit
5783ad0ea7
|
@ -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>
|
2013-11-11 Cong Hou <congh@google.com>
|
||||||
|
|
||||||
PR tree-optimization/59050
|
PR tree-optimization/59050
|
||||||
|
|
|
@ -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);
|
gcc_assert (desired_align >= 1 && align >= 1);
|
||||||
|
|
||||||
/* Misaligned move sequences handles both prologues and epilogues at once.
|
/* Misaligned move sequences handle both prologue and epilogue at once.
|
||||||
Default code generation results in smaller code for large alignments and
|
Default code generation results in a smaller code for large alignments
|
||||||
also avoids redundant job when sizes are known precisely. */
|
and also avoids redundant job when sizes are known precisely. */
|
||||||
misaligned_prologue_used = (TARGET_MISALIGNED_MOVE_STRING_PROLOGUES
|
misaligned_prologue_used
|
||||||
&& MAX (desired_align, epilogue_size_needed) <= 32
|
= (TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES
|
||||||
&& ((desired_align > align && !align_bytes)
|
&& MAX (desired_align, epilogue_size_needed) <= 32
|
||||||
|| (!count && epilogue_size_needed > 1)));
|
&& 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
|
/* Do the cheap promotion to allow better CSE across the
|
||||||
main loop and epilogue (ie one load of the big constant in the
|
main loop and epilogue (ie one load of the big constant in the
|
||||||
|
|
|
@ -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_PROMOTE_QImode ix86_tune_features[X86_TUNE_PROMOTE_QIMODE]
|
||||||
#define TARGET_FAST_PREFIX ix86_tune_features[X86_TUNE_FAST_PREFIX]
|
#define TARGET_FAST_PREFIX ix86_tune_features[X86_TUNE_FAST_PREFIX]
|
||||||
#define TARGET_SINGLE_STRINGOP ix86_tune_features[X86_TUNE_SINGLE_STRINGOP]
|
#define TARGET_SINGLE_STRINGOP ix86_tune_features[X86_TUNE_SINGLE_STRINGOP]
|
||||||
#define TARGET_MISALIGNED_MOVE_STRING_PROLOGUES_EPILOGUES \
|
#define TARGET_MISALIGNED_MOVE_STRING_PRO_EPILOGUES \
|
||||||
ix86_tune_features[TARGET_MISALIGNED_MOVE_STRING_PROLOGUES]
|
ix86_tune_features[X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES]
|
||||||
#define TARGET_QIMODE_MATH ix86_tune_features[X86_TUNE_QIMODE_MATH]
|
#define TARGET_QIMODE_MATH ix86_tune_features[X86_TUNE_QIMODE_MATH]
|
||||||
#define TARGET_HIMODE_MATH ix86_tune_features[X86_TUNE_HIMODE_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]
|
#define TARGET_PROMOTE_QI_REGS ix86_tune_features[X86_TUNE_PROMOTE_QI_REGS]
|
||||||
|
|
|
@ -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. */
|
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)
|
DEF_TUNE (X86_TUNE_SINGLE_STRINGOP, "single_stringop", m_386 | m_P4_NOCONA)
|
||||||
|
|
||||||
/* TARGET_MISALIGNED_MOVE_STRING_PROLOGUES: Enable generation of compace
|
/* X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES: Enable generation of
|
||||||
prologues and epilogues by issuing a misaligned moves. This require
|
compact prologues and epilogues by issuing a misaligned moves. This
|
||||||
target to handle misaligned moves and partial memory stalls resonably
|
requires target to handle misaligned moves and partial memory stalls
|
||||||
well.
|
reasonably well.
|
||||||
FIXME: This actualy may be a win on more targets than listed here. */
|
FIXME: This may actualy be a win on more targets than listed here. */
|
||||||
DEF_TUNE (TARGET_MISALIGNED_MOVE_STRING_PROLOGUES,
|
DEF_TUNE (X86_TUNE_MISALIGNED_MOVE_STRING_PRO_EPILOGUES,
|
||||||
"misaligned_move_string_prologues",
|
"misaligned_move_string_pro_epilogues",
|
||||||
m_386 | m_486 | m_CORE_ALL | m_AMD_MULTIPLE | m_GENERIC)
|
m_386 | m_486 | m_CORE_ALL | m_AMD_MULTIPLE | m_GENERIC)
|
||||||
|
|
||||||
/* X86_TUNE_USE_SAHF: Controls use of SAHF. */
|
/* X86_TUNE_USE_SAHF: Controls use of SAHF. */
|
||||||
|
|
|
@ -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>
|
2013-11-11 Joern Rennecke <joern.rennecke@embecosm.com>
|
||||||
|
|
||||||
* gcc.dg/tree-ssa/forwprop-28.c: Adjust for ARC
|
* gcc.dg/tree-ssa/forwprop-28.c: Adjust for ARC
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
Loading…
Reference in New Issue