diff options
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.patch | 147 |
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 } } */ + |