> gcc/testsuite/ChangeLog: > > 2016-10-25 Kugan Vivekanandarajah <kug...@linaro.org> > > * gcc.dg/ipa/vrp7.c: New test. > > > gcc/ChangeLog: > > 2016-10-25 Kugan Vivekanandarajah <kug...@linaro.org> > > * ipa-cp.c (ipa_get_jf_pass_through_result): Skip unary expressions. > (propagate_vr_accross_jump_function): Handle unary expressions. > (propagate_constants_accross_call): Pass param type to > propagate_vr_accross_jump_function. > * ipa-prop.c (load_from_param): Renamed from load_from_unmodified_param. > Also handles unary expr. > (ipa_set_jf_unary_pass_through): New. > (ipa_load_from_parm_agg): Renamed load_from_unmodified_param. > (compute_complex_assign_jump_func): Handle unary expressions. > (ipa_write_jump_function): Likewise. > (ipa_read_jump_function): Likewise. > * ipa-prop.h: export ipa_get_callee_param_type.
> diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c > index 1dc5cb6..d0dc3d7 100644 > --- a/gcc/ipa-cp.c > +++ b/gcc/ipa-cp.c > @@ -122,6 +122,7 @@ along with GCC; see the file COPYING3. If not see > #include "ipa-inline.h" > #include "ipa-utils.h" > #include "tree-ssa-ccp.h" > +#include "gimple.h" > > template <typename valtype> class ipcp_value; > > @@ -1221,7 +1222,12 @@ ipa_get_jf_pass_through_result (struct ipa_jump_func > *jfunc, tree input) > > if (ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR) > return input; > - if (!is_gimple_ip_invariant (input)) > + > + if (!is_gimple_ip_invariant (input) > + /* TODO: Unary expressions are not handles in ipa constant > + propagation. */ handled. I would expect them to be already folded here? I would expect that hanlding unary expressions in constant propagation is no harder than for VRP? > + || (TREE_CODE_CLASS (ipa_get_jf_pass_through_operation (jfunc)) > + == tcc_unary)) > return NULL_TREE; > > if (TREE_CODE_CLASS (ipa_get_jf_pass_through_operation (jfunc)) > @@ -1845,7 +1851,8 @@ propagate_bits_accross_jump_function (cgraph_edge *cs, > int idx, ipa_jump_func *j > static bool > propagate_vr_accross_jump_function (cgraph_edge *cs, > ipa_jump_func *jfunc, > - struct ipcp_param_lattices *dest_plats) > + struct ipcp_param_lattices *dest_plats, > + tree param_type) New param needs comment. Patch is OK with changes Martin suggested. Honza