40 #if defined(ENABLE_INLINING)
44 #if defined(ENABLE_LOOP)
48 #if defined(ENABLE_SSA)
52 #if defined(ENABLE_LSRA)
81 #if defined(ENABLE_STATISTICS)
84 # define COUNT_READ_SPILLS(var) \
86 case TYPE_FLT: count_spills_read_flt++; break; \
87 case TYPE_DBL: count_spills_read_dbl++; break; \
88 default: count_spills_read_ila++; break; \
90 case TYPE_FLT: count_spills_read_flt++; break; \
91 case TYPE_DBL: count_spills_read_dbl++; break; \
92 default: count_spills_read_ila++; break; \
95 # define COUNT_WRITE_SPILLS(var) \
97 case TYPE_FLT: count_spills_write_flt++; break; \
98 case TYPE_DBL: count_spills_write_dbl++; break; \
99 default: count_spills_write_ila++; break; \
100 switch(var->type) { \
101 case TYPE_FLT: count_spills_write_flt++; break; \
102 case TYPE_DBL: count_spills_write_dbl++; break; \
103 default: count_spills_write_ila++; break; \
108 # define COUNT_SPILLS
109 # define COUNT_READ_SPILLS(x)
110 # define COUNT_WRITE_SPILLS(x)
131 #if defined(ENABLE_LOOP)
134 #if defined(ENABLE_SSA) || defined(ENABLE_LSRA)
181 #define FOR_EACH_BASICBLOCK(jd, it) \
182 for ((it) = (jd)->basicblocks; (it) != NULL; (it) = (it)->next)
184 #define JITDATA_FLAG_PARSE 0x00000001
185 #define JITDATA_FLAG_VERIFY 0x00000002
187 #define JITDATA_FLAG_INSTRUMENT 0x00000004
189 #define JITDATA_FLAG_IFCONV 0x00000008
190 #define JITDATA_FLAG_REORDER 0x00000010
191 #define JITDATA_FLAG_INLINE 0x00000020
194 #define JITDATA_FLAG_COUNTDOWN 0x00000100
197 #define JITDATA_FLAG_DEOPTIMIZE 0x00000200
199 #define JITDATA_FLAG_SHOWINTERMEDIATE 0x20000000
200 #define JITDATA_FLAG_SHOWDISASSEMBLE 0x40000000
201 #define JITDATA_FLAG_VERBOSECALL 0x80000000
204 #define JITDATA_HAS_FLAG_PARSE(jd) \
205 ((jd)->flags & JITDATA_FLAG_PARSE)
207 #define JITDATA_HAS_FLAG_VERIFY(jd) \
208 ((jd)->flags & JITDATA_FLAG_VERIFY)
210 #define JITDATA_HAS_FLAG_INSTRUMENT(jd) \
211 ((jd)->flags & JITDATA_FLAG_INSTRUMENT)
213 #define JITDATA_HAS_FLAG_IFCONV(jd) \
214 ((jd)->flags & JITDATA_FLAG_IFCONV)
216 #define JITDATA_HAS_FLAG_REORDER(jd) \
217 ((jd)->flags & JITDATA_FLAG_REORDER)
219 #define JITDATA_HAS_FLAG_INLINE(jd) \
220 ((jd)->flags & JITDATA_FLAG_INLINE)
222 #define JITDATA_HAS_FLAG_COUNTDOWN(jd) \
223 ((jd)->flags & JITDATA_FLAG_COUNTDOWN)
225 #define JITDATA_HAS_FLAG_DEOPTIMIZE(jd) \
226 ((jd)->flags & JITDATA_FLAG_DEOPTIMIZE)
228 #define JITDATA_HAS_FLAG_SHOWINTERMEDIATE(jd) \
229 ((jd)->flags & JITDATA_FLAG_SHOWINTERMEDIATE)
231 #define JITDATA_HAS_FLAG_SHOWDISASSEMBLE(jd) \
232 ((jd)->flags & JITDATA_FLAG_SHOWDISASSEMBLE)
234 #define JITDATA_HAS_FLAG_VERBOSECALL(jd) \
235 ((jd)->flags & JITDATA_FLAG_VERBOSECALL)
258 #define VAROP(v) (jd->var + (v).varindex)
259 #define VAR(i) (jd->var + (i))
262 return (i < jd->localcount);
292 #define BBFLAG_REPLACEMENT 0x01
354 #if defined(ENABLE_LOOP)
360 #if defined(ENABLE_SSA)
363 s4 domsuccessorcount;
371 s4 expredecessorcount;
381 #define FOR_EACH_SUCCESSOR(bptr, it) \
382 for ((it) = (bptr)->successors; (it) != (bptr)->successors + (bptr)->successorcount; ++(it))
384 #define FOR_EACH_PREDECESSOR(bptr, it) \
386 (it) = (bptr)->predecessors; \
387 (it) != (bptr)->predecessors + ((bptr)->predecessorcount < 0 ? 0 : (bptr)->predecessorcount); \
391 #define FOR_EACH_INSTRUCTION(bptr, it) \
392 for ((it) = (bptr)->iinstr; (it) != (bptr)->iinstr + (bptr)->icount; ++(it))
394 #define FOR_EACH_INSTRUCTION_REV(bptr, it) \
395 for ((it) = (bptr)->iinstr + (bptr)->icount - 1; (it) != (bptr)->iinstr - 1; --(it))
397 #if defined(ENABLE_SSA)
399 #define FOR_EACH_EXHANDLER(bptr, it) \
400 for ((it) = (bptr)->exhandlers; (it) != (bptr)->exhandlers + (bptr)->exhandlercount; ++(it))
402 #define FOR_EACH_EXPREDECESSOR(bptr, it) \
403 for ((it) = (bptr)->expredecessors; (it) != (bptr)->expredecessors + (bptr)->expredecessorcount; ++(it))
423 #define JAVALOCAL_FROM_RETADDR(nr) (jitdata::UNUSED - (1 + (nr)))
424 #define RETADDR_FROM_JAVALOCAL(jl) (jitdata::UNUSED - (1 + (jl)))
430 #define BASICBLOCK_INIT(bptr,m) \
433 bptr->state = basicblock::UNDEF; \
434 bptr->type = basicblock::TYPE_STD; \
435 bptr->method = (m); \
455 #define PARAMMODE_NUMBERED 0
456 #define PARAMMODE_STUFFED 1
482 #if !defined(JIT_COMPILER_VIA_SIGNAL)
497 #if defined(ENABLE_JIT)
501 #if defined(ENABLE_INTRP)
State
State of block during stack analysis.
codeinfo * jit_get_current_code(methodinfo *m)
exception_entry * exceptiontable
void * jit_compile_handle(methodinfo *m, void *pv, void *ra, void *mptr)
void jit_jitdata_init_for_recompilation(jitdata *jd)
static bool var_is_saved(const jitdata *jd, s4 i)
insinfo_inline * inlineinfo
u1 * jit_compile(methodinfo *m)
void jit_request_optimization(methodinfo *m)
static bool var_is_local(const jitdata *jd, s4 i)
void jit_renumber_basicblocks(jitdata *jd)
void jit_invalidate_code(methodinfo *m)
struct MethodLoopData MethodLoopData
basicblock ** predecessors
jitdata * jit_jitdata_new(methodinfo *m)
This file contains the statistics framework.
u1 * jit_recompile(methodinfo *m)
classref_or_classinfo catchtype
void * md_jit_method_patch_address(void *pv, void *ra, void *mptr)
struct BasicblockLoopData BasicblockLoopData
static bool var_is_prealloc(const jitdata *jd, s4 i)
static bool var_is_temp(const jitdata *jd, s4 i)
interface_info * interface_map
static bool var_is_inout(const jitdata *jd, s4 i)
static bool basicblock_reached(const basicblock *bptr)
void jit_check_basicblock_numbers(jitdata *jd)
ICMD jit_complement_condition(ICMD opcode)
#define STAT_DECLARE_VAR(type, var, init)
Declare an external statistics variable.
u1 * jit_recompile_for_deoptimization(methodinfo *m)
instruction * instructions