http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52890
Pat Haugen <pthaugen at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |NEW --- Comment #7 from Pat Haugen <pthaugen at gcc dot gnu.org> 2012-04-11 18:34:55 UTC --- I observed similar behavior on loads (8-byte loads transformed to sequence of byte loads/shifts/ors) with r185470, unaligned read patch. This caused some sizable degradation on a few benchmarks also.-fno-tree-sra had no effect on the unaligned load case. Reduced testcase: // g++ -S -m64 -O2 -mcpu=power7 load.cc typedef int ggBoolean; class mrSurface { }; template < class T > class ggTrain { public:ggBoolean Append (T item); T operator[] (int i) const { return data[i]; } private: T * data; int nData; }; class mrSurfaceList:public mrSurface { virtual void viewingHit () const; protected: ggTrain < mrSurface * >surfaces; }; extern mrSurface *sPtr; void mrSurfaceList::viewingHit () const { sPtr = surfaces[1]; } 150r.expand: D.2562_3 = MEM[(const struct ggTrain *)this_1(D) + 8B]; D.2560_11 = MEM[(struct mrSurface * *)D.2562_3 + 8B]; sPtr = D.2560_11; The first MEM[...] gets expanded to the sequence of lbzs/shifts/ors.