On Tue, Nov 19, 2019 at 11:20:16AM +0100, Martin Liška wrote: > On 11/19/19 10:12 AM, Jakub Jelinek wrote: > > On Mon, Nov 18, 2019 at 03:34:35PM +0100, Martin Liška wrote: > > > > Now, I believe with the if to gswitch optimization these will only > > > > rarely > > > > kick in, because the IL will have switches that reassoc doesn't handle, > > > > instead of series of ifs. > > > > > > Yes, so my question is whether reassoc can handle gswitch statements > > > similar > > > to series of if statements? Note that use can write explicitly something > > > like: > > > > I don't see how. Either the cswitch pass runs early, and then you need to > > take it into account when deciding whether to expand it as series of ifs or > > table lookup or bittest (say, realize you'd need just a single condition to > > cover everything and go with if series), or it runs late and then on the > > other side if reassoc turned gswitch into if series without taking into > > account other possibilities like table lookup, it could pessimize stuff. > > So, IMHO cswitch should he able to do this too. > > I agree with you that we should teach switch lowering to also consider the > transformation that reassoc does. I understand it as a generalized bit test, > and I would be happy to implement that on gswitch level. Which leads us > back to need for if-to-switch conversion pass that will enable such > optimization.
The point I'm trying to make is that with if-to-switch, if cswitch doesn't handle it, we have a regression. If user writes it as a switch, it is a missed optimization if we generate worse code than we could, but not a regression. Jakub