re PR middle-end/78809 (Inline strcmp with small constant strings)
2017-11-15 Qing Zhao <qing.zhao@oracle.com> PR middle-end/78809 * gimple-fold.c (gimple_fold_builtin_string_compare): Add handling of replacing call to strncmp with corresponding call to strcmp when meeting conditions. PR middle-end/78809 * gcc.dg/strcmpopt_1.c: New test. From-SVN: r254856
This commit is contained in:
parent
5958557b75
commit
caed5c9271
@ -1,3 +1,10 @@
|
|||||||
|
2017-11-15 Qing Zhao <qing.zhao@oracle.com>
|
||||||
|
|
||||||
|
PR middle-end/78809
|
||||||
|
* gimple-fold.c (gimple_fold_builtin_string_compare): Add handling
|
||||||
|
of replacing call to strncmp with corresponding call to strcmp when
|
||||||
|
meeting conditions.
|
||||||
|
|
||||||
2017-11-17 Sergey Shalnov <Sergey.Shalnov@intel.com>
|
2017-11-17 Sergey Shalnov <Sergey.Shalnov@intel.com>
|
||||||
|
|
||||||
* config/i386/x86-tune.def (X86_TUNE_AVX256_OPTIMAL): Add tuning
|
* config/i386/x86-tune.def (X86_TUNE_AVX256_OPTIMAL): Add tuning
|
||||||
|
@ -2258,6 +2258,21 @@ gimple_fold_builtin_string_compare (gimple_stmt_iterator *gsi)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If length is larger than the length of one constant string,
|
||||||
|
replace strncmp with corresponding strcmp */
|
||||||
|
if (fcode == BUILT_IN_STRNCMP
|
||||||
|
&& length > 0
|
||||||
|
&& ((p2 && (size_t) length > strlen (p2))
|
||||||
|
|| (p1 && (size_t) length > strlen (p1))))
|
||||||
|
{
|
||||||
|
tree fn = builtin_decl_implicit (BUILT_IN_STRCMP);
|
||||||
|
if (!fn)
|
||||||
|
return false;
|
||||||
|
gimple *repl = gimple_build_call (fn, 2, str1, str2);
|
||||||
|
replace_call_with_call_and_fold (gsi, repl);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2017-11-15 Qing Zhao <qing.zhao@oracle.com <mailto:qing.zhao@oracle.com>>
|
||||||
|
|
||||||
|
PR middle-end/78809
|
||||||
|
* gcc.dg/strcmpopt_1.c: New test.
|
||||||
|
|
||||||
2017-11-16 Joseph Myers <joseph@codesourcery.com>
|
2017-11-16 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
* gcc.dg/c18-version-1.c, gcc.dg/c18-version-2.c: New tests.
|
* gcc.dg/c18-version-1.c, gcc.dg/c18-version-2.c: New tests.
|
||||||
|
28
gcc/testsuite/gcc.dg/strcmpopt_1.c
Normal file
28
gcc/testsuite/gcc.dg/strcmpopt_1.c
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/* { dg-do run } */
|
||||||
|
/* { dg-options "-fdump-tree-gimple" } */
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int cmp1 (char *p)
|
||||||
|
{
|
||||||
|
return strncmp (p, "fis", 4);
|
||||||
|
}
|
||||||
|
int cmp2 (char *q)
|
||||||
|
{
|
||||||
|
return strncmp ("fis", q, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main ()
|
||||||
|
{
|
||||||
|
|
||||||
|
char *p = "fish";
|
||||||
|
char *q = "fis\0";
|
||||||
|
|
||||||
|
if (cmp1 (p) == 0 || cmp2 (q) != 0)
|
||||||
|
abort ();
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* { dg-final { scan-tree-dump-times "strcmp \\(" 2 "gimple" } } */
|
Loading…
Reference in New Issue
Block a user