aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorBernd Schmidt <bernds@redhat.com>2016-09-29 11:21:20 -0500
committerAaron Sawdey <acsawdey@gcc.gnu.org>2016-09-29 11:21:20 -0500
commitd0d7f887b79cba3eb3e37c2dc7d59bc85e405ca9 (patch)
tree6d028a0fe3e7b556ecb9495dce43012d4bedc709 /gcc
parent0b4b9552ee6be2ac37b09193c07fae68028ed3dd (diff)
downloadgcc-d0d7f887b79cba3eb3e37c2dc7d59bc85e405ca9.zip
gcc-d0d7f887b79cba3eb3e37c2dc7d59bc85e405ca9.tar.gz
gcc-d0d7f887b79cba3eb3e37c2dc7d59bc85e405ca9.tar.bz2
builtins.c (expand_builtin_memcmp): don't swap args unless result is only being compared with zero.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/builtins.c12
2 files changed, 12 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 189228f..bb83b06 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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.
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 04dcf95..35cb109 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -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