+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>
* config/i386/x86-tune.def (X86_TUNE_AVX256_OPTIMAL): Add tuning
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;
}
+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>
* gcc.dg/c18-version-1.c, gcc.dg/c18-version-2.c: New tests.
--- /dev/null
+/* { 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" } } */