PR rtl-optimization/44404
* auto-inc-dec.c (find_inc): Use reg_overlap_mentioned_p instead
of count_occurrences to see if it's safe to modify mem_insn.insn.
gcc/testsuite/
gcc/testsuite/
PR rtl-optimization/44404
* gcc.dg/pr44404.c: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160372
138bc75d-0d04-0410-961f-
82ee72b054a4
+2010-06-07 Kazu Hirata <kazu@codesourcery.com>
+
+ PR rtl-optimization/44404
+ * auto-inc-dec.c (find_inc): Use reg_overlap_mentioned_p instead
+ of count_occurrences to see if it's safe to modify mem_insn.insn.
+ gcc/testsuite/
+
2010-06-07 Richard Guenther <rguenther@suse.de>
* gimplify.c (gimplify_cleanup_point_expr): For empty body
/* For the post_add to work, the result_reg of the inc must not be
used in the mem insn since this will become the new index
register. */
+ if (count_occurrences (PATTERN (mem_insn.insn), inc_insn.reg_res, 1) == 0
+ && reg_overlap_mentioned_p (inc_insn.reg_res, PATTERN (mem_insn.insn)))
+ {
+ debug_rtx (mem_insn.insn);
+ debug_rtx (inc_insn.reg_res);
+ gcc_unreachable ();
+ }
if (count_occurrences (PATTERN (mem_insn.insn), inc_insn.reg_res, 1) != 0)
{
if (dump_file)
+2010-06-07 Kazu Hirata <kazu@codesourcery.com>
+
+ PR rtl-optimization/44404
+ * gcc.dg/pr44404.c: New.
+
2010-06-07 Kai Tietz <kai.tietz@onevision.com>
PR target/44159
--- /dev/null
+/* PR rtl-optimization/44404
+ foo() used to be miscompiled on ARM due to a bug in auto-inc-dec.c,
+ which resulted in "strb r1, [r1], #-36". */
+
+/* { dg-do run } */
+/* { dg-options "-O2 -fno-unroll-loops" } */
+
+extern char *strcpy (char *, const char *);
+extern int strcmp (const char*, const char*);
+extern void abort (void);
+
+char buf[128];
+
+void __attribute__((noinline))
+bar (int a, const char *p)
+{
+ if (strcmp (p, "0123456789abcdefghijklmnopqrstuvwxyz") != 0)
+ abort ();
+}
+
+void __attribute__((noinline))
+foo (int a)
+{
+ if (a)
+ bar (0, buf);
+ strcpy (buf, "0123456789abcdefghijklmnopqrstuvwxyz");
+ bar (0, buf);
+}
+
+int
+main (void)
+{
+ foo (0);
+ return 0;
+}