[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