CACAO
Data Structures | Macros | Typedefs | Functions | Variables
inline.cpp File Reference

Go to the source code of this file.

Data Structures

struct  inline_node
 
struct  inline_target_ref
 
struct  inline_block_map
 
struct  inline_context
 
struct  inline_site
 
struct  inline_candidate
 

Macros

#define INLINE_KNAPSACK
 
#define INLINE_COUNTDOWN_INIT   1000
 
#define INLINE_COST_OFFSET   -16
 
#define INLINE_COST_BUDGET   100
 
#define INLINE_VERBOSE
 
#define DOLOG(code)   do{ if (opt_TraceInlining >= 2) { code; } }while(0)
 
#define DOLOG_SHORT(code)   do{ if (opt_TraceInlining >= 1) { code; } }while(0)
 
#define INLINE_STATISTICS
 
#define INLINE_RETURN_REFERENCE(callee)   ( (basicblock *) (ptrint) (0x333 + (callee)->depth) )
 
#define TRANSLATE_VAROP(vo)   n_iptr->vo.varindex = inline_translate_variable(jd, origjd, varmap, n_iptr->vo.varindex)
 
#define BUDGETMEMBER   cost
 
#define POSTPROCESS_SRC(varindex)   live[varindex]--
 
#define POSTPROCESS_DST(varindex)   live[varindex]++
 
#define POSTPROCESS_SRCOP(s)   POSTPROCESS_SRC(iptr->s.varindex)
 
#define POSTPROCESS_DSTOP(d)   POSTPROCESS_DST(iptr->d.varindex)
 
#define MARKSAVED(varindex)   jd->var[varindex].flags |= SAVEDVAR
 
#define MARK_ALL_SAVED
 

Typedefs

typedef struct inline_node inline_node
 
typedef struct inline_target_ref inline_target_ref
 
typedef struct inline_context inline_context
 
typedef struct inline_block_map inline_block_map
 
typedef struct inline_site inline_site
 
typedef struct inline_candidate inline_candidate
 

Functions

static bool inline_analyse_code (inline_node *iln)
 
static void inline_post_process (jitdata *jd)
 
void inline_print_stats ()
 
static bool inline_jit_compile_intern (jitdata *jd)
 
static bool inline_jit_compile (inline_node *iln)
 
static void inline_insert_inline_node (inline_node *parent, inline_node *child)
 
static void inline_remove_inline_node (inline_node *parent, inline_node *child)
 
static void inline_add_candidate (inline_context *ctx, inline_node *caller, methodinfo *callee, inline_site *site)
 
static inline_candidateinline_pick_best_candidate (inline_context *ctx)
 
static void inline_candidate_println (inline_candidate *cand)
 
static void inline_candidates_println (inline_context *ctx)
 
static s4 inline_new_variable (jitdata *jd, Type type, s4 flags)
 
static s4 inline_new_variable_clone (jitdata *jd, jitdata *origjd, s4 origidx)
 
static s4 inline_new_temp_variable (jitdata *jd, Type type)
 
static s4 inline_translate_variable (jitdata *jd, jitdata *origjd, s4 *varmap, s4 index)
 
static s4create_variable_map (inline_node *callee)
 
static void inline_add_block_reference (inline_node *iln, basicblock **blockp)
 
static void inline_block_translation (inline_node *iln, basicblock *o_bptr, basicblock *n_bptr)
 
static basicblockinline_map_block (inline_node *iln, basicblock *o_block, inline_node *targetiln)
 
static void inline_resolve_block_refs (inline_target_ref **refs, basicblock *o_bptr, basicblock *n_bptr, bool returnref)
 
static basicblockcreate_block (inline_node *container, inline_node *iln, inline_node *inner, int indepth)
 
static s4translate_javalocals (inline_node *iln, s4 *javalocals)
 
static basicblockcreate_body_block (inline_node *iln, basicblock *o_bptr, s4 *varmap)
 
static basicblockcreate_epilog_block (inline_node *caller, inline_node *callee, s4 *varmap)
 
static void close_block (inline_node *iln, inline_node *inner, basicblock *n_bptr, s4 outdepth)
 
static void close_prolog_block (inline_node *iln, basicblock *n_bptr, inline_node *nextcall)
 
static void close_body_block (inline_node *iln, basicblock *n_bptr, basicblock *o_bptr, s4 *varmap, s4 retcount, s4 retidx)
 
static instructioninline_instruction (inline_node *iln, ICMD opcode, instruction *o_iptr)
 
static void inline_generate_sync_builtin (inline_node *iln, inline_node *callee, instruction *o_iptr, s4 instancevar, functionptr func)
 
static s4 emit_inlining_prolog (inline_node *iln, inline_node *callee, instruction *o_iptr, s4 *varmap)
 
static void emit_inlining_epilog (inline_node *iln, inline_node *callee, instruction *o_iptr)
 
static void inline_clone_instruction (inline_node *iln, jitdata *jd, jitdata *origjd, s4 *varmap, instruction *o_iptr, instruction *n_iptr)
 
static void inline_rewrite_method (inline_node *iln)
 
static exception_entryinline_exception_tables (inline_node *iln, exception_entry *n_extable, exception_entry **prevextable)
 
static void inline_locals (inline_node *iln)
 
static void inline_interface_variables (inline_node *iln)
 
static void inline_write_exception_handlers (inline_node *master, inline_node *iln)
 
static bool inline_transform (inline_node *iln, jitdata *jd)
 
static bool inline_pre_parse_heuristics (const inline_node *caller, const methodinfo *callee, inline_site *site)
 
static bool inline_post_parse_heuristics (const inline_node *caller, const inline_node *callee)
 
static bool inline_afterwards_heuristics (const inline_node *caller, const inline_node *callee)
 
static bool inline_is_monomorphic (const methodinfo *callee, const instruction *call, inline_site *site)
 
static bool inline_can_inline (const inline_node *caller, const methodinfo *callee, const instruction *call, inline_site *site)
 
static inline_nodeinline_create_callee_node (const inline_node *caller, methodinfo *callee)
 
static void inline_set_callee_properties (const inline_node *caller, inline_node *cn, const inline_site *site)
 
static void inline_cumulate_counters (inline_node *caller, const inline_node *cn)
 
static inline_nodeinline_analyse_callee (inline_node *caller, methodinfo *callee, inline_site *site)
 
static bool inline_process_candidate (inline_candidate *cand)
 
static void inline_cumulate_counters_recursive (inline_node *iln)
 
static bool inline_make_inlining_plan (inline_node *iln)
 
static void inline_gather_statistics_recursive (inline_node *iln)
 
static void inline_gather_statistics (inline_node *iln)
 
static inline_nodeinline_create_root_node (jitdata *jd)
 
bool inline_inline (jitdata *jd)
 

Variables

int inline_stat_roots = 0
 
int inline_stat_roots_transformed = 0
 
int inline_stat_inlined_nodes = 0
 
int inline_stat_max_depth = 0
 

Macro Definition Documentation

#define BUDGETMEMBER   cost
#define DOLOG (   code)    do{ if (opt_TraceInlining >= 2) { code; } }while(0)

Definition at line 116 of file inline.cpp.

#define DOLOG_SHORT (   code)    do{ if (opt_TraceInlining >= 1) { code; } }while(0)

Definition at line 117 of file inline.cpp.

#define INLINE_COST_BUDGET   100

Definition at line 83 of file inline.cpp.

#define INLINE_COST_OFFSET   -16

Definition at line 82 of file inline.cpp.

#define INLINE_COUNTDOWN_INIT   1000

Definition at line 81 of file inline.cpp.

#define INLINE_KNAPSACK

Definition at line 75 of file inline.cpp.

#define INLINE_RETURN_REFERENCE (   callee)    ( (basicblock *) (ptrint) (0x333 + (callee)->depth) )

Definition at line 665 of file inline.cpp.

#define INLINE_STATISTICS

Definition at line 277 of file inline.cpp.

#define INLINE_VERBOSE

Definition at line 115 of file inline.cpp.

#define MARK_ALL_SAVED
Value:
do { \
for (i=0; i<jd->vartop; ++i) \
if (live[i]) \
} while (0)
LiveInSetTy & live
#define MARKSAVED(varindex)
Definition: inline.cpp:3023
MIIterator i

Definition at line 3025 of file inline.cpp.

#define MARKSAVED (   varindex)    jd->var[varindex].flags |= SAVEDVAR

Definition at line 3023 of file inline.cpp.

#define POSTPROCESS_DST (   varindex)    live[varindex]++

Definition at line 3018 of file inline.cpp.

#define POSTPROCESS_DSTOP (   d)    POSTPROCESS_DST(iptr->d.varindex)

Definition at line 3021 of file inline.cpp.

#define POSTPROCESS_SRC (   varindex)    live[varindex]--

Definition at line 3017 of file inline.cpp.

#define POSTPROCESS_SRCOP (   s)    POSTPROCESS_SRC(iptr->s.varindex)

Definition at line 3020 of file inline.cpp.

#define TRANSLATE_VAROP (   vo)    n_iptr->vo.varindex = inline_translate_variable(jd, origjd, varmap, n_iptr->vo.varindex)

Definition at line 1283 of file inline.cpp.

Typedef Documentation

Definition at line 134 of file inline.cpp.

Definition at line 136 of file inline.cpp.

Definition at line 133 of file inline.cpp.

typedef struct inline_node inline_node

Definition at line 131 of file inline.cpp.

typedef struct inline_site inline_site

Definition at line 135 of file inline.cpp.

Definition at line 132 of file inline.cpp.

Function Documentation

static void close_block ( inline_node iln,
inline_node inner,
basicblock n_bptr,
s4  outdepth 
)
static

Definition at line 970 of file inline.cpp.

static void close_body_block ( inline_node iln,
basicblock n_bptr,
basicblock o_bptr,
s4 varmap,
s4  retcount,
s4  retidx 
)
static

Definition at line 1022 of file inline.cpp.

static void close_prolog_block ( inline_node iln,
basicblock n_bptr,
inline_node nextcall 
)
static

Definition at line 1008 of file inline.cpp.

static basicblock* create_block ( inline_node container,
inline_node iln,
inline_node inner,
int  indepth 
)
static

Definition at line 781 of file inline.cpp.

static basicblock* create_body_block ( inline_node iln,
basicblock o_bptr,
s4 varmap 
)
static

Definition at line 889 of file inline.cpp.

static basicblock* create_epilog_block ( inline_node caller,
inline_node callee,
s4 varmap 
)
static

Definition at line 924 of file inline.cpp.

static s4* create_variable_map ( inline_node callee)
static

Definition at line 600 of file inline.cpp.

static void emit_inlining_epilog ( inline_node iln,
inline_node callee,
instruction o_iptr 
)
static

Definition at line 1253 of file inline.cpp.

static s4 emit_inlining_prolog ( inline_node iln,
inline_node callee,
instruction o_iptr,
s4 varmap 
)
static

Definition at line 1102 of file inline.cpp.

static void inline_add_block_reference ( inline_node iln,
basicblock **  blockp 
)
static

Definition at line 669 of file inline.cpp.

static void inline_add_candidate ( inline_context ctx,
inline_node caller,
methodinfo callee,
inline_site site 
)
static

Definition at line 469 of file inline.cpp.

static bool inline_afterwards_heuristics ( const inline_node caller,
const inline_node callee 
)
static

Definition at line 2276 of file inline.cpp.

static inline_node* inline_analyse_callee ( inline_node caller,
methodinfo callee,
inline_site site 
)
static

Definition at line 2637 of file inline.cpp.

static bool inline_analyse_code ( inline_node iln)
static

Definition at line 2754 of file inline.cpp.

static void inline_block_translation ( inline_node iln,
basicblock o_bptr,
basicblock n_bptr 
)
static

Definition at line 695 of file inline.cpp.

static bool inline_can_inline ( const inline_node caller,
const methodinfo callee,
const instruction call,
inline_site site 
)
static

Definition at line 2374 of file inline.cpp.

static void inline_candidate_println ( inline_candidate cand)
static

Definition at line 520 of file inline.cpp.

static void inline_candidates_println ( inline_context ctx)
static

Definition at line 530 of file inline.cpp.

static void inline_clone_instruction ( inline_node iln,
jitdata jd,
jitdata origjd,
s4 varmap,
instruction o_iptr,
instruction n_iptr 
)
static

Definition at line 1287 of file inline.cpp.

static inline_node* inline_create_callee_node ( const inline_node caller,
methodinfo callee 
)
static

Definition at line 2419 of file inline.cpp.

static inline_node* inline_create_root_node ( jitdata jd)
static

Definition at line 3166 of file inline.cpp.

static void inline_cumulate_counters ( inline_node caller,
const inline_node cn 
)
static

Definition at line 2594 of file inline.cpp.

static void inline_cumulate_counters_recursive ( inline_node iln)
static

Definition at line 2879 of file inline.cpp.

static exception_entry* inline_exception_tables ( inline_node iln,
exception_entry n_extable,
exception_entry **  prevextable 
)
static

Definition at line 1760 of file inline.cpp.

static void inline_gather_statistics ( inline_node iln)
static

Definition at line 3006 of file inline.cpp.

static void inline_gather_statistics_recursive ( inline_node iln)
static

Definition at line 2985 of file inline.cpp.

static void inline_generate_sync_builtin ( inline_node iln,
inline_node callee,
instruction o_iptr,
s4  instancevar,
functionptr  func 
)
static

Definition at line 1069 of file inline.cpp.

bool inline_inline ( jitdata jd)

Definition at line 3198 of file inline.cpp.

static void inline_insert_inline_node ( inline_node parent,
inline_node child 
)
static

Definition at line 395 of file inline.cpp.

static instruction* inline_instruction ( inline_node iln,
ICMD  opcode,
instruction o_iptr 
)
static

Definition at line 1053 of file inline.cpp.

static void inline_interface_variables ( inline_node iln)
static

Definition at line 1873 of file inline.cpp.

static bool inline_is_monomorphic ( const methodinfo callee,
const instruction call,
inline_site site 
)
static

Definition at line 2325 of file inline.cpp.

static bool inline_jit_compile ( inline_node iln)
static

Definition at line 330 of file inline.cpp.

static bool inline_jit_compile_intern ( jitdata jd)
static

Definition at line 299 of file inline.cpp.

static void inline_locals ( inline_node iln)
static

Definition at line 1848 of file inline.cpp.

static bool inline_make_inlining_plan ( inline_node iln)
static

Definition at line 2911 of file inline.cpp.

static basicblock* inline_map_block ( inline_node iln,
basicblock o_block,
inline_node targetiln 
)
static

Definition at line 710 of file inline.cpp.

static s4 inline_new_temp_variable ( jitdata jd,
Type  type 
)
static

Definition at line 579 of file inline.cpp.

static s4 inline_new_variable ( jitdata jd,
Type  type,
s4  flags 
)
static

Definition at line 544 of file inline.cpp.

static s4 inline_new_variable_clone ( jitdata jd,
jitdata origjd,
s4  origidx 
)
static

Definition at line 564 of file inline.cpp.

static inline_candidate* inline_pick_best_candidate ( inline_context ctx)
static

Definition at line 506 of file inline.cpp.

static bool inline_post_parse_heuristics ( const inline_node caller,
const inline_node callee 
)
static

Definition at line 2253 of file inline.cpp.

static void inline_post_process ( jitdata jd)
static

Definition at line 3032 of file inline.cpp.

static bool inline_pre_parse_heuristics ( const inline_node caller,
const methodinfo callee,
inline_site site 
)
static

Definition at line 2225 of file inline.cpp.

void inline_print_stats ( )

Definition at line 286 of file inline.cpp.

static bool inline_process_candidate ( inline_candidate cand)
static

Definition at line 2715 of file inline.cpp.

static void inline_remove_inline_node ( inline_node parent,
inline_node child 
)
static

Definition at line 446 of file inline.cpp.

static void inline_resolve_block_refs ( inline_target_ref **  refs,
basicblock o_bptr,
basicblock n_bptr,
bool  returnref 
)
static

Definition at line 738 of file inline.cpp.

static void inline_rewrite_method ( inline_node iln)
static

Definition at line 1429 of file inline.cpp.

static void inline_set_callee_properties ( const inline_node caller,
inline_node cn,
const inline_site site 
)
static

Definition at line 2451 of file inline.cpp.

static bool inline_transform ( inline_node iln,
jitdata jd 
)
static

Definition at line 2010 of file inline.cpp.

static s4 inline_translate_variable ( jitdata jd,
jitdata origjd,
s4 varmap,
s4  index 
)
static

Definition at line 585 of file inline.cpp.

static void inline_write_exception_handlers ( inline_node master,
inline_node iln 
)
static

Definition at line 1929 of file inline.cpp.

static s4* translate_javalocals ( inline_node iln,
s4 javalocals 
)
static

Definition at line 864 of file inline.cpp.

Variable Documentation

int inline_stat_inlined_nodes = 0

Definition at line 283 of file inline.cpp.

int inline_stat_max_depth = 0

Definition at line 284 of file inline.cpp.

int inline_stat_roots = 0

Definition at line 281 of file inline.cpp.

int inline_stat_roots_transformed = 0

Definition at line 282 of file inline.cpp.