Cgraph alias reorg 11/14 (stream indirect call jump functions)

Jan Hubicka hubicka@ucw.cz
Fri Jun 10 16:06:00 GMT 2011


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



More information about the Gcc-patches mailing list