https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89546

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The gimple dumps aren't exactly readable with so many different tuple/type etc.
types, where it is unclear what exact offset is something being stored at.
That said, in cplxlower1 I still see a possibility to get there the desired
value of 2:
  MEM[(struct tupleD.7416 &)&merged2D.7477 + 4].headD.7482.payloadD.6716 = 2;
...
  D.9878.headD.7889 = MEM[(const struct type_nD.6356 &)&merged2D.7477 + 4];
  MEM[(struct  &)&D.9880] ={v} {CLOBBER};
  D.9880.headD.7099 = MEM[(const struct type_nD.6356 &)&D.9878];
  D.9878 ={v} {CLOBBER};
  MEM[(struct tupleD.6387 *)&D.9880 + 4B] = 4;
  D.9881 = D.9880;
  MEM[(struct  &)&D.9874] ={v} {CLOBBER};
  D.9874.headD.7096 = MEM[(const struct type_nD.6355 &)&merged2D.7477 + 8];
  D.9874.tailD.7097 = D.9881;
  D.9881 ={v} {CLOBBER};
  D.9880 ={v} {CLOBBER};
  D.9873 = D.9874;
  MEM[(struct  &)&D.9865] ={v} {CLOBBER};
  D.9865.tailD.7802 = D.9873;
  D.9873 ={v} {CLOBBER};
  D.9874 ={v} {CLOBBER};
  D.9875 ={v} {CLOBBER};
  D.9868 = MEM[(const struct tupleD.6387 &)&D.9865 + 8];
  D.9869.tailD.8063 = D.9868;
  SR.34_37 = MEM[(struct tupleD.6387 *)&D.9868 + 4B];
  D.9868 ={v} {CLOBBER};
  MEM[(struct  &)&D.9870] ={v} {CLOBBER};
  D.9870.headD.7099 = MEM[(const struct type_nD.6356 &)&D.9869 + 4];
  MEM[(struct  &)&n1D.7646] ={v} {CLOBBER};
  MEM[(struct tupleD.6387 *)&D.9870 + 4B] = SR.34_37;
  n1D.7646.tailD.7097 = D.9870;
  D.9870 ={v} {CLOBBER};
  D.9869 ={v} {CLOBBER};
  D.9865 ={v} {CLOBBER};
  _2 = n1D.7646.tailD.7097.headD.7099.payloadD.6716;
  if (_2 != 2)
But in the sra pass dump that possibility is gone:
  MEM[(struct  &)&n1D.7646] ={v} {CLOBBER};
  SR.41_6 = SR.34_37;
  MEM[(struct tupleD.6387 *)&n1D.7646 + 8B] = SR.41_6;
  n1$tail$head$payload_90 = MEM[(struct tupleD.6387 *)&n1D.7646 + 4B];
...
  _2 = n1$tail$head$payload_90;
  if (_2 != 2)

Reply via email to