[RFC, PATCH 2/n] IPA C++ refactoring

Martin Liška mliska@suse.cz
Thu Jul 17 16:56:00 GMT 2014


On 07/17/2014 05:43 PM, Jan Hubicka wrote:
>> Bootstrapped/regtested x86_64-linux
>>
>> Ready for trunk?
>>
>> gcc/ChangeLog:
>> 2014-07-17  Martin Liska  <mliska@suse.cz>
>>
>>    * cgraph.h (varpool_node):
>>    (availability get_availability (void)):
>>      created from cgraph_variable_initializer_availability
>>    (inline varpool_node *ultimate_alias_target (availability *availability = NULL)
>>      creted from: cgraph_variable_initializer_availability
>>    (inline varpool_node *get_alias_target (void)): created from varpool_alias_target
>>    (void finalize_named_section_flags (void)):
>>      created from varpool_finalize_named_section_flags
>>    (bool assemble_decl (void)): created from varpool_assemble_decl
>>    (void analyze (void)): created from varpool_analyze_node
>>    (bool call_for_node_and_aliases (bool (*callback) (varpool_node *, void *),
>>      void *data, bool include_overwritable)): created fromvarpool_for_node_and_aliases
>>    (void remove_initializer (void)): created from varpool_remove_initializer
>>    (tree get_constructor (void)): created from varpool_get_constructor
>>    (bool externally_visible_p (void)): created from varpool_externally_visible_p
>>    (bool ctor_useable_for_folding_p (void)): created from varpool_ctor_useable_for_folding_p
>>    (inline bool all_refs_explicit_p ()): created from varpool_all_refs_explicit_p
>>    (inline bool can_remove_if_no_refs_p (void)): created from varpool_can_remove_if_no_refs
>>    (static inline varpool_node *get (const_tree decl)): created from varpool_get_node
>>    (static void finalize_decl (tree decl)): created from varpool_finalize_decl
>>    (static bool output_variables (void)): created from varpool_output_variables
>>    (static varpool_node * extra_name_alias (tree alias, tree decl)):
>>      created from varpool_extra_name_alias
>>    (static varpool_node * create_alias (tree, tree)): created from varpool_create_variable_alias
>>    (static void dump_varpool (FILE *f)): created from dump_varpool
>>    (static void DEBUG_FUNCTION debug_varpool (void)): created from debug_varpool
>>    (static varpool_node *create_empty (void)): created from varpool_create_empty_node
>>    (static varpool_node *symbol_for_decl (tree decl)): created from varpool_node_for_decl
>>    (static varpool_node *symbol_for_asmname (tree asmname)): created from varpool_node_for_asm
>>    (void assemble_aliases (void)): created from assemble_aliases
>>
>> +  /* Dump given varpool node to F.  */
>> +  void dump (FILE *f);
>> +
>> +  /* Dump given varpool node to stderr.  */
>> +  void DEBUG_FUNCTION debug (void);
>> +
>> +  /* Remove variable from symbol table.  */
>> +  void remove (void);
>> +
>> +  /* Return variable availability.  */
>> +  availability get_availability (void);
>> +
>> +  /* For given variable pool node, walk the alias chain to return the function
>> +     the variable is alias of. Do not walk through thunks.
>> +     When AVAILABILITY is non-NULL, get minimal availability in the chain.  */
>> +  inline varpool_node *ultimate_alias_target
>> +    (availability *availability = NULL);
>> +
>> +  /* Return node that alias is aliasing.  */
>> +  inline varpool_node *get_alias_target (void);
>> +
>> +  /* For variables in named sections make sure get_variable_section
>> +     is called before we switch to those sections.  Then section
>> +     conflicts between read-only and read-only requiring relocations
>> +     sections can be resolved.  */
>> +  void finalize_named_section_flags (void);
> Quite special, so it should go bellow the other declarations.
>> +
>> +  /* Output one variable, if necessary.  Return whether we output it.  */
>> +  bool assemble_decl (void);
>> +
>> +  void analyze (void);
>> +
>> +  /* Call calback on varpool symbol and aliases associated to varpool symbol.
>> +     When INCLUDE_OVERWRITABLE is false, overwritable aliases and thunks are
>> +     skipped. */
>> +  bool call_for_node_and_aliases (bool (*callback) (varpool_node *, void *),
>> +				  void *data,
>> +				   bool include_overwritable);
>> +
>> +  /* Remove node initializer when it is no longer needed.  */
>> +  void remove_initializer (void);
>> +
>> +  /* When doing LTO, read variable's constructor from disk if
>> +     it is not already present.  */
>> +  tree get_constructor (void);
>> +
>> +  /* Return true when variable should be considered externally visible.  */
>> +  bool externally_visible_p (void);
> We have flag and this helper function to set it.  Probably the comment should
> mention that this is not to be used except for varpool maintenance code.
What function do you mean please?
>> +
>> +  /* Return true if variable has constructor that can be used for folding.  */
>> +  bool ctor_useable_for_folding_p (void);
> Group it with get_constructor and move earlier in the list (probably basic manipulation
> first, constructor next, aliases and random predicates last)
>> +
>> +  /* Return true when all references to variable must be visible
>> +     in ipa_ref_list.
>> +     i.e. if the variable is not externally visible or not used in some magic
>> +     way (asm statement or such).
>> +     The magic uses are all summarized in force_output flag.  */
>> +  inline bool all_refs_explicit_p ();
>> +
>> +  /* Return true when variable can be removed from variable pool
>> +     if all direct calls are eliminated.  */
>> +  inline bool can_remove_if_no_refs_p (void);
>> +
>> +  /* Return varpool node for given symbol and check it is a function. */
>> +  static inline varpool_node *get (const_tree decl);
>> +
>> +  /* Mark DECL as finalized.  By finalizing the declaration, frontend instruct
>> +     the middle end to output the variable to asm file, if needed or externally
>> +     visible.  */
>> +  static void finalize_decl (tree decl);
>> +
>> +  /* Output all variables enqueued to be assembled.  */
>> +  static bool output_variables (void);
>> +
>> +  /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
>> +     Extra name aliases are output whenever DECL is output.  */
>> +  static varpool_node * extra_name_alias (tree alias, tree decl);
> create_extra_name_alias
Renamed.
>> +
>> +  /* Attempt to mark ALIAS as an alias to DECL.  Return TRUE if successful.
>> +     Extra name aliases are output whenever DECL is output.  */
>> +  static varpool_node * create_alias (tree, tree);
>> +
>> +  /* Dump the variable pool to F.  */
>> +  static void dump_varpool (FILE *f);
>> +
>> +  /* Dump the variable pool to stderr.  */
>> +  static void DEBUG_FUNCTION debug_varpool (void);
>> +
>> +  /* Allocate new callgraph node and insert it into basic data structures.  */
>> +  static varpool_node *create_empty (void);
>> +
>> +  /* Return varpool node assigned to DECL.  Create new one when needed.  */
>> +  static varpool_node *symbol_for_decl (tree decl);
> This is equivalent of get_create in cgraph, so lets call it the same way.
You are right, I found one more member that I renamed: get_for_asmname.

I hope reorganization of varpool_node looks fine?

Martin
>> +
>> +  /* Given an assembler name, lookup node.  */
>> +  static varpool_node *symbol_for_asmname (tree asmname);
> Also please double heck it match the cgraph equivalent.
>
> OK with those changes.
> Honza

-------------- next part --------------
A non-text attachment was scrubbed...
Name: ipa-ref-varpool-node4.patch
Type: text/x-patch
Size: 71616 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20140717/095c1aef/attachment.bin>


More information about the Gcc-patches mailing list