Upps, one comment I missed ----- Original Message ----- > On 11/21/13 08:15, Kai Tietz wrote: > > WHen I looked over a bunch of .i files, the results were mixed. > Sometimes better, sometimes worse without any clear bias. > > So here's an example that gets worse: > > > *************** rshift_double (long unsigned int l1, lon > *** 651,661 **** > _29 = (long int) _28; > *hv_13(D) = _29; > _31 = l1_9(D) >> _27; > ! _32 = (unsigned int) count_4(D); > ! _33 = 63 - _32; > ! _34 = (int) _33; > ! _35 = h1.18_26 << _34; > ! _36 = _35 << 1; > _37 = _36 | _31; > *lv_12(D) = _37; > ;; succ: 11 > --- 652,663 ---- > _29 = (long int) _28; > *hv_13(D) = _29; > _31 = l1_9(D) >> _27; > ! _33 = (unsigned int) count_4(D); > ! _34 = 63 - _33; > ! _35 = (int) _34; > ! _71 = h1_10(D) << _35; > ! _32 = _71 << 1; > ! _36 = (long unsigned int) _32; > _37 = _36 | _31; > *lv_12(D) = _37; >
This sample doesn't show that expression got more type-casts as before. You simmply missed to show the reduced single-use statement h1.18_26, which got removed by the patch. I bet that within that statement the cast to unsigned long int is to be found, which got raised out of the shift-statement. Kai