ipa-pure-const.c (struct funct_state_d): Add can_free field.
authorJakub Jelinek <jakub@redhat.com>
Fri, 14 Nov 2014 17:46:50 +0000 (18:46 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 14 Nov 2014 17:46:50 +0000 (18:46 +0100)
commit8413ca874e088161ca0fbc3bf3a98cffc45564f3
treea5f3f2ac60cf67edecc73331df1bbb55654423a3
parentab9a4330370dccbb9559c4edf032f49e925e951c
ipa-pure-const.c (struct funct_state_d): Add can_free field.

* 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.

From-SVN: r217582
gcc/ChangeLog
gcc/cgraph.c
gcc/cgraph.h
gcc/gimple.c
gcc/ipa-pure-const.c
gcc/lto-cgraph.c