re PR lto/64684 (wrong code by LTO on x86_64-linux-gnu)
2015-01-20 Richard Biener <rguenther@suse.de> PR ipa/64684 * ipa-reference.c (add_static_var): Inline ... (analyze_function): ... here after splitting out from ... (is_proper_for_analysis): ... this. * gcc.dg/lto/pr64684_0.c: New testcase. * gcc.dg/lto/pr64684_1.c: Likewise. * gcc.dg/lto/pr64684_2.c: Likewise. * gcc.dg/lto/pr64685_0.c: Likewise. * gcc.dg/lto/pr64685_1.c: Likewise. From-SVN: r219892
This commit is contained in:
parent
7d56e747e2
commit
2fd2ae3458
8 changed files with 100 additions and 21 deletions
|
@ -1,3 +1,10 @@
|
|||
2015-01-20 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR ipa/64684
|
||||
* ipa-reference.c (add_static_var): Inline ...
|
||||
(analyze_function): ... here after splitting out from ...
|
||||
(is_proper_for_analysis): ... this.
|
||||
|
||||
2015-01-20 Matthew Wahab <matthew.wahab@arm.com>
|
||||
|
||||
PR target/64149
|
||||
|
|
|
@ -236,21 +236,6 @@ ipa_reference_get_not_written_global (struct cgraph_node *fn)
|
|||
}
|
||||
|
||||
|
||||
|
||||
/* Add VAR to all_module_statics and the two
|
||||
reference_vars_to_consider* sets. */
|
||||
|
||||
static inline void
|
||||
add_static_var (tree var)
|
||||
{
|
||||
int uid = DECL_UID (var);
|
||||
gcc_assert (TREE_CODE (var) == VAR_DECL);
|
||||
if (dump_file)
|
||||
splay_tree_insert (reference_vars_to_consider,
|
||||
uid, (splay_tree_value)var);
|
||||
bitmap_set_bit (all_module_statics, uid);
|
||||
}
|
||||
|
||||
/* Return true if the variable T is the right kind of static variable to
|
||||
perform compilation unit scope escape analysis. */
|
||||
|
||||
|
@ -285,12 +270,6 @@ is_proper_for_analysis (tree t)
|
|||
if (bitmap_bit_p (ignore_module_statics, DECL_UID (t)))
|
||||
return false;
|
||||
|
||||
/* This is a variable we care about. Check if we have seen it
|
||||
before, and if not add it the set of variables we care about. */
|
||||
if (all_module_statics
|
||||
&& !bitmap_bit_p (all_module_statics, DECL_UID (t)))
|
||||
add_static_var (t);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -497,6 +476,15 @@ analyze_function (struct cgraph_node *fn)
|
|||
var = ref->referred->decl;
|
||||
if (!is_proper_for_analysis (var))
|
||||
continue;
|
||||
/* This is a variable we care about. Check if we have seen it
|
||||
before, and if not add it the set of variables we care about. */
|
||||
if (all_module_statics
|
||||
&& bitmap_set_bit (all_module_statics, DECL_UID (var)))
|
||||
{
|
||||
if (dump_file)
|
||||
splay_tree_insert (reference_vars_to_consider,
|
||||
DECL_UID (var), (splay_tree_value)var);
|
||||
}
|
||||
switch (ref->use)
|
||||
{
|
||||
case IPA_REF_LOAD:
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
2015-01-20 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR ipa/64684
|
||||
* gcc.dg/lto/pr64684_0.c: New testcase.
|
||||
* gcc.dg/lto/pr64684_1.c: Likewise.
|
||||
* gcc.dg/lto/pr64684_2.c: Likewise.
|
||||
* gcc.dg/lto/pr64685_0.c: Likewise.
|
||||
* gcc.dg/lto/pr64685_1.c: Likewise.
|
||||
|
||||
2015-01-20 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/62241
|
||||
|
|
13
gcc/testsuite/gcc.dg/lto/pr64684_0.c
Normal file
13
gcc/testsuite/gcc.dg/lto/pr64684_0.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* { dg-lto-do run } */
|
||||
/* { dg-lto-options { { -O1 -flto } } } */
|
||||
|
||||
extern void fn2 (void);
|
||||
extern int a;
|
||||
|
||||
void
|
||||
fn1 ()
|
||||
{
|
||||
a = -1;
|
||||
fn2 ();
|
||||
a &= 1;
|
||||
}
|
9
gcc/testsuite/gcc.dg/lto/pr64684_1.c
Normal file
9
gcc/testsuite/gcc.dg/lto/pr64684_1.c
Normal file
|
@ -0,0 +1,9 @@
|
|||
/* { dg-options "-Os" } */
|
||||
|
||||
extern int a;
|
||||
|
||||
void
|
||||
fn2 (void)
|
||||
{
|
||||
a = 0;
|
||||
}
|
16
gcc/testsuite/gcc.dg/lto/pr64684_2.c
Normal file
16
gcc/testsuite/gcc.dg/lto/pr64684_2.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* { dg-options "-O0" } */
|
||||
|
||||
extern void fn1 (void);
|
||||
|
||||
int a;
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
fn1 ();
|
||||
|
||||
if (a != 0)
|
||||
__builtin_abort ();
|
||||
|
||||
return 0;
|
||||
}
|
10
gcc/testsuite/gcc.dg/lto/pr64685_0.c
Normal file
10
gcc/testsuite/gcc.dg/lto/pr64685_0.c
Normal file
|
@ -0,0 +1,10 @@
|
|||
/* { dg-lto-do run } */
|
||||
/* { dg-lto-options { { -flto } } } */
|
||||
|
||||
extern int b;
|
||||
|
||||
void
|
||||
fn1 (void)
|
||||
{
|
||||
b = 0;
|
||||
}
|
27
gcc/testsuite/gcc.dg/lto/pr64685_1.c
Normal file
27
gcc/testsuite/gcc.dg/lto/pr64685_1.c
Normal file
|
@ -0,0 +1,27 @@
|
|||
/* { dg-options "-O1" } */
|
||||
|
||||
extern void fn1 (void);
|
||||
|
||||
int a[2], b;
|
||||
|
||||
static void
|
||||
foo (int p)
|
||||
{
|
||||
b = 1 ^ a[(b ^ 1) & 1];
|
||||
b = 1 ^ a[b & 1];
|
||||
if (p)
|
||||
__builtin_abort ();
|
||||
}
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
foo (0);
|
||||
b = 0;
|
||||
foo (0);
|
||||
|
||||
if (b != 1)
|
||||
__builtin_abort ();
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue