Hi,
this patch adds removal of ipa_edge_args_sum for the inlined edges.
It turns out that those are still needed for described uses (though I am
not sure why described uses are counted across all inline duplicates
rather than handled for each of them independently), so I keep those.

Bootstrapped/regtested x86_64-linux, comitted.

Honza

        * ipa-prop.c (ipa_propagate_indirect_call_infos): Remove ipa edge
        args summaries of inlined edge unless it holds info about
        described reference.

Index: ipa-prop.c
===================================================================
--- ipa-prop.c  (revision 278016)
+++ ipa-prop.c  (working copy)
@@ -3727,6 +3727,26 @@ ipa_propagate_indirect_call_infos (struc
   changed = propagate_info_to_inlined_callees (cs, cs->callee, new_edges);
   ipa_node_params_sum->remove (cs->callee);
 
+  class ipa_edge_args *args = IPA_EDGE_REF (cs);
+  if (args)
+    {
+      bool ok = true;
+      if (args->jump_functions)
+       {
+         struct ipa_jump_func *jf;
+         int i;
+         FOR_EACH_VEC_ELT (*args->jump_functions, i, jf)
+           if (jf->type == IPA_JF_CONST
+               && ipa_get_jf_constant_rdesc (jf))
+             {
+               ok = false;
+               break;
+             }
+       }
+      if (ok)
+        ipa_edge_args_sum->remove (cs);
+    }
+
   return changed;
 }
 

Reply via email to