On Wed, 29 Apr 2020, Jakub Jelinek wrote: > On Tue, Apr 28, 2020 at 11:16:13AM +0200, Richard Biener wrote: > > I think we generally want to use :s, but OTOH even for your new case, > > since you restrict to nop-conversions, :s isn't strictly needed since > > VN should know how to materialize nop-converted variants. I think > > it's different for the 2nd case you add since there we deal with > > bitops in different sign. > > > > So maybe just remove the single_use () calls? > > I've tried doing that, but that regresses e.g. > void bar (unsigned int, unsigned int); > > unsigned int > foo (int x, int y) > { > unsigned int x2 = x; > unsigned int y2 = y; > bar (x2, y2); > return x2 | y2; > } > > @@ -6,12 +6,14 @@ foo (int x, int y) > unsigned int y2; > unsigned int x2; > unsigned int _7; > + int _8; > > <bb 2> [local count: 1073741824]: > x2_2 = (unsigned int) x_1(D); > y2_4 = (unsigned int) y_3(D); > bar (x2_2, y2_4); > - _7 = x2_2 | y2_4; > + _8 = x_1(D) | y_3(D); > + _7 = (unsigned int) _8; > return _7; > > } > > As the patch was meant purely as an IL size optimization, that is not the > case here.
Hmm OK. Let's go with your original patch then for GCC 11. Richard. > > > Or should I e.g. move this GIMPLE rule as a separate simplify (under the > > > same for) and then use :s in there? > > > > That wouldn't work, if a structural pattern matched others are not > > considered so it wouldn't ever be used. genmatch even warns for this > > I think. > > Ah, ok. > > Jakub > > -- Richard Biener <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)