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