Commit 0ce1ecc7 by Richard Biener Committed by Richard Biener

re PR bootstrap/77768 (LTO/PGO -O3 bootstrap broken: tree-vrp.c:11053:0:…

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
parent da186c1f
2016-09-29 Richard Biener <rguenther@suse.de> 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 PR middle-end/77407
* match.pd: Add X / abs (X) -> X < 0 ? -1 : 1 and * match.pd: Add X / abs (X) -> X < 0 ? -1 : 1 and
X / -X -> -1 simplifications. X / -X -> -1 simplifications.
......
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> 2016-09-28 Richard Biener <rguenther@suse.de>
PR middle-end/77407 PR middle-end/77407
......
/* { 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;
}
...@@ -4443,9 +4443,11 @@ eliminate_dom_walker::before_dom_children (basic_block b) ...@@ -4443,9 +4443,11 @@ eliminate_dom_walker::before_dom_children (basic_block b)
&& operand_equal_p (val, rhs, 0)) && operand_equal_p (val, rhs, 0))
{ {
/* We can only remove the later store if the former aliases /* 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); alias_set_type set = get_alias_set (lhs);
if (vnresult->set == set if (! vnresult
|| vnresult->set == set
|| alias_set_subset_of (set, vnresult->set)) || alias_set_subset_of (set, vnresult->set))
{ {
if (dump_file && (dump_flags & TDF_DETAILS)) if (dump_file && (dump_flags & TDF_DETAILS))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment