x86: Pass a copy of the string length to cmpstrnqi
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 13 Jul 2020 17:33:47 +0000 (10:33 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 13 Jul 2020 17:33:47 +0000 (10:33 -0700)
commit9cba898481368ce16c6a2d30ef781a82dce27c55
tree6d44bf71c40e5f79feed433195185d8977b966d6
parent6a9a3434c7396ea14c8f9c291694faea382c36dc
x86: Pass a copy of the string length to cmpstrnqi

cmpstrnsi expander may pass the actual string length directly to cmpstrnqi
patterns.  For cmpstrnsi, one of the strings must be a constant and
expand_builtin_strncmp rewrites the length argument to be the minimum of
the const string length and the actual string length.  But it is not the
case for cmpmemsi.  Pass a copy of the string length to cmpstrnqi patterns
to avoid changing the actual string length by cmpstrnqi patterns.

gcc/

PR target/95443
* config/i386/i386.md (cmpstrnsi): Pass a copy of the string
length to cmpstrnqi patterns.

gcc/testsuite/

PR target/95443
* gcc.target/i386/pr95443-1.c: New test.
* gcc.target/i386/pr95443-2.c: Likewise.
gcc/config/i386/i386.md
gcc/testsuite/gcc.target/i386/pr95443-1.c [new file with mode: 0644]
gcc/testsuite/gcc.target/i386/pr95443-2.c [new file with mode: 0644]