Commit 930b700b by Michael Zolotukhin Committed by Kirill Yukhin

i386-opts.h (enum stringop_alg): Add vector_loop.

ChangeLog:
        * config/i386/i386-opts.h (enum stringop_alg): Add vector_loop.
        * config/i386/i386.c (expand_set_or_movmem_via_loop): Use
        adjust_address instead of change_address to keep info about alignment.
        (emit_strmov): Remove.
        (emit_memmov): New function.
        (expand_movmem_epilogue): Refactor to properly handle bigger sizes.
        (expand_movmem_epilogue): Likewise and return updated rtx for
        destination.
        (expand_constant_movmem_prologue): Likewise and return updated rtx for
        destination and source.
        (decide_alignment): Refactor, handle vector_loop.
        (ix86_expand_movmem): Likewise.
        (ix86_expand_setmem): Likewise.
        * config/i386/i386.opt (Enum): Add vector_loop to option stringop_alg.

testsuite/ChangeLog:
        * gcc.target/i386/memcpy-vector_loop-1.c: New.
        * gcc.target/i386/memcpy-vector_loop-2.c: New.

From-SVN: r200751
parent c8dfadf8
2013-07-08 Michael Zolotukhin <michael.v.zolotukhin@gmail.com>
* config/i386/i386-opts.h (enum stringop_alg): Add vector_loop.
* config/i386/i386.c (expand_set_or_movmem_via_loop): Use
adjust_address instead of change_address to keep info about alignment.
(emit_strmov): Remove.
(emit_memmov): New function.
(expand_movmem_epilogue): Refactor to properly handle bigger sizes.
(expand_movmem_epilogue): Likewise and return updated rtx for
destination.
(expand_constant_movmem_prologue): Likewise and return updated rtx for
destination and source.
(decide_alignment): Refactor, handle vector_loop.
(ix86_expand_movmem): Likewise.
(ix86_expand_setmem): Likewise.
* config/i386/i386.opt (Enum): Add vector_loop to option stringop_alg.
2013-07-07 Uros Bizjak <ubizjak@gmail.com>
* config/i386/driver-i386.c (host_detect_local_cpu): Do not check
......
......@@ -35,7 +35,8 @@ enum stringop_alg
rep_prefix_8_byte,
loop_1_byte,
loop,
unrolled_loop
unrolled_loop,
vector_loop
};
/* Available call abi. */
......
......@@ -345,6 +345,9 @@ Enum(stringop_alg) String(loop) Value(loop)
EnumValue
Enum(stringop_alg) String(unrolled_loop) Value(unrolled_loop)
EnumValue
Enum(stringop_alg) String(vector_loop) Value(vector_loop)
mtls-dialect=
Target RejectNegative Joined Var(ix86_tls_dialect) Enum(tls_dialect) Init(TLS_DIALECT_GNU)
Use given thread-local storage dialect
......
2013-07-08 Michael Zolotukhin <michael.v.zolotukhin@gmail.com>
* gcc.target/i386/memcpy-vector_loop-1.c: New.
* gcc.target/i386/memcpy-vector_loop-2.c: New.
2013-07-06 Uros Bizjak <ubizjak@gmail.com>
PR target/57807
......
/* { dg-do compile } */
/* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */
/* { dg-final { scan-assembler-times "movdqa" 8 { target { ! { ia32 } } } } } */
/* { dg-final { scan-assembler-times "movdqa" 4 { target { ia32 } } } } */
char a[2048];
char b[2048];
void t (void)
{
__builtin_memcpy (a, b, 2048);
}
/* { dg-do compile } */
/* { dg-options "-O2 -march=atom -minline-all-stringops -mstringop-strategy=vector_loop" } */
/* { dg-final { scan-assembler-times "movdqa" 4} } */
char *a;
char *b;
void t (void)
{
__builtin_memcpy (a, b, 2048);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment