Hi,
this patch fixes omission I noticed while debugging unrelated problem.  While
we compute jump functions for indirect calls (so they can possibly be used after
the indirect calls become direct) we forget to stream them.

Fixed thus. Regtested/bootstrapped x86_64-linux, will commit it shortly.

Honza

        * ipa-prop.c (ipa_write_node_info): Stream jump functions for indirect
        calls.
        (ipa_read_node_info): Likewise.
Index: ipa-prop.c
===================================================================
*** ipa-prop.c  (revision 174911)
--- ipa-prop.c  (working copy)
*************** ipa_write_node_info (struct output_block
*** 2833,2839 ****
        ipa_write_jump_function (ob, ipa_get_ith_jump_func (args, j));
      }
    for (e = node->indirect_calls; e; e = e->next_callee)
!     ipa_write_indirect_edge_info (ob, e);
  }
  
  /* Stream in NODE info from IB.  */
--- 2833,2847 ----
        ipa_write_jump_function (ob, ipa_get_ith_jump_func (args, j));
      }
    for (e = node->indirect_calls; e; e = e->next_callee)
!     {
!       struct ipa_edge_args *args = IPA_EDGE_REF (e);
! 
!       lto_output_uleb128_stream (ob->main_stream,
!                                ipa_get_cs_argument_count (args));
!       for (j = 0; j < ipa_get_cs_argument_count (args); j++)
!       ipa_write_jump_function (ob, ipa_get_ith_jump_func (args, j));
!       ipa_write_indirect_edge_info (ob, e);
!     }
  }
  
  /* Stream in NODE info from IB.  */
*************** ipa_read_node_info (struct lto_input_blo
*** 2871,2877 ****
        ipa_read_jump_function (ib, ipa_get_ith_jump_func (args, k), data_in);
      }
    for (e = node->indirect_calls; e; e = e->next_callee)
!     ipa_read_indirect_edge_info (ib, data_in, e);
  }
  
  /* Write jump functions for nodes in SET.  */
--- 2879,2898 ----
        ipa_read_jump_function (ib, ipa_get_ith_jump_func (args, k), data_in);
      }
    for (e = node->indirect_calls; e; e = e->next_callee)
!     {
!       struct ipa_edge_args *args = IPA_EDGE_REF (e);
!       int count = lto_input_uleb128 (ib);
! 
!       ipa_set_cs_argument_count (args, count);
!       if (!count)
!       continue;
! 
!       args->jump_functions = ggc_alloc_cleared_vec_ipa_jump_func
!       (ipa_get_cs_argument_count (args));
!       for (k = 0; k < ipa_get_cs_argument_count (args); k++)
!       ipa_read_jump_function (ib, ipa_get_ith_jump_func (args, k), data_in);
!       ipa_read_indirect_edge_info (ib, data_in, e);
!     }
  }
  
  /* Write jump functions for nodes in SET.  */

Reply via email to