/* Tree inlining hooks and declarations.
- Copyright 2001, 2003, 2004, 2005, 2007 Free Software Foundation, Inc.
+ Copyright 2001, 2003, 2004, 2005, 2007, 2008, 2009
+ Free Software Foundation, Inc.
Contributed by Alexandre Oliva <aoliva@redhat.com>
This file is part of GCC.
#ifndef GCC_TREE_INLINE_H
#define GCC_TREE_INLINE_H
-#include "varray.h"
#include "pointer-set.h"
+/* Indicate the desired behavior wrt call graph edges. We can either
+ duplicate the edge (inlining, cloning), move the edge (versioning,
+ parallelization), or move the edges of the clones (saving). */
+
+enum copy_body_cge_which
+{
+ CB_CGE_DUPLICATE,
+ CB_CGE_MOVE,
+ CB_CGE_MOVE_CLONES
+};
+
/* Data required for function body duplication. */
typedef struct copy_body_data
than enumerating the different cases, we categorize the behavior
in the various situations. */
- /* Indicate the desired behavior wrt call graph edges. We can either
- duplicate the edge (inlining, cloning), move the edge (versioning,
- parallelization), or move the edges of the clones (saving). */
- enum copy_body_cge_which {
- CB_CGE_DUPLICATE,
- CB_CGE_MOVE,
- CB_CGE_MOVE_CLONES
- } transform_call_graph_edges;
+ /* What to do with call graph edges. */
+ enum copy_body_cge_which transform_call_graph_edges;
/* True if a new CFG should be created. False for inlining, true for
everything else. */
/* Cost for omp construct. */
unsigned omp_cost;
+
+ /* True when time of statemnt should be estimated. Thus i.e
+ cost of switch statement is logarithmic rather than linear in number
+ of cases. */
+ bool time_based;
} eni_weights;
/* Weights that estimate_num_insns uses for heuristics in inlining. */
int estimate_num_insns_fn (tree, eni_weights *);
int count_insns_seq (gimple_seq, eni_weights *);
bool tree_versionable_function_p (tree);
-void tree_function_versioning (tree, tree, varray_type, bool);
bool tree_can_inline_p (tree, tree);
extern gimple_seq remap_gimple_seq (gimple_seq, copy_body_data *);