On Fri, 6 Mar 2009, Paolo Bonzini wrote: > Joseph S. Myers wrote: > > On Fri, 6 Mar 2009, Geert Bosch wrote: > > > >>> this task may be more difficult. So lowering them early during > >>> gimplification looks like a more reasonable plan IMHO. > >> Right, that was my intention. Still, I'll need to add code to > >> handle the new tree codes in fold(), right? > > > > If you add new trapping codes to GENERIC I'd recommend *not* making fold() > > handle them. > > Constant folding should be done for them, though.
Yes, constant folding should be done, so that very tiny subset of fold needs to handle them. The vast bulk of fold that does other more complicated transformations should not, in my view. (There may be isolated transformations that are safe for these codes. For example, you could transform (x *trap 2) *trap 2 to x *trap 4 (this is a case where two traps can become one), but not (x *trap 2) *trap 0 to x *trap 0 or (x *trap -1) *trap -1 to x *trap 1. I think however it would be reasonable to replace -ftrapv without going through all fold transformations to enable the safe ones for the new tree codes; it's better to start by making it reliable and then look at cases where it can be made to generate better code. And I expect that a large proportion of what fold does is not safe for trapping codes.) -- Joseph S. Myers jos...@codesourcery.com