On 2/20/2022 9:51 AM, Roger Sayle wrote:
This patch implements the missed optimization enhancement PR 83907,
by handling memset with a constant byte value in tree-ssa's strlen
optimization pass.  Effectively, this treats memset(dst,'x',3) as
it would memcpy(dst,"xxx",3).

This patch also includes a tweak to handle_store to address another
missed optimization observed in the related test case pr83907-2.c.
The consecutive byte stores to memory get coalesced into a vector
write of a vector const, but unfortunately tree-ssa-strlen's
handle_store didn't previously handle the (unusual) case where the
stored "string" starts with a zero byte but also contains non-zero
bytes.

This patch has been tested on x86_64-pc-linux-gnu with make bootstrap
and make -k check with no new failures.  Ok for mainline?


2022-02-20  Roger Sayle  <ro...@nextmovesoftware.com>

gcc/ChangeLog
        PR tree-optimization/83907
        * tree-ssa-strlen.cc (handle_builtin_memset): Record a strinfo
        for memset with an constant char value.
        (handle_store): Improved handling of stores with a first byte
        of zero, but not storing_all_zeros_p.

gcc/testsuite/ChangeLog
        PR tree-optimization/83907
        * gcc.dg/tree-ssa/pr83907-1.c: New test case.
        * gcc.dg/tree-ssa/pr83907-2.c: New test case.
Deferring to stage1.
jeff

Reply via email to