re PR lto/60404 (wrong code by LTO on x86_64-linux-gnu)
PR lto/60404 * cfgexpand.c (expand_used_vars): Do not assume all SSA_NAMEs of PARM/RESULT_DECLs must be coalesced with optimize && in_lto_p. * tree-ssa-coalesce.c (coalesce_ssa_name): Use MUST_COALESCE_COST - 1 cost for in_lto_p. * gcc.dg/lto/pr60404_0.c: New test. * gcc.dg/lto/pr60404_1.c: New file. * gcc.dg/lto/pr60404_2.c: New file. From-SVN: r208340
This commit is contained in:
parent
7af9985b2d
commit
5525ed38b4
@ -1,3 +1,11 @@
|
||||
2014-03-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR lto/60404
|
||||
* cfgexpand.c (expand_used_vars): Do not assume all SSA_NAMEs
|
||||
of PARM/RESULT_DECLs must be coalesced with optimize && in_lto_p.
|
||||
* tree-ssa-coalesce.c (coalesce_ssa_name): Use MUST_COALESCE_COST - 1
|
||||
cost for in_lto_p.
|
||||
|
||||
2014-03-04 Heiher <r@hev.cc>
|
||||
|
||||
* config/mips/mips-cpus.def (loongson3a): Mark as a MIPS64r2 processor.
|
||||
|
@ -1652,10 +1652,12 @@ expand_used_vars (void)
|
||||
debug info, there is no need to do so if optimization is disabled
|
||||
because all the SSA_NAMEs based on these DECLs have been coalesced
|
||||
into a single partition, which is thus assigned the canonical RTL
|
||||
location of the DECLs. */
|
||||
location of the DECLs. If in_lto_p, we can't rely on optimize,
|
||||
a function could be compiled with -O1 -flto first and only the
|
||||
link performed at -O0. */
|
||||
if (TREE_CODE (SSA_NAME_VAR (var)) == VAR_DECL)
|
||||
expand_one_var (var, true, true);
|
||||
else if (DECL_IGNORED_P (SSA_NAME_VAR (var)) || optimize)
|
||||
else if (DECL_IGNORED_P (SSA_NAME_VAR (var)) || optimize || in_lto_p)
|
||||
{
|
||||
/* This is a PARM_DECL or RESULT_DECL. For those partitions that
|
||||
contain the default def (representing the parm or result itself)
|
||||
|
@ -1,3 +1,10 @@
|
||||
2014-03-05 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR lto/60404
|
||||
* gcc.dg/lto/pr60404_0.c: New test.
|
||||
* gcc.dg/lto/pr60404_1.c: New file.
|
||||
* gcc.dg/lto/pr60404_2.c: New file.
|
||||
|
||||
2014-03-04 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
|
||||
|
||||
* gcc.dg/vmx/extract-vsx.c: Replace "vector long" with "vector
|
||||
|
15
gcc/testsuite/gcc.dg/lto/pr60404_0.c
Normal file
15
gcc/testsuite/gcc.dg/lto/pr60404_0.c
Normal file
@ -0,0 +1,15 @@
|
||||
/* { dg-lto-do run } */
|
||||
/* { dg-lto-options { { -O1 -flto } } } */
|
||||
/* { dg-extra-ld-options { -O0 } } */
|
||||
|
||||
extern void fn2 (int);
|
||||
int a[1], b;
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
fn2 (0);
|
||||
if (b != 0 || a[b] != 0)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
4
gcc/testsuite/gcc.dg/lto/pr60404_1.c
Normal file
4
gcc/testsuite/gcc.dg/lto/pr60404_1.c
Normal file
@ -0,0 +1,4 @@
|
||||
void
|
||||
fn1 (int p)
|
||||
{
|
||||
}
|
9
gcc/testsuite/gcc.dg/lto/pr60404_2.c
Normal file
9
gcc/testsuite/gcc.dg/lto/pr60404_2.c
Normal file
@ -0,0 +1,9 @@
|
||||
extern int b;
|
||||
extern void fn1 (int);
|
||||
|
||||
void
|
||||
fn2 (int p)
|
||||
{
|
||||
b = p++;
|
||||
fn1 (p);
|
||||
}
|
@ -1289,9 +1289,12 @@ coalesce_ssa_name (void)
|
||||
_require_ that all the names originating from it be
|
||||
coalesced, because there must be a single partition
|
||||
containing all the names so that it can be assigned
|
||||
the canonical RTL location of the DECL safely. */
|
||||
the canonical RTL location of the DECL safely.
|
||||
If in_lto_p, a function could have been compiled
|
||||
originally with optimizations and only the link
|
||||
performed at -O0, so we can't actually require it. */
|
||||
const int cost
|
||||
= TREE_CODE (SSA_NAME_VAR (a)) == VAR_DECL
|
||||
= (TREE_CODE (SSA_NAME_VAR (a)) == VAR_DECL || in_lto_p)
|
||||
? MUST_COALESCE_COST - 1 : MUST_COALESCE_COST;
|
||||
add_coalesce (cl, SSA_NAME_VERSION (a),
|
||||
SSA_NAME_VERSION (*slot), cost);
|
||||
|
Loading…
x
Reference in New Issue
Block a user