From 5783ad0ea7403304e4ea9c06818373a3bc7e62b1 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Mon, 11 Nov 2013 21:02:19 +0100 Subject: [PATCH] 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 From-SVN: r204685 --- gcc/ChangeLog | 16 ++++++++++++++++ gcc/config/i386/i386.c | 16 +++++++++------- gcc/config/i386/i386.h | 4 ++-- gcc/config/i386/x86-tune.def | 14 +++++++------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.target/i386/pr58853.c | 9 +++++++++ 6 files changed, 48 insertions(+), 16 deletions(-) create mode 100644 gcc/testsuite/gcc.target/i386/pr58853.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b8f5df44..a140a62 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,19 @@ +2013-11-11 Uros Bizjak + H.J. Lu + + 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 PR tree-optimization/59050 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 430d562..8b8cdfae 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 9836a40..123e3fa 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 1a85ce2..23879f9 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 f58ee48..74a2d56 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-11-11 Uros Bizjak + + PR target/58853 + * gcc.target/i386/pr58853.c: New test. + 2013-11-11 Joern Rennecke * 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 0000000..046da8b --- /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); +} -- 2.7.4