backport: re PR rtl-optimization/46865 (Using -save-temps (or ccache, distcc) produces different results with multiline macros containing asm code)

Backport from mainline
	2010-12-10  Jakub Jelinek  <jakub@redhat.com>

	PR rtl-optimization/46865
	* rtl.c (rtx_equal_p_cb): For last operand of
	ASM_OPERANDS and ASM_INPUT if integers are different,
	call locator_eq.
	* jump.c (rtx_renumbered_equal_p): Likewise.

	* gcc.target/i386/pr46865-1.c: New test.
	* gcc.target/i386/pr46865-2.c: New test.

From-SVN: r168877
This commit is contained in:
Jakub Jelinek 2011-01-16 23:53:09 +01:00 committed by Jakub Jelinek
parent 8284108bd8
commit ad461982d7
6 changed files with 99 additions and 2 deletions

View File

@ -1,3 +1,14 @@
2011-01-16 Jakub Jelinek <jakub@redhat.com>
Backport from mainline
2010-12-10 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/46865
* rtl.c (rtx_equal_p_cb): For last operand of
ASM_OPERANDS and ASM_INPUT if integers are different,
call locator_eq.
* jump.c (rtx_renumbered_equal_p): Likewise.
2011-01-07 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
Backport from mainline:

View File

@ -1670,7 +1670,13 @@ rtx_renumbered_equal_p (const_rtx x, const_rtx y)
case 'i':
if (XINT (x, i) != XINT (y, i))
return 0;
{
if (((code == ASM_OPERANDS && i == 5)
|| (code == ASM_INPUT && i == 1))
&& locator_eq (XINT (x, i), XINT (y, i)))
break;
return 0;
}
break;
case 't':

View File

@ -405,7 +405,15 @@ rtx_equal_p_cb (const_rtx x, const_rtx y, rtx_equal_p_callback_function cb)
case 'n':
case 'i':
if (XINT (x, i) != XINT (y, i))
return 0;
{
#ifndef GENERATOR_FILE
if (((code == ASM_OPERANDS && i == 5)
|| (code == ASM_INPUT && i == 1))
&& locator_eq (XINT (x, i), XINT (y, i)))
break;
#endif
return 0;
}
break;
case 'V':

View File

@ -1,3 +1,12 @@
2011-01-16 Jakub Jelinek <jakub@redhat.com>
Backport from mainline
2010-12-10 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/46865
* gcc.target/i386/pr46865-1.c: New test.
* gcc.target/i386/pr46865-2.c: New test.
2011-01-13 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* gfortran.dg/cray_pointers_2.f90: Use dg-timeout-factor 4.

View File

@ -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 } } */

View File

@ -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 } } */