https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88487
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |missed-optimization
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2018-12-14
Blocks| |49774
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot
gnu.org
Ever confirmed|0 |1
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
t.c:22:1: note: can't determine dependence between MEM[(double *)_28 clique 1
base 0] and MEM[(double *)_25 + 8B clique 1 base 0]
t.c:22:1: note: removing SLP instance operations starting from: MEM[(double
*)_28 clique 1 base 0] = _29;
t.c:22:1: note: can't determine dependence between MEM[(double *)_43 clique 1
base 0] and MEM[(double *)_40 + 8B clique 1 base 0]
t.c:22:1: note: removing SLP instance operations starting from: MEM[(double
*)_43 clique 1 base 0] = _44;
# PT = nonlocal escaped null
_25 = MEM[(double * restrict *)_21 clique 1 base 0];
# PT = nonlocal escaped null
_28 = MEM[(double * restrict *)_26 clique 1 base 0];
..
MEM[(double *)_28 clique 1 base 0] = _29;
_31 = MEM[(double *)_25 + 8B clique 1 base 0];
while w/o unions we have
# PT = null { D.2686 } (nonlocal, restrict)
_25 = MEM[(double * restrict *)_21 clique 1 base 1];
..
_29 = MEM[(double *)_25 clique 1 base 2];
that is, the indirect loads from non-union members produce restricted
pointers while those from union members not.
The reason for this is that points-to analysis doesn't handle unions
in field-sensitive analysis and thus the restrict code doesn't apply.
This can probably be fixed in a reasonable manner in
push_fields_onto_fieldstack
by initializing only_restrict_pointers appropriately for the UNION case.
Not really my top-priority though.
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49774
[Bug 49774] [meta-bug] restrict qualification aliasing issues