> On Thu, Nov 13, 2014 at 12:52:21PM +0100, Jakub Jelinek wrote: > > On Thu, Nov 13, 2014 at 09:39:42AM +0100, Jakub Jelinek wrote: > > > What about the: > > > > > I wonder if the nonfreeing_call_p function shouldn't be moved > > > > > elsewhere > > > > > though (suggestion where), so that gimple.c doesn't need the cgraph > > > > > includes. > > > question though (maybe it is more on Richard)? > > > > Tried richi's suggested cgraph.[ch], but that meant all users of > > nonfreeing_call_p had to start including all of ipa-ref.h, lto-streamer.h > > and cgraph.h, so it is probably better to keep it in gimple.[ch]. > > Here is a new version, which also handles IFN_ABNORMAL_DISPATCHER as > nonfreeing, it doesn't really call anything, just connect abnormal edges. > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? > > 2014-11-14 Jakub Jelinek <ja...@redhat.com> > > * ipa-pure-const.c (struct funct_state_d): Add can_free field. > (varying_state): Add true for can_free. > (check_call): For builtin or internal !nonfreeing_call_p set > local->can_free. > (check_stmt): For asm volatile and asm with "memory" set > local->can_free. > (analyze_function): Clear local->can_free initially, continue > calling check_stmt until all flags are computed, dump can_free > flag. > (pure_const_write_summary): Write can_free flag. > (pure_const_read_summary): Read it back. > (propagate_pure_const): Propagate also can_free flag, set > w->nonfreeing_fn if it is false after propagation. > * cgraph.h (cgraph_node): Add nonfreeing_fn member. > * gimple.c: Include ipa-ref.h, lto-streamer.h and cgraph.h. > (nonfreeing_call_p): Return cgraph nonfreeing_fn flag if set. > Also return true for IFN_ABNORMAL_DISPATCHER. > * cgraph.c (cgraph_node::dump): Dump nonfreeing_fn flag. > * lto-cgraph.c (lto_output_node): Write nonfreeing_fn flag. > (input_overwrite_node): Read it back.
OK, thanks Honza