aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Sawdey <acsawdey@linux.ibm.com>2018-11-02 17:02:38 +0000
committerAaron Sawdey <acsawdey@gcc.gnu.org>2018-11-02 12:02:38 -0500
commit122d6c36552fd516efee6e57e68103ec693a9ff5 (patch)
tree192ddf6b5071d1d838097bd8fbf3f980904a6fbf
parent5f7dbaa0adbe5148029177b198ae3dc26e1ff257 (diff)
downloadgcc-122d6c36552fd516efee6e57e68103ec693a9ff5.zip
gcc-122d6c36552fd516efee6e57e68103ec693a9ff5.tar.gz
gcc-122d6c36552fd516efee6e57e68103ec693a9ff5.tar.bz2
rs6000-string.c (expand_strncmp_gpr_sequence): Pay attention to TARGET_AVOID_XFORM and BYTES_BIG_ENDIAN.
2018-11-02 Aaron Sawdey <acsawdey@linux.ibm.com> * config/rs6000/rs6000-string.c (expand_strncmp_gpr_sequence): Pay attention to TARGET_AVOID_XFORM and BYTES_BIG_ENDIAN. From-SVN: r265751
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/rs6000/rs6000-string.c16
2 files changed, 16 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3ddb149..5cf291d 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2018-11-02 Aaron Sawdey <acsawdey@linux.ibm.com>
+
+ * config/rs6000/rs6000-string.c (expand_strncmp_gpr_sequence): Pay
+ attention to TARGET_AVOID_XFORM and BYTES_BIG_ENDIAN.
+
2018-11-02 Richard Earnshaw <rearnsha@arm.com>
* config/aarch64/aarch64.c ((aarch64_override_options): Disable
diff --git a/gcc/config/rs6000/rs6000-string.c b/gcc/config/rs6000/rs6000-string.c
index 96729d9..22fe966 100644
--- a/gcc/config/rs6000/rs6000-string.c
+++ b/gcc/config/rs6000/rs6000-string.c
@@ -1798,12 +1798,18 @@ expand_strncmp_gpr_sequence (unsigned HOST_WIDE_INT bytes_to_compare,
rid of the extra bytes. */
cmp_bytes = bytes_to_compare;
- rtx offset_reg = gen_reg_rtx (Pmode);
- emit_move_insn (offset_reg, GEN_INT (offset));
-
- rtx addr1 = gen_rtx_PLUS (Pmode, src1_addr, offset_reg);
+ rtx offset_rtx;
+ if (BYTES_BIG_ENDIAN || TARGET_AVOID_XFORM)
+ offset_rtx = GEN_INT (offset);
+ else
+ {
+ offset_rtx = gen_reg_rtx (Pmode);
+ emit_move_insn (offset_rtx, GEN_INT (offset));
+ }
+ rtx addr1 = gen_rtx_PLUS (Pmode, src1_addr, offset_rtx);
+ rtx addr2 = gen_rtx_PLUS (Pmode, src2_addr, offset_rtx);
+
do_load_for_compare_from_addr (load_mode, tmp_reg_src1, addr1, orig_src1);
- rtx addr2 = gen_rtx_PLUS (Pmode, src2_addr, offset_reg);
do_load_for_compare_from_addr (load_mode, tmp_reg_src2, addr2, orig_src2);
/* We must always left-align the data we read, and