re PR bootstrap/77768 (LTO/PGO -O3 bootstrap broken: tree-vrp.c:11053:0: internal compiler error: Segmentation fault)

2016-09-29  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/77768
	* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
	Handle stores to readonly memory when removing redundant stores.

	* gcc.dg/torture/pr77768.c: New testcase.

From-SVN: r240617
This commit is contained in:
Richard Biener 2016-09-29 12:31:02 +00:00 committed by Richard Biener
parent da186c1f43
commit 0ce1ecc7be
4 changed files with 28 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2016-09-29 Richard Biener <rguenther@suse.de>
PR tree-optimization/77768
* tree-ssa-pre.c (eliminate_dom_walker::before_dom_children):
Handle stores to readonly memory when removing redundant stores.
2016-09-29 Richard Biener <rguenther@suse.de>
PR middle-end/77407

View File

@ -1,3 +1,8 @@
2016-09-29 Richard Biener <rguenther@suse.de>
PR tree-optimization/77768
* gcc.dg/torture/pr77768.c: New testcase.
2016-09-28 Richard Biener <rguenther@suse.de>
PR middle-end/77407

View File

@ -0,0 +1,13 @@
/* { dg-do run } */
static const int a;
int b;
int *c, *d;
int main()
{
c = (int *)&a;
c == d ?: __builtin_exit(0);
for (; b; b++ >= (*d = a))
;
return 0;
}

View File

@ -4443,9 +4443,11 @@ eliminate_dom_walker::before_dom_children (basic_block b)
&& operand_equal_p (val, rhs, 0))
{
/* We can only remove the later store if the former aliases
at least all accesses the later one does. */
at least all accesses the later one does or if the store
was to readonly memory storing the same value. */
alias_set_type set = get_alias_set (lhs);
if (vnresult->set == set
if (! vnresult
|| vnresult->set == set
|| alias_set_subset_of (set, vnresult->set))
{
if (dump_file && (dump_flags & TDF_DETAILS))