Give up the inlining expansion for strcmp/strncmp/memcmp on a target where the...
authorQing Zhao <qing.zhao@oracle.com>
Fri, 20 Jul 2018 18:18:25 +0000 (18:18 +0000)
committerQing Zhao <qinzhao@gcc.gnu.org>
Fri, 20 Jul 2018 18:18:25 +0000 (18:18 +0000)
commit523a59ff86fb66df06dd3a9e29a24e59c3b7f9d8
tree54fb67ddff4aec02c1d0cf9cdfb1ba404382a5c3
parentcba563f71dbc137a6c0ba7c10bc8fef90203ea0c
Give up the inlining expansion for strcmp/strncmp/memcmp on a target where the...

Give up the inlining expansion for strcmp/strncmp/memcmp on a target
where the type of the call has same or narrower presicion than unsigned
char.
Change char to unsigned char for strcmp/strncmp when expand them to
a sequence of byte comparisons.

Due to C standard section 7.24.4:

The sign of a nonzero value returned by the comparison functions memcmp,
strcmp, and strncmp is determined by the sign of the difference between
the values of the first pair of characters (both interpreted as unsigned
char) that differ in the objects being compared.

bootstraped and tested on both X86 and Aarch64. no regression.

From-SVN: r262907
gcc/ChangeLog
gcc/builtins.c