Optimize strchr (s, 0) to s + strlen (s).
authorWilco Dijkstra <wdijkstr@arm.com>
Wed, 28 Sep 2016 11:06:41 +0000 (11:06 +0000)
committerWilco Dijkstra <wilco@gcc.gnu.org>
Wed, 28 Sep 2016 11:06:41 +0000 (11:06 +0000)
commit912d9ec300f1f1262b1ab09798304d0c99ff5778
tree3c170771d3f815d96a6d0ba133a16b9fe28bc717
parent1b4be62ad3e153d2e4eda115698cbf33fca09781
Optimize strchr (s, 0) to s + strlen (s).

Optimize strchr (s, 0) to s + strlen (s).  strchr (s, 0) appears a common
idiom for finding the end of a string, however it is not a very efficient
way of doing so.  Strlen is a much simpler operation which is significantly
faster (eg. on x86 strlen is 50% faster for strings of 8 bytes and about
twice as fast as strchr on strings of 1KB).

    gcc/
* gimple-fold.c (gimple_fold_builtin_strchr):
New function to optimize strchr (s, 0) to strlen.
(gimple_fold_builtin): Add BUILT_IN_STRCHR case.

    testsuite/
* gcc.dg/strlenopt-20.c: Update test.
* gcc.dg/strlenopt-21.c: Likewise.
* gcc.dg/strlenopt-22.c: Likewise.
* gcc.dg/strlenopt-22g.c: Likewise.
* gcc.dg/strlenopt-26.c: Likewise.
* gcc.dg/strlenopt-5.c: Likewise.
* gcc.dg/strlenopt-7.c: Likewise.
* gcc.dg/strlenopt-9.c: Likewise.

From-SVN: r240568
gcc/ChangeLog
gcc/gimple-fold.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/strlenopt-20.c
gcc/testsuite/gcc.dg/strlenopt-21.c
gcc/testsuite/gcc.dg/strlenopt-22.c
gcc/testsuite/gcc.dg/strlenopt-22g.c
gcc/testsuite/gcc.dg/strlenopt-26.c
gcc/testsuite/gcc.dg/strlenopt-5.c
gcc/testsuite/gcc.dg/strlenopt-7.c
gcc/testsuite/gcc.dg/strlenopt-9.c