On Fri, 2013-11-01 at 22:57 +0100, Jakub Jelinek wrote: > On Fri, Nov 01, 2013 at 05:47:14PM -0400, Andrew MacLeod wrote: > > On 11/01/2013 05:41 PM, Jakub Jelinek wrote: > > >On Fri, Nov 01, 2013 at 05:36:34PM -0400, Andrew MacLeod wrote: > > >> static inline void > > >>! gimple_call_set_lhs (gimple gs, tree lhs) > > >> { > > >>- GIMPLE_CHECK (gs, GIMPLE_CALL); > > The checking you are removing here. > > > What checking? There ought to be no checking at all in this > > example... gimple_build_call_vec returns a gimple_call, and > > gimple_call_set_lhs() doesn't have to check anything because it > > only accepts gimple_call's.. so there is no checking other than the > > usual "does my parameter match" that the compiler has to do... > > and want to replace it by checking of the types at compile time. > The problem is that it uglifies the source too much, and, when you > actually don't have a gimple_call but supposedly a base class of it, > I expect you'd do as_a which is not only further uglification, but has > runtime cost also for --enable-checking=release.
I can have a look next week at every call to gimple_call_set_lhs in the tree, and see to what extent we know at compile-time that the initial arg is indeed a call (of the ones I quickly grepped just now, most are from gimple_build_call and friends, but one was from a gimple_copy). FWIW I did some performance testing of the is_a/as_a code in the earlier version of the patch, and it didn't have a noticable runtime cost compared to the GIMPLE_CHECK in the existing code: Size of compiler executable: http://gcc.gnu.org/ml/gcc-patches/2013-08/msg01920.html Compile times: http://gcc.gnu.org/ml/gcc-patches/2013-09/msg00171.html Dave