diff options
Diffstat (limited to 'toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99316.patch')
-rw-r--r-- | toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99316.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99316.patch b/toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99316.patch new file mode 100644 index 0000000000..c7f92b6fcb --- /dev/null +++ b/toolchain-layer/recipes-devtools/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99316.patch @@ -0,0 +1,76 @@ +2010-07-20 Yao Qi <yao@codesourcery.com> + + Merge from Sourcery G++ 4.4: + 2010-06-07 Kazu Hirata <kazu@codesourcery.com> + + Issue #8535 + + Backport from mainline: + gcc/ + 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 Kazu Hirata <kazu@codesourcery.com> + PR rtl-optimization/44404 + * gcc.dg/pr44404.c: New. + + 2010-08-03 Chung-Lin Tang <cltang@codesourcery.com> + + Backport from mainline: + +=== modified file 'gcc/auto-inc-dec.c' +--- old/gcc/auto-inc-dec.c 2010-04-02 18:54:46 +0000 ++++ new/gcc/auto-inc-dec.c 2010-08-05 11:30:21 +0000 +@@ -1068,7 +1068,7 @@ + /* 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) ++ if (reg_overlap_mentioned_p (inc_insn.reg_res, PATTERN (mem_insn.insn))) + { + if (dump_file) + fprintf (dump_file, "base reg replacement failure.\n"); + +=== added file 'gcc/testsuite/gcc.dg/pr44404.c' +--- old/gcc/testsuite/gcc.dg/pr44404.c 1970-01-01 00:00:00 +0000 ++++ new/gcc/testsuite/gcc.dg/pr44404.c 2010-08-05 11:30:21 +0000 +@@ -0,0 +1,35 @@ ++/* 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; ++} + |