https://gcc.gnu.org/bugzilla/show_bug.cgi?id=10050
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution|--- |INVALID --- Comment #12 from Andrew Pinski <pinskia at gcc dot gnu.org> --- (In reply to Andrew Pinski from comment #11) > Note for func2 we get: > > if (flag.0_2 != 0) > goto <bb 4>; [50.00%] > else > goto <bb 3>; [50.00%] > > <bb 3> [local count: 536870912]: > pretmp_18 = *a_10(D); > pretmp_20 = MEM[(int *)a_10(D) + 4B]; > goto <bb 5>; [100.00%] > > <bb 4> [local count: 536870913]: > *a_10(D) = _9; > MEM[(int *)a_10(D) + 4B] = _1; > > <bb 5> [local count: 1073741824]: > # prephitmp_19 = PHI <pretmp_18(3), _9(4)> > # prephitmp_21 = PHI <pretmp_20(3), _1(4)> > > the conditional stores are correct if not supplying -fallow-store-data-races > . Now GCC does not optimize this even with -fallow-store-data-races but > maybe it could. So looking into this again, it can't because if a is pointing to read only memory and doing a store to it when `!flag` would cause a crash. So there is nothing to be done here so closing as invalid for func2