On Tue, 2017-12-12 at 20:50 +0100, Jakub Jelinek wrote:
> On Tue, Dec 12, 2017 at 01:40:41PM -0600, Aaron Sawdey wrote:
> > 2017-12-12 Aaron Sawdey <acsaw...@linux.vnet.ibm.com>
> >
> > PR target/82190
> > * config/rs6000/rs6000-string.c (expand_block_move,
> > expand_strn_compare): fix set_mem_size() calls.
>
> That should be capitalized: Fix instead of fix
[wrong patch deleted]
> Is this the patch you meant to attach? First of all, it only changes
> expand_block_move, not expand_strn_compare, and the change seems more
> like an optimization of P8/P9 rather than actual fix (otherwise,
> wouldn't
> it fail on say P7?).
>
> > + return 0;
> > +}
> > +
> > +
>
> Please avoid unnecessary trailing whitespace.
>
Jakub,
Yes that is a different patch unrelated to the 82190 fix. I've
attached the correct patch.
Thanks!
Aaron
--
Aaron Sawdey, Ph.D. acsaw...@linux.vnet.ibm.com
050-2/C113 (507) 253-7520 home: 507/263-0782
IBM Linux Technology Center - PPC Toolchain
Index: gcc/config/rs6000/rs6000-string.c
===================================================================
--- gcc/config/rs6000/rs6000-string.c (revision 255585)
+++ gcc/config/rs6000/rs6000-string.c (working copy)
@@ -459,7 +459,7 @@
rtx src1_reg = copy_addr_to_reg (XEXP (src1, 0));
src1 = replace_equiv_address (src1, src1_reg);
}
- set_mem_size (src1, cmp_bytes);
+ set_mem_size (src1, load_mode_size);
if (!REG_P (XEXP (src2, 0)))
{
@@ -466,7 +466,7 @@
rtx src2_reg = copy_addr_to_reg (XEXP (src2, 0));
src2 = replace_equiv_address (src2, src2_reg);
}
- set_mem_size (src2, cmp_bytes);
+ set_mem_size (src2, load_mode_size);
do_load_for_compare (tmp_reg_src1, src1, load_mode);
do_load_for_compare (tmp_reg_src2, src2, load_mode);
@@ -937,7 +937,7 @@
rtx src1_reg = copy_addr_to_reg (XEXP (src1, 0));
src1 = replace_equiv_address (src1, src1_reg);
}
- set_mem_size (src1, cmp_bytes);
+ set_mem_size (src1, load_mode_size);
if (!REG_P (XEXP (src2, 0)))
{
@@ -944,7 +944,7 @@
rtx src2_reg = copy_addr_to_reg (XEXP (src2, 0));
src2 = replace_equiv_address (src2, src2_reg);
}
- set_mem_size (src2, cmp_bytes);
+ set_mem_size (src2, load_mode_size);
do_load_for_compare (tmp_reg_src1, src1, load_mode);
do_load_for_compare (tmp_reg_src2, src2, load_mode);
@@ -1096,7 +1096,7 @@
rtx src1_reg = copy_addr_to_reg (XEXP (src1, 0));
src1 = replace_equiv_address (src1, src1_reg);
}
- set_mem_size (src1, cmp_bytes);
+ set_mem_size (src1, load_mode_size);
if (!REG_P (XEXP (src2, 0)))
{
@@ -1103,7 +1103,7 @@
rtx src2_reg = copy_addr_to_reg (XEXP (src2, 0));
src2 = replace_equiv_address (src2, src2_reg);
}
- set_mem_size (src2, cmp_bytes);
+ set_mem_size (src2, load_mode_size);
/* Construct call to strcmp/strncmp to compare the rest of the string. */
if (no_length)
Index: gcc/testsuite/gcc.dg/pr82190.c
===================================================================
--- gcc/testsuite/gcc.dg/pr82190.c (nonexistent)
+++ gcc/testsuite/gcc.dg/pr82190.c (working copy)
@@ -0,0 +1,20 @@
+/* PR target/82190 */
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-optimize-strlen -fweb" } */
+
+char src[64] __attribute__ ((aligned)) = "aaaaaaa";
+char dst[64] __attribute__ ((aligned));
+
+int
+main ()
+{
+ __builtin_memcpy (dst, src, 6);
+ if (__builtin_memcmp (dst, src, 6))
+ __builtin_abort ();
+
+ __builtin_memcpy (dst, src, 7);
+ if (__builtin_memcmp (dst, src, 7))
+ __builtin_abort ();
+
+ return 0;
+}