aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99448.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99448.patch')
-rw-r--r--recipes/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99448.patch147
1 files changed, 147 insertions, 0 deletions
diff --git a/recipes/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99448.patch b/recipes/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99448.patch
new file mode 100644
index 0000000000..9f3d47f38b
--- /dev/null
+++ b/recipes/gcc/gcc-4.5/linaro/gcc-4.5-linaro-r99448.patch
@@ -0,0 +1,147 @@
+2010-12-13 Chung-Lin Tang <cltang@codesourcery.com>
+
+ Backport from mainline:
+
+ 2010-12-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/46865
+
+ * rtl.c (rtx_equal_p_cb, rtx_equal_p): For last operand of
+ ASM_OPERANDS and ASM_INPUT if integers are different,
+ call locator_eq.
+ * jump.c (rtx_renumbered_equal_p): Likewise.
+
+ gcc/testsuite/
+ * gcc.target/i386/pr46865-1.c: New test.
+ * gcc.target/i386/pr46865-2.c: New test.
+
+=== modified file 'gcc/jump.c'
+--- old/gcc/jump.c 2009-11-25 10:55:54 +0000
++++ new/gcc/jump.c 2010-12-13 10:05:52 +0000
+@@ -1728,7 +1728,13 @@
+
+ case 'i':
+ if (XINT (x, i) != XINT (y, i))
+- return 0;
++ {
++ if (((code == ASM_OPERANDS && i == 6)
++ || (code == ASM_INPUT && i == 1))
++ && locator_eq (XINT (x, i), XINT (y, i)))
++ break;
++ return 0;
++ }
+ break;
+
+ case 't':
+
+=== modified file 'gcc/rtl.c'
+--- old/gcc/rtl.c 2009-11-25 10:55:54 +0000
++++ new/gcc/rtl.c 2010-12-13 10:05:52 +0000
+@@ -429,7 +429,15 @@
+ case 'n':
+ case 'i':
+ if (XINT (x, i) != XINT (y, i))
+- return 0;
++ {
++#ifndef GENERATOR_FILE
++ if (((code == ASM_OPERANDS && i == 6)
++ || (code == ASM_INPUT && i == 1))
++ && locator_eq (XINT (x, i), XINT (y, i)))
++ break;
++#endif
++ return 0;
++ }
+ break;
+
+ case 'V':
+@@ -549,7 +557,15 @@
+ case 'n':
+ case 'i':
+ if (XINT (x, i) != XINT (y, i))
+- return 0;
++ {
++#ifndef GENERATOR_FILE
++ if (((code == ASM_OPERANDS && i == 6)
++ || (code == ASM_INPUT && i == 1))
++ && locator_eq (XINT (x, i), XINT (y, i)))
++ break;
++#endif
++ return 0;
++ }
+ break;
+
+ case 'V':
+
+=== added file 'gcc/testsuite/gcc.target/i386/pr46865-1.c'
+--- old/gcc/testsuite/gcc.target/i386/pr46865-1.c 1970-01-01 00:00:00 +0000
++++ new/gcc/testsuite/gcc.target/i386/pr46865-1.c 2010-12-13 10:05:52 +0000
+@@ -0,0 +1,31 @@
++/* PR rtl-optimization/46865 */
++/* { dg-do compile } */
++/* { dg-options "-O2" } */
++
++extern unsigned long f;
++
++#define m1(f) \
++ if (f & 1) \
++ asm volatile ("nop /* asmnop */\n"); \
++ else \
++ asm volatile ("nop /* asmnop */\n");
++
++#define m2(f) \
++ if (f & 1) \
++ asm volatile ("nop /* asmnop */\n" : : "i" (6) : "cx"); \
++ else \
++ asm volatile ("nop /* asmnop */\n" : : "i" (6) : "cx");
++
++void
++foo (void)
++{
++ m1 (f);
++}
++
++void
++bar (void)
++{
++ m2 (f);
++}
++
++/* { dg-final { scan-assembler-times "asmnop" 2 } } */
+
+=== added file 'gcc/testsuite/gcc.target/i386/pr46865-2.c'
+--- old/gcc/testsuite/gcc.target/i386/pr46865-2.c 1970-01-01 00:00:00 +0000
++++ new/gcc/testsuite/gcc.target/i386/pr46865-2.c 2010-12-13 10:05:52 +0000
+@@ -0,0 +1,32 @@
++/* PR rtl-optimization/46865 */
++/* { dg-do compile } */
++/* { dg-options "-O2 -save-temps" } */
++
++extern unsigned long f;
++
++#define m1(f) \
++ if (f & 1) \
++ asm volatile ("nop /* asmnop */\n"); \
++ else \
++ asm volatile ("nop /* asmnop */\n");
++
++#define m2(f) \
++ if (f & 1) \
++ asm volatile ("nop /* asmnop */\n" : : "i" (6) : "cx"); \
++ else \
++ asm volatile ("nop /* asmnop */\n" : : "i" (6) : "cx");
++
++void
++foo (void)
++{
++ m1 (f);
++}
++
++void
++bar (void)
++{
++ m2 (f);
++}
++
++/* { dg-final { scan-assembler-times "asmnop" 2 } } */
++/* { dg-final { cleanup-saved-temps } } */
+