rs6000-string.c (expand_strncmp_gpr_sequence): Pay attention to TARGET_AVOID_XFORM...
authorAaron Sawdey <acsawdey@linux.ibm.com>
Fri, 2 Nov 2018 17:02:38 +0000 (17:02 +0000)
committerAaron Sawdey <acsawdey@gcc.gnu.org>
Fri, 2 Nov 2018 17:02:38 +0000 (12:02 -0500)
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

gcc/ChangeLog
gcc/config/rs6000/rs6000-string.c

index 3ddb1492ede994cc6d9e270ba2baaf52b4e17892..5cf291da2d5ec19773157f1657d53ccc9810b276 100644 (file)
@@ -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
index 96729d9663c9a3ccb8e8017bfb9e776704dd72fb..22fe966d5729d2f294688e295224e0baad79f362 100644 (file)
@@ -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