mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2025-12-15 23:05:34 +01:00
148 lines
3.2 KiB
Diff
148 lines
3.2 KiB
Diff
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 } } */
|
|
|