http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59374

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
  bar = myalloc (); [return slot optimization]

  <bb 3>:
  _22 = MEM[(struct Bar * const &)&bar + 8];
  MEM[(struct Bar * &)&bar + 8] = 0B;
  MEM[(struct Foo * &)&foo + 8] = _22;
  _23 = MEM[(const struct BarDelete *)&bar].D.39226.alloc_;
  MEM[(struct deleter_type *)&foo] = _23;
  _7 = std::operator<< <std::char_traits<char> > (&cout, "p ");

is vectorized to

  bar = myalloc (); [return slot optimization]

  <bb 3>:
  _22 = MEM[(struct Bar * const &)&bar + 8];
  MEM[(struct Bar * &)&bar + 8] = 0B;
  vectp.87_1 = &MEM[(const struct BarDelete *)&bar].D.39226.alloc_;
  vect__23.88_36 = MEM[(const struct BarDelete *)vectp.87_1];
  _23 = MEM[(const struct BarDelete *)&bar].D.39226.alloc_;
  vectp.90_37 = &foo;
  MEM[(struct deleter_type *)vectp.90_37] = vect__23.88_36;
  _7 = std::operator<< <std::char_traits<char> > (&cout, "p ");

obvious violating a WAR dependency.  I'm sure it was me who broke this.

Reply via email to