re PR ipa/77653 (wrong code at -Os and above on x86_64-linux-gnu (in both 32-bit and 64-bit modes))
Fix PR ipa/77653 PR ipa/77653 * gcc.dg/ipa/pr77653.c: New test. PR ipa/77653 * ipa-icf.c (sem_variable::merge): Yield merge operation if alias address matters, not necessarily address of original. From-SVN: r240354
This commit is contained in:
parent
9ef2eff0d4
commit
a13f439f47
@ -1,3 +1,9 @@
|
||||
2016-09-22 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR ipa/77653
|
||||
* ipa-icf.c (sem_variable::merge): Yield merge operation if
|
||||
alias address matters, not necessarily address of original.
|
||||
|
||||
2016-09-22 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/77697
|
||||
|
@ -2179,7 +2179,6 @@ sem_variable::merge (sem_item *alias_item)
|
||||
varpool_node *alias = alias_var->get_node ();
|
||||
bool original_discardable = false;
|
||||
|
||||
bool original_address_matters = original->address_matters_p ();
|
||||
bool alias_address_matters = alias->address_matters_p ();
|
||||
|
||||
/* See if original is in a section that can be discarded if the main
|
||||
@ -2222,13 +2221,11 @@ sem_variable::merge (sem_item *alias_item)
|
||||
}
|
||||
|
||||
/* We can not merge if address comparsion metters. */
|
||||
if (original_address_matters && alias_address_matters
|
||||
&& flag_merge_constants < 2)
|
||||
if (alias_address_matters && flag_merge_constants < 2)
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file,
|
||||
"Not unifying; "
|
||||
"adress of original and alias may be compared.\n\n");
|
||||
"Not unifying; adress of original may be compared.\n\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-09-22 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR ipa/77653
|
||||
* gcc.dg/ipa/pr77653.c: New test.
|
||||
|
||||
2016-09-22 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR fortran/77665
|
||||
|
24
gcc/testsuite/gcc.dg/ipa/pr77653.c
Normal file
24
gcc/testsuite/gcc.dg/ipa/pr77653.c
Normal file
@ -0,0 +1,24 @@
|
||||
/* { dg-options "-O2 -fdump-ipa-icf-details" } */
|
||||
|
||||
int a, b, c, d, e, h, i, j, k, l;
|
||||
const int f;
|
||||
static int g;
|
||||
|
||||
void fn1 (int p1)
|
||||
{
|
||||
k = d ? c % k : a * b;
|
||||
h &= j ^ i ^ 1;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
const int *m = &f, **n = &m;
|
||||
l && (*n = &e);
|
||||
if (m != &f)
|
||||
__builtin_abort ();
|
||||
fn1 (g);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-ipa-dump "Equal symbols: 1" "icf" } } */
|
||||
/* { dg-final { scan-ipa-dump "Not unifying; adress of original may be compared." "icf" } } */
|
Loading…
Reference in New Issue
Block a user