re PR target/42894 (Invalid rtl sharing in Thumb1.)

PR target/42894
	* varasm.c (force_const_mem): Store copy of x in desc->constant
	instead of x itself.
	* expr.c (emit_move_insn): Add a copy of y_cst instead of y_cst
	itself into REG_EQUAL note.

	* gcc.dg/tls/pr42894.c: New test.

From-SVN: r169370
This commit is contained in:
Jakub Jelinek 2011-01-28 20:36:44 +01:00 committed by Jakub Jelinek
parent 62dcc44a4b
commit 591e29d9da
5 changed files with 28 additions and 3 deletions

View File

@ -1,3 +1,11 @@
2011-01-28 Jakub Jelinek <jakub@redhat.com>
PR target/42894
* varasm.c (force_const_mem): Store copy of x in desc->constant
instead of x itself.
* expr.c (emit_move_insn): Add a copy of y_cst instead of y_cst
itself into REG_EQUAL note.
2011-01-28 Joseph Myers <joseph@codesourcery.com>
* config/freebsd.opt (posix, rdynamic): New Driver options.

View File

@ -3398,7 +3398,7 @@ emit_move_insn (rtx x, rtx y)
&& (set = single_set (last_insn)) != NULL_RTX
&& SET_DEST (set) == x
&& ! rtx_equal_p (y_cst, SET_SRC (set)))
set_unique_reg_note (last_insn, REG_EQUAL, y_cst);
set_unique_reg_note (last_insn, REG_EQUAL, copy_rtx (y_cst));
return last_insn;
}

View File

@ -1,3 +1,8 @@
2011-01-28 Jakub Jelinek <jakub@redhat.com>
PR target/42894
* gcc.dg/tls/pr42894.c: New test.
2011-01-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* gcc.dg/pr47276.c: Add dg-require-visibility.

View File

@ -0,0 +1,12 @@
/* PR target/42894 */
/* { dg-do compile } */
/* { dg-options "-march=armv5te -mthumb" { target arm*-*-* } } */
/* { dg-require-effective-target tls } */
extern __thread int t;
void
foo (int a)
{
t = a;
}

View File

@ -1,7 +1,7 @@
/* Output variables, constants and external declarations, for GNU compiler.
Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010 Free Software Foundation, Inc.
2010, 2011 Free Software Foundation, Inc.
This file is part of GCC.
@ -3518,7 +3518,7 @@ force_const_mem (enum machine_mode mode, rtx x)
pool->offset &= ~ ((align / BITS_PER_UNIT) - 1);
desc->next = NULL;
desc->constant = tmp.constant;
desc->constant = copy_rtx (tmp.constant);
desc->offset = pool->offset;
desc->hash = hash;
desc->mode = mode;