builtins.c (expand_builtin_memcmp): don't swap args unless result is only being compa...
authorBernd Schmidt <bernds@redhat.com>
Thu, 29 Sep 2016 16:21:20 +0000 (11:21 -0500)
committerAaron Sawdey <acsawdey@gcc.gnu.org>
Thu, 29 Sep 2016 16:21:20 +0000 (11:21 -0500)
2016-09-29  Bernd Schmidt  <bschmidt@redhat.com>

* builtins.c (expand_builtin_memcmp): don't swap args unless
result is only being compared with zero.

From-SVN: r240625

gcc/ChangeLog
gcc/builtins.c

index 189228f987b58460bbe086f3341da786c883b3e8..bb83b0648657ac73c4b42ac568e22b50e6303c93 100644 (file)
@@ -1,3 +1,8 @@
+2016-09-29  Bernd Schmidt  <bschmidt@redhat.com>
+
+       * builtins.c (expand_builtin_memcmp): don't swap args unless
+       result is only being compared with zero.
+
 2016-09-29  Marek Polacek  <polacek@redhat.com>
 
        * dwarf2out.c (loc_descriptor): Add fall through comment.
index 04dcf95acd21bf092c730d5fdd08b58c497c1ab5..35cb109bc4bfbf384c662a3d1ab567b724dda4c3 100644 (file)
@@ -3707,11 +3707,13 @@ expand_builtin_memcmp (tree exp, rtx target, bool result_eq)
 
   by_pieces_constfn constfn = NULL;
 
-  const char *src_str = c_getstr (arg1);
-  if (src_str == NULL)
-    src_str = c_getstr (arg2);
-  else
-    std::swap (arg1_rtx, arg2_rtx);
+  const char *src_str = c_getstr (arg2);
+  if (result_eq && src_str == NULL)
+    {
+      src_str = c_getstr (arg1);
+      if (src_str != NULL)
+       std::swap (arg1_rtx, arg2_rtx);
+    }
 
   /* If SRC is a string constant and block move would be done
      by pieces, we can avoid loading the string from memory