https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80304
Bernd Edlinger <bernd.edlinger at hotmail dot de> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |bernd.edlinger at hotmail dot de --- Comment #17 from Bernd Edlinger <bernd.edlinger at hotmail dot de> --- (In reply to Thomas Koenig from comment #15) > Also fails on powerpc64-unknown-linux-gnu. > > r239317 works, r239326 fails, and also appears to be the only > patch in the vicinity that does anything about loops. > > Could this be the cause? > > Author: edlinger > Date: Fri Aug 12 19:30:39 2016 > New Revision: 239426 > > URL: https://gcc.gnu.org/viewcvs?rev=239426&root=gcc&view=rev > Log: > 2016-08-12 Bernd Edlinger <bernd.edlin...@hotmail.de> > > PR tree-optimization/71083 > * tree-predcom.c (ref_at_iteration): Use a COMPONENT_REF for the > bitfield access when possible. > > Modified: > trunk/gcc/ChangeLog > trunk/gcc/tree-predcom.c I really doubt that, because that optimization pass is only used at -O3. What I can see is that at -O1 -fno-inline the *.optimized simply does not initialize i: sub () { unsigned int ivtmp.38; integer(kind=4) j.28; real(kind=4) D.3534; real(kind=4) D.3527; struct __st_parameter_dt dt_parm.4; integer(kind=4) j.1; integer(kind=4) i.0; integer(kind=8) _2; integer(kind=8) _3; real(kind=4) _7; real(kind=4) _8; real(kind=4) _13; real(kind=4) _15; real(kind=4) _24; real(kind=4) val.8_25; struct FRAME.test * _26; sizetype _39; real(kind=4) val.5_48; real(kind=4) val.8_55; real(kind=4) val.5_71; real(kind=4) _72; sizetype _76; real(kind=4) _101; real(kind=4) _103; real(kind=4) _113; real(kind=4) val.8_114; real(kind=4) _116; real(kind=4) val.8_117; real(kind=4) _125; real(kind=4) val.5_126; real(kind=4) _128; real(kind=4) val.5_129; <bb 2> [6.83%]: CHAIN.19_29(D)->a = {}; CHAIN.19_29(D)->b = {}; j.1 = 0; <bb 3> [13.67%]: # ivtmp.38_68 = PHI <ivtmp.38_1(3), 0(2)> j.28_86 = (integer(kind=4)) ivtmp.38_68; _2 = (integer(kind=8)) j.28_86; _3 = _2 * 2; _101 = add (&i.0); so it is clear why that can not work. at .gimple it was initialized: sub () { logical(kind=1) D.3551; logical(kind=1) D.3554; a = {}; b = {}; { integer(kind=4) i.0; integer(kind=4) j.1; try { { integer(kind=4) count.2; integer(kind=4) count.3; j.1 = 0; count.3 = 2; <D.3550>: _1 = count.3 <= 0; D.3551 = ANNOTATE (_1, 0); if (D.3551 != 0) goto L.3; else goto <D.3552>; <D.3552>: i.0 = 0; count.2 = 2; <D.3553>: _2 = count.2 <= 0; D.3554 = ANNOTATE (_2, 0); if (D.3554 != 0) goto L.2; else goto <D.3555>; <D.3555>: j.12_3 = j.1; _4 = (integer(kind=8)) j.12_3; _5 = _4 * 2; i.13_6 = i.0; _7 = (integer(kind=8)) i.13_6; _8 = _5 + _7; _9 = add (&i.0);