2003-02-22 11:02:31 +01:00
|
|
|
/* Callgraph handling code.
|
alias.c, [...]: Update copyright.
* alias.c, basic-block.h, c-common.c, c-common.h,
c-cppbuiltin.c, c-opts.c, c-pragma.c, c-pretty-print.c,
calls.c, cfg.c, cfgcleanup.c, cfgrtl.c, cgraph.h, collect2.c,
combine.c, cppcharset.c, cpphash.h, cppinit.c, cpplib.c,
cpplib.h, cppmacro.c, crtstuff.c, cselib.c, cselib.h,
defaults.h, df.c, dominance.c, et-forest.c, expmed.c, expr.c,
expr.h, fix-header.c, function.h, gcc.c, gcse.c, genattrtab.c,
genautomata.c, genconditions.c, genemit.c, genflags.c,
gengtype.c, gengtype.h, genopinit.c, genrecog.c, gensupport.c,
ggc-zone.c, graph.c, haifa-sched.c, input.h, integrate.c,
langhooks-def.h, langhooks.c, langhooks.h, line-map.c,
line-map.h, local-alloc.c, optabs.c, optabs.h, postreload.c,
ra.h, recog.c, reg-stack.c, regmove.c, reload.c, reorg.c,
rtl.c, sched-deps.c, sched-ebb.c, sdbout.c, system.h,
target.h, targhooks.c, toplev.h, tree-inline.c, unwind-pe.h,
unwind.h, varray.c, varray.h: Update copyright.
From-SVN: r76302
2004-01-21 21:40:04 +01:00
|
|
|
Copyright (C) 2003, 2004 Free Software Foundation, Inc.
|
2003-02-22 11:02:31 +01:00
|
|
|
Contributed by Jan Hubicka
|
|
|
|
|
|
|
|
This file is part of GCC.
|
|
|
|
|
|
|
|
GCC is free software; you can redistribute it and/or modify it under
|
|
|
|
the terms of the GNU General Public License as published by the Free
|
|
|
|
Software Foundation; either version 2, or (at your option) any later
|
|
|
|
version.
|
|
|
|
|
|
|
|
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
|
|
for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with GCC; see the file COPYING. If not, write to the Free
|
|
|
|
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
|
|
|
|
02111-1307, USA. */
|
|
|
|
|
|
|
|
#ifndef GCC_CGRAPH_H
|
|
|
|
#define GCC_CGRAPH_H
|
|
|
|
|
2003-03-05 02:33:27 +01:00
|
|
|
/* Information about the function collected locally.
|
2003-09-10 21:16:20 +02:00
|
|
|
Available after function is analyzed. */
|
2003-03-05 02:33:27 +01:00
|
|
|
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
struct cgraph_local_info GTY(())
|
2003-03-05 02:33:27 +01:00
|
|
|
{
|
2004-01-14 23:54:50 +01:00
|
|
|
/* Size of the function before inlining. */
|
|
|
|
int self_insns;
|
|
|
|
|
2003-07-01 14:18:01 +02:00
|
|
|
/* Set when function function is visible in current compilation unit only
|
2003-03-05 02:33:27 +01:00
|
|
|
and it's address is never taken. */
|
|
|
|
bool local;
|
2003-07-02 02:14:44 +02:00
|
|
|
/* Set once it has been finalized so we consider it to be output. */
|
|
|
|
bool finalized;
|
cgraph.c (cgraph_max_uid): New global variable.
* cgraph.c (cgraph_max_uid): New global variable.
(cgraph_node): Set uid field.
(create_edge): Keep inline flags consistent.
(dump_cgraph): Dump more info.
* cgraph.h (struct cgraph_local_info): Remove inline_many and
can_inline_once; add inlinable, disgread_inline_limits, and self_insn
(struct cgraph_global_info): Add insns, calls, cloned_times,
will_be_output.
(struct cgraph_node): Add uid.
(struct cgraph_edge): Add inline_call.
(cgraph_max_uid, cgraph_inline_p): Declare.
* cgraph.c: Include params.h and fibheap.h
(cgraph_mark_functions_to_inline_once): Kill.
(INSNS_PER_CALL): New constant.
(ncalls_inlined, nfunctions_inlined, initial_insns, overall_insns): New
static variables.
(cgraph_finalize_function): Do not analyze inlining.
(cgraph_finalize_compilation_unit): Set inlining attributes.
(cgraph_mark_functions_to_output): More consistency checks.
(cgraph_optimize_function): Set current_function_decl to NULL.
(cgraph_expand_function): Use new inline flags.
(cgraph_postorder): Expand from cgraph_expand_functions.
(INLINED_TIMES, SET_INLINED_TIMES): New macros.
(cgraph_inlined_into, cgraph_inlined_callees,
cgraph_estimate_size_after_inlining, cgraph_estimate_growth,
cgraph_mark_inline, cgraph_check_inline_limits,
cgraph_default_inline_p, cgraph_decide_inling_of_small_functions,
cgraph_decide_inlining, cgraph_inline_p): New functions.
* params.def (PARAM_LARGE_FUNCTION_INSNS, PARAM_LARGE_FUNCTION_GROWTH,
PARAM_INLINE_UNIT_GROWTH): New parameters.
* tree-inline.c (struct inline_data): New field current_decl.
(expand_call_inline): Avoid forward declarations; use
inlinable_function_p.
(optimize_inline_calls): Set id.current_decl.
Co-Authored-By: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
From-SVN: r69262
2003-07-12 03:07:40 +02:00
|
|
|
|
2003-08-05 16:11:53 +02:00
|
|
|
/* False when there something makes inlining impossible (such as va_arg). */
|
cgraph.c (cgraph_max_uid): New global variable.
* cgraph.c (cgraph_max_uid): New global variable.
(cgraph_node): Set uid field.
(create_edge): Keep inline flags consistent.
(dump_cgraph): Dump more info.
* cgraph.h (struct cgraph_local_info): Remove inline_many and
can_inline_once; add inlinable, disgread_inline_limits, and self_insn
(struct cgraph_global_info): Add insns, calls, cloned_times,
will_be_output.
(struct cgraph_node): Add uid.
(struct cgraph_edge): Add inline_call.
(cgraph_max_uid, cgraph_inline_p): Declare.
* cgraph.c: Include params.h and fibheap.h
(cgraph_mark_functions_to_inline_once): Kill.
(INSNS_PER_CALL): New constant.
(ncalls_inlined, nfunctions_inlined, initial_insns, overall_insns): New
static variables.
(cgraph_finalize_function): Do not analyze inlining.
(cgraph_finalize_compilation_unit): Set inlining attributes.
(cgraph_mark_functions_to_output): More consistency checks.
(cgraph_optimize_function): Set current_function_decl to NULL.
(cgraph_expand_function): Use new inline flags.
(cgraph_postorder): Expand from cgraph_expand_functions.
(INLINED_TIMES, SET_INLINED_TIMES): New macros.
(cgraph_inlined_into, cgraph_inlined_callees,
cgraph_estimate_size_after_inlining, cgraph_estimate_growth,
cgraph_mark_inline, cgraph_check_inline_limits,
cgraph_default_inline_p, cgraph_decide_inling_of_small_functions,
cgraph_decide_inlining, cgraph_inline_p): New functions.
* params.def (PARAM_LARGE_FUNCTION_INSNS, PARAM_LARGE_FUNCTION_GROWTH,
PARAM_INLINE_UNIT_GROWTH): New parameters.
* tree-inline.c (struct inline_data): New field current_decl.
(expand_call_inline): Avoid forward declarations; use
inlinable_function_p.
(optimize_inline_calls): Set id.current_decl.
Co-Authored-By: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
From-SVN: r69262
2003-07-12 03:07:40 +02:00
|
|
|
bool inlinable;
|
|
|
|
/* True when function should be inlined independently on it's size. */
|
2003-08-05 16:11:53 +02:00
|
|
|
bool disregard_inline_limits;
|
2004-01-14 23:54:50 +01:00
|
|
|
/* True when the function has been originally extern inline, but it is
|
|
|
|
redefined now. */
|
|
|
|
bool redefined_extern_inline;
|
2003-03-05 02:33:27 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
/* Information about the function that needs to be computed globally
|
|
|
|
once compilation is finished. Available only with -funit-at-time. */
|
|
|
|
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
struct cgraph_global_info GTY(())
|
2003-03-05 02:33:27 +01:00
|
|
|
{
|
cgraph.c (cgraph_max_uid): New global variable.
* cgraph.c (cgraph_max_uid): New global variable.
(cgraph_node): Set uid field.
(create_edge): Keep inline flags consistent.
(dump_cgraph): Dump more info.
* cgraph.h (struct cgraph_local_info): Remove inline_many and
can_inline_once; add inlinable, disgread_inline_limits, and self_insn
(struct cgraph_global_info): Add insns, calls, cloned_times,
will_be_output.
(struct cgraph_node): Add uid.
(struct cgraph_edge): Add inline_call.
(cgraph_max_uid, cgraph_inline_p): Declare.
* cgraph.c: Include params.h and fibheap.h
(cgraph_mark_functions_to_inline_once): Kill.
(INSNS_PER_CALL): New constant.
(ncalls_inlined, nfunctions_inlined, initial_insns, overall_insns): New
static variables.
(cgraph_finalize_function): Do not analyze inlining.
(cgraph_finalize_compilation_unit): Set inlining attributes.
(cgraph_mark_functions_to_output): More consistency checks.
(cgraph_optimize_function): Set current_function_decl to NULL.
(cgraph_expand_function): Use new inline flags.
(cgraph_postorder): Expand from cgraph_expand_functions.
(INLINED_TIMES, SET_INLINED_TIMES): New macros.
(cgraph_inlined_into, cgraph_inlined_callees,
cgraph_estimate_size_after_inlining, cgraph_estimate_growth,
cgraph_mark_inline, cgraph_check_inline_limits,
cgraph_default_inline_p, cgraph_decide_inling_of_small_functions,
cgraph_decide_inlining, cgraph_inline_p): New functions.
* params.def (PARAM_LARGE_FUNCTION_INSNS, PARAM_LARGE_FUNCTION_GROWTH,
PARAM_INLINE_UNIT_GROWTH): New parameters.
* tree-inline.c (struct inline_data): New field current_decl.
(expand_call_inline): Avoid forward declarations; use
inlinable_function_p.
(optimize_inline_calls): Set id.current_decl.
Co-Authored-By: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
From-SVN: r69262
2003-07-12 03:07:40 +02:00
|
|
|
/* Estimated size of the function after inlining. */
|
|
|
|
int insns;
|
|
|
|
|
|
|
|
/* Number of times given function will be cloned during output. */
|
|
|
|
int cloned_times;
|
|
|
|
|
2004-01-14 23:54:50 +01:00
|
|
|
/* Set when the function will be inlined exactly once. */
|
|
|
|
bool inline_once;
|
|
|
|
|
cgraph.c (cgraph_max_uid): New global variable.
* cgraph.c (cgraph_max_uid): New global variable.
(cgraph_node): Set uid field.
(create_edge): Keep inline flags consistent.
(dump_cgraph): Dump more info.
* cgraph.h (struct cgraph_local_info): Remove inline_many and
can_inline_once; add inlinable, disgread_inline_limits, and self_insn
(struct cgraph_global_info): Add insns, calls, cloned_times,
will_be_output.
(struct cgraph_node): Add uid.
(struct cgraph_edge): Add inline_call.
(cgraph_max_uid, cgraph_inline_p): Declare.
* cgraph.c: Include params.h and fibheap.h
(cgraph_mark_functions_to_inline_once): Kill.
(INSNS_PER_CALL): New constant.
(ncalls_inlined, nfunctions_inlined, initial_insns, overall_insns): New
static variables.
(cgraph_finalize_function): Do not analyze inlining.
(cgraph_finalize_compilation_unit): Set inlining attributes.
(cgraph_mark_functions_to_output): More consistency checks.
(cgraph_optimize_function): Set current_function_decl to NULL.
(cgraph_expand_function): Use new inline flags.
(cgraph_postorder): Expand from cgraph_expand_functions.
(INLINED_TIMES, SET_INLINED_TIMES): New macros.
(cgraph_inlined_into, cgraph_inlined_callees,
cgraph_estimate_size_after_inlining, cgraph_estimate_growth,
cgraph_mark_inline, cgraph_check_inline_limits,
cgraph_default_inline_p, cgraph_decide_inling_of_small_functions,
cgraph_decide_inlining, cgraph_inline_p): New functions.
* params.def (PARAM_LARGE_FUNCTION_INSNS, PARAM_LARGE_FUNCTION_GROWTH,
PARAM_INLINE_UNIT_GROWTH): New parameters.
* tree-inline.c (struct inline_data): New field current_decl.
(expand_call_inline): Avoid forward declarations; use
inlinable_function_p.
(optimize_inline_calls): Set id.current_decl.
Co-Authored-By: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
From-SVN: r69262
2003-07-12 03:07:40 +02:00
|
|
|
/* Set to true for all reachable functions before inlining is decided.
|
|
|
|
Once we inline all calls to the function and the function is local,
|
|
|
|
it is set to false. */
|
|
|
|
bool will_be_output;
|
2003-10-22 13:58:10 +02:00
|
|
|
|
|
|
|
/* Set iff at least one of the caller edges has inline_call flag set. */
|
|
|
|
bool inlined;
|
2003-03-05 02:33:27 +01:00
|
|
|
};
|
|
|
|
|
2003-03-05 23:19:33 +01:00
|
|
|
/* Information about the function that is propagated by the RTL backend.
|
|
|
|
Available only for functions that has been already assembled. */
|
|
|
|
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
struct cgraph_rtl_info GTY(())
|
2003-03-05 23:19:33 +01:00
|
|
|
{
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
bool const_function;
|
|
|
|
bool pure_function;
|
2003-03-05 23:19:33 +01:00
|
|
|
int preferred_incoming_stack_boundary;
|
|
|
|
};
|
|
|
|
|
2003-03-05 02:33:27 +01:00
|
|
|
|
2003-12-13 05:11:23 +01:00
|
|
|
/* The cgraph data structure.
|
2003-07-01 14:18:01 +02:00
|
|
|
Each function decl has assigned cgraph_node listing callees and callers. */
|
2003-02-22 11:02:31 +01:00
|
|
|
|
2003-07-11 10:33:21 +02:00
|
|
|
struct cgraph_node GTY((chain_next ("%h.next"), chain_prev ("%h.previous")))
|
2003-02-22 11:02:31 +01:00
|
|
|
{
|
|
|
|
tree decl;
|
|
|
|
struct cgraph_edge *callees;
|
|
|
|
struct cgraph_edge *callers;
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
struct cgraph_node *next;
|
|
|
|
struct cgraph_node *previous;
|
2003-02-22 11:02:31 +01:00
|
|
|
/* For nested functions points to function the node is nested in. */
|
|
|
|
struct cgraph_node *origin;
|
|
|
|
/* Points to first nested function, if any. */
|
|
|
|
struct cgraph_node *nested;
|
|
|
|
/* Pointer to the next function with same origin, if any. */
|
|
|
|
struct cgraph_node *next_nested;
|
2003-07-02 02:17:38 +02:00
|
|
|
/* Pointer to the next function in cgraph_nodes_queue. */
|
|
|
|
struct cgraph_node *next_needed;
|
gengtype.c (create_option): New function.
* gengtype.c (create_option): New function.
* gengtype.h: Prototype it.
* gengtype-yacc.y (stringseq): New rule.
(option): Use create_option. Add new bare ID production. Use
stringseq, not STRING directly.
* alias.c, bitmap.c, c-decl.c, cgraph.h, cpplib.h, cselib.h
* dwarf2out.c, emit-rtl.c, function.h, lists.c, tree.h
* varray.h, config/alpha/alpha.c, cp/name-lookup.c, cp/parser.c
* f/com.c, java/builtins.c, java/expr.c, java/jcf.h, java/parse.h:
Use new shorter form of GTY markers.
* doc/gty.texi: Rewrite.
From-SVN: r80091
2004-03-30 21:19:06 +02:00
|
|
|
PTR GTY ((skip)) aux;
|
2003-02-22 11:02:31 +01:00
|
|
|
|
2004-01-14 23:54:50 +01:00
|
|
|
struct cgraph_local_info local;
|
|
|
|
struct cgraph_global_info global;
|
|
|
|
struct cgraph_rtl_info rtl;
|
|
|
|
/* Unique id of the node. */
|
|
|
|
int uid;
|
2003-02-22 11:02:31 +01:00
|
|
|
/* Set when function must be output - it is externally visible
|
|
|
|
or it's address is taken. */
|
|
|
|
bool needed;
|
|
|
|
/* Set when function is reachable by call from other function
|
2003-07-01 14:18:01 +02:00
|
|
|
that is either reachable or needed. */
|
2003-02-22 11:02:31 +01:00
|
|
|
bool reachable;
|
2003-09-10 21:16:20 +02:00
|
|
|
/* Set once the function has been instantiated and its callee
|
|
|
|
lists created. */
|
|
|
|
bool analyzed;
|
2003-02-22 11:02:31 +01:00
|
|
|
/* Set when function is scheduled to be assembled. */
|
|
|
|
bool output;
|
|
|
|
};
|
|
|
|
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
struct cgraph_edge GTY(())
|
2003-02-22 11:02:31 +01:00
|
|
|
{
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
struct cgraph_node *caller;
|
|
|
|
struct cgraph_node *callee;
|
2003-02-22 11:02:31 +01:00
|
|
|
struct cgraph_edge *next_caller;
|
|
|
|
struct cgraph_edge *next_callee;
|
2004-01-04 15:39:13 +01:00
|
|
|
/* When NULL, inline this call. When non-NULL, points to the explanation
|
|
|
|
why function was not inlined. */
|
|
|
|
const char *inline_failed;
|
2003-02-22 11:02:31 +01:00
|
|
|
};
|
|
|
|
|
2003-12-13 05:11:23 +01:00
|
|
|
/* The cgraph_varpool data structure.
|
Makefile.in (cgraph.o): Depend on output.h, not depend on tree-inline.h
* Makefile.in (cgraph.o): Depend on output.h, not depend on
tree-inline.h
* cgraph.c: Do not include tree-inline.h; include output.h
(known_fns): Rename to ...
(known_decls): ... this one; update all uses.
(cgraph_varpool_hash): New static variable.
(cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): New global
variables.
(cgraph_varpool_hash_node, eq_cgraph_varpool_node, cgraph_varpool_node,
cgraph_varpool_node_for_identifier, cgraph_varpool_mark_needed_node,
cgraph_varpool_finalize_decl, cgraph_varpool_assemble_pending_decls):
New functions.
* cgraph.h (cgraph_varpool_node): New structure.
(cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): Declare.
(cgraph_varpool_node, cgraph_varpool_node_for_identifier,
cgraph_varpool_finalize_decl, cgraph_varpool_mark_needed_node,
cgraph_varpool_asemble_pending_decls): Declare.
* cgraphunit.c (record_call_1): Notice variable references.
(cgraph_finalize_compilation_unit): Assemble pending variables.
* toplev.c (wrapup_global_declarations): Use varpool.
(compile_file): Assemble pending declarations.
(rest_of_decl_compilation): Use varpool in unit-at-a-time mode.
* varasm.c (assemble_name): Notice varpool references.
From-SVN: r68426
2003-06-24 18:50:29 +02:00
|
|
|
Each static variable decl has assigned cgraph_varpool_node. */
|
|
|
|
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
struct cgraph_varpool_node GTY(())
|
Makefile.in (cgraph.o): Depend on output.h, not depend on tree-inline.h
* Makefile.in (cgraph.o): Depend on output.h, not depend on
tree-inline.h
* cgraph.c: Do not include tree-inline.h; include output.h
(known_fns): Rename to ...
(known_decls): ... this one; update all uses.
(cgraph_varpool_hash): New static variable.
(cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): New global
variables.
(cgraph_varpool_hash_node, eq_cgraph_varpool_node, cgraph_varpool_node,
cgraph_varpool_node_for_identifier, cgraph_varpool_mark_needed_node,
cgraph_varpool_finalize_decl, cgraph_varpool_assemble_pending_decls):
New functions.
* cgraph.h (cgraph_varpool_node): New structure.
(cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): Declare.
(cgraph_varpool_node, cgraph_varpool_node_for_identifier,
cgraph_varpool_finalize_decl, cgraph_varpool_mark_needed_node,
cgraph_varpool_asemble_pending_decls): Declare.
* cgraphunit.c (record_call_1): Notice variable references.
(cgraph_finalize_compilation_unit): Assemble pending variables.
* toplev.c (wrapup_global_declarations): Use varpool.
(compile_file): Assemble pending declarations.
(rest_of_decl_compilation): Use varpool in unit-at-a-time mode.
* varasm.c (assemble_name): Notice varpool references.
From-SVN: r68426
2003-06-24 18:50:29 +02:00
|
|
|
{
|
|
|
|
tree decl;
|
2003-07-02 02:17:38 +02:00
|
|
|
/* Pointer to the next function in cgraph_varpool_nodes_queue. */
|
|
|
|
struct cgraph_varpool_node *next_needed;
|
Makefile.in (cgraph.o): Depend on output.h, not depend on tree-inline.h
* Makefile.in (cgraph.o): Depend on output.h, not depend on
tree-inline.h
* cgraph.c: Do not include tree-inline.h; include output.h
(known_fns): Rename to ...
(known_decls): ... this one; update all uses.
(cgraph_varpool_hash): New static variable.
(cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): New global
variables.
(cgraph_varpool_hash_node, eq_cgraph_varpool_node, cgraph_varpool_node,
cgraph_varpool_node_for_identifier, cgraph_varpool_mark_needed_node,
cgraph_varpool_finalize_decl, cgraph_varpool_assemble_pending_decls):
New functions.
* cgraph.h (cgraph_varpool_node): New structure.
(cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): Declare.
(cgraph_varpool_node, cgraph_varpool_node_for_identifier,
cgraph_varpool_finalize_decl, cgraph_varpool_mark_needed_node,
cgraph_varpool_asemble_pending_decls): Declare.
* cgraphunit.c (record_call_1): Notice variable references.
(cgraph_finalize_compilation_unit): Assemble pending variables.
* toplev.c (wrapup_global_declarations): Use varpool.
(compile_file): Assemble pending declarations.
(rest_of_decl_compilation): Use varpool in unit-at-a-time mode.
* varasm.c (assemble_name): Notice varpool references.
From-SVN: r68426
2003-06-24 18:50:29 +02:00
|
|
|
|
|
|
|
/* Set when function must be output - it is externally visible
|
|
|
|
or it's address is taken. */
|
|
|
|
bool needed;
|
|
|
|
/* Set once it has been finalized so we consider it to be output. */
|
|
|
|
bool finalized;
|
|
|
|
/* Set when function is scheduled to be assembled. */
|
|
|
|
bool output;
|
|
|
|
};
|
|
|
|
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
extern GTY(()) struct cgraph_node *cgraph_nodes;
|
|
|
|
extern GTY(()) int cgraph_n_nodes;
|
cgraph.c (cgraph_max_uid): New global variable.
* cgraph.c (cgraph_max_uid): New global variable.
(cgraph_node): Set uid field.
(create_edge): Keep inline flags consistent.
(dump_cgraph): Dump more info.
* cgraph.h (struct cgraph_local_info): Remove inline_many and
can_inline_once; add inlinable, disgread_inline_limits, and self_insn
(struct cgraph_global_info): Add insns, calls, cloned_times,
will_be_output.
(struct cgraph_node): Add uid.
(struct cgraph_edge): Add inline_call.
(cgraph_max_uid, cgraph_inline_p): Declare.
* cgraph.c: Include params.h and fibheap.h
(cgraph_mark_functions_to_inline_once): Kill.
(INSNS_PER_CALL): New constant.
(ncalls_inlined, nfunctions_inlined, initial_insns, overall_insns): New
static variables.
(cgraph_finalize_function): Do not analyze inlining.
(cgraph_finalize_compilation_unit): Set inlining attributes.
(cgraph_mark_functions_to_output): More consistency checks.
(cgraph_optimize_function): Set current_function_decl to NULL.
(cgraph_expand_function): Use new inline flags.
(cgraph_postorder): Expand from cgraph_expand_functions.
(INLINED_TIMES, SET_INLINED_TIMES): New macros.
(cgraph_inlined_into, cgraph_inlined_callees,
cgraph_estimate_size_after_inlining, cgraph_estimate_growth,
cgraph_mark_inline, cgraph_check_inline_limits,
cgraph_default_inline_p, cgraph_decide_inling_of_small_functions,
cgraph_decide_inlining, cgraph_inline_p): New functions.
* params.def (PARAM_LARGE_FUNCTION_INSNS, PARAM_LARGE_FUNCTION_GROWTH,
PARAM_INLINE_UNIT_GROWTH): New parameters.
* tree-inline.c (struct inline_data): New field current_decl.
(expand_call_inline): Avoid forward declarations; use
inlinable_function_p.
(optimize_inline_calls): Set id.current_decl.
Co-Authored-By: Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
From-SVN: r69262
2003-07-12 03:07:40 +02:00
|
|
|
extern GTY(()) int cgraph_max_uid;
|
2003-03-05 02:33:27 +01:00
|
|
|
extern bool cgraph_global_info_ready;
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
extern GTY(()) struct cgraph_node *cgraph_nodes_queue;
|
2003-07-09 03:20:24 +02:00
|
|
|
extern FILE *cgraph_dump_file;
|
2003-02-22 11:02:31 +01:00
|
|
|
|
Makefile.in (GTFILES): Add cgraph.h.
* Makefile.in (GTFILES): Add cgraph.h.
* cgraph.c (known_decls): Remove.
(cgraph_hash, cgraph_nodes, cgraph_nodes_queue,
cgraph_varpool_hash, cgraph_varpool_nodes_queue): GTYize.
(cgraph_node): Do not allocate known_decls; use polutate hashtable.
(cgraph_varpool_node): Likewise; add next pointer.
(cgraph_varpool_nodes): New static variable.
* cgraph.h (cgraph_local_info, cgraph_global_info, cgraph_rtl_info,
cgraph_node, cgraph_edge, cgraph_varpool_node, cgraph_nodes, cgraph_n_nodes,
cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): GTYize.
* gengtype.c (open_base_files): Include cgraph.h
From-SVN: r68742
2003-06-30 23:56:46 +02:00
|
|
|
extern GTY(()) int cgraph_varpool_n_nodes;
|
|
|
|
extern GTY(()) struct cgraph_varpool_node *cgraph_varpool_nodes_queue;
|
Makefile.in (cgraph.o): Depend on output.h, not depend on tree-inline.h
* Makefile.in (cgraph.o): Depend on output.h, not depend on
tree-inline.h
* cgraph.c: Do not include tree-inline.h; include output.h
(known_fns): Rename to ...
(known_decls): ... this one; update all uses.
(cgraph_varpool_hash): New static variable.
(cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): New global
variables.
(cgraph_varpool_hash_node, eq_cgraph_varpool_node, cgraph_varpool_node,
cgraph_varpool_node_for_identifier, cgraph_varpool_mark_needed_node,
cgraph_varpool_finalize_decl, cgraph_varpool_assemble_pending_decls):
New functions.
* cgraph.h (cgraph_varpool_node): New structure.
(cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): Declare.
(cgraph_varpool_node, cgraph_varpool_node_for_identifier,
cgraph_varpool_finalize_decl, cgraph_varpool_mark_needed_node,
cgraph_varpool_asemble_pending_decls): Declare.
* cgraphunit.c (record_call_1): Notice variable references.
(cgraph_finalize_compilation_unit): Assemble pending variables.
* toplev.c (wrapup_global_declarations): Use varpool.
(compile_file): Assemble pending declarations.
(rest_of_decl_compilation): Use varpool in unit-at-a-time mode.
* varasm.c (assemble_name): Notice varpool references.
From-SVN: r68426
2003-06-24 18:50:29 +02:00
|
|
|
|
|
|
|
|
2003-02-22 11:02:31 +01:00
|
|
|
/* In cgraph.c */
|
2003-07-12 13:29:18 +02:00
|
|
|
void dump_cgraph (FILE *);
|
2003-09-25 20:11:19 +02:00
|
|
|
void cgraph_remove_edge (struct cgraph_node *, struct cgraph_node *);
|
2003-07-12 13:29:18 +02:00
|
|
|
void cgraph_remove_call (tree, tree);
|
|
|
|
void cgraph_remove_node (struct cgraph_node *);
|
|
|
|
struct cgraph_edge *cgraph_record_call (tree, tree);
|
|
|
|
struct cgraph_node *cgraph_node (tree decl);
|
|
|
|
struct cgraph_node *cgraph_node_for_identifier (tree id);
|
|
|
|
bool cgraph_calls_p (tree, tree);
|
|
|
|
struct cgraph_local_info *cgraph_local_info (tree);
|
|
|
|
struct cgraph_global_info *cgraph_global_info (tree);
|
|
|
|
struct cgraph_rtl_info *cgraph_rtl_info (tree);
|
|
|
|
const char * cgraph_node_name (struct cgraph_node *);
|
2003-02-22 11:02:31 +01:00
|
|
|
|
Makefile.in (cgraph.o): Depend on output.h, not depend on tree-inline.h
* Makefile.in (cgraph.o): Depend on output.h, not depend on
tree-inline.h
* cgraph.c: Do not include tree-inline.h; include output.h
(known_fns): Rename to ...
(known_decls): ... this one; update all uses.
(cgraph_varpool_hash): New static variable.
(cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): New global
variables.
(cgraph_varpool_hash_node, eq_cgraph_varpool_node, cgraph_varpool_node,
cgraph_varpool_node_for_identifier, cgraph_varpool_mark_needed_node,
cgraph_varpool_finalize_decl, cgraph_varpool_assemble_pending_decls):
New functions.
* cgraph.h (cgraph_varpool_node): New structure.
(cgraph_varpool_n_nodes, cgraph_varpool_nodes_queue): Declare.
(cgraph_varpool_node, cgraph_varpool_node_for_identifier,
cgraph_varpool_finalize_decl, cgraph_varpool_mark_needed_node,
cgraph_varpool_asemble_pending_decls): Declare.
* cgraphunit.c (record_call_1): Notice variable references.
(cgraph_finalize_compilation_unit): Assemble pending variables.
* toplev.c (wrapup_global_declarations): Use varpool.
(compile_file): Assemble pending declarations.
(rest_of_decl_compilation): Use varpool in unit-at-a-time mode.
* varasm.c (assemble_name): Notice varpool references.
From-SVN: r68426
2003-06-24 18:50:29 +02:00
|
|
|
struct cgraph_varpool_node *cgraph_varpool_node (tree decl);
|
|
|
|
struct cgraph_varpool_node *cgraph_varpool_node_for_identifier (tree id);
|
|
|
|
void cgraph_varpool_mark_needed_node (struct cgraph_varpool_node *);
|
|
|
|
void cgraph_varpool_finalize_decl (tree);
|
|
|
|
bool cgraph_varpool_assemble_pending_decls (void);
|
|
|
|
|
2003-10-22 13:58:10 +02:00
|
|
|
bool cgraph_function_possibly_inlined_p (tree);
|
|
|
|
|
2003-02-22 11:02:31 +01:00
|
|
|
/* In cgraphunit.c */
|
2003-09-13 16:18:47 +02:00
|
|
|
bool cgraph_assemble_pending_functions (void);
|
2003-09-11 09:14:12 +02:00
|
|
|
void cgraph_finalize_function (tree, bool);
|
2003-07-12 13:29:18 +02:00
|
|
|
void cgraph_finalize_compilation_unit (void);
|
|
|
|
void cgraph_create_edges (tree, tree);
|
|
|
|
void cgraph_optimize (void);
|
2003-09-05 06:24:30 +02:00
|
|
|
void cgraph_mark_needed_node (struct cgraph_node *);
|
|
|
|
void cgraph_mark_reachable_node (struct cgraph_node *);
|
2004-01-04 15:39:13 +01:00
|
|
|
bool cgraph_inline_p (tree, tree, const char **reason);
|
2003-02-22 11:02:31 +01:00
|
|
|
|
|
|
|
#endif /* GCC_CGRAPH_H */
|