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
193 #define JITDATA_FLAG_COUNTDOWN 0x00000100
195 #define JITDATA_FLAG_SHOWINTERMEDIATE 0x20000000
196 #define JITDATA_FLAG_SHOWDISASSEMBLE 0x40000000
197 #define JITDATA_FLAG_VERBOSECALL 0x80000000
200 #define JITDATA_HAS_FLAG_PARSE(jd) \
201 ((jd)->flags & JITDATA_FLAG_PARSE)
203 #define JITDATA_HAS_FLAG_VERIFY(jd) \
204 ((jd)->flags & JITDATA_FLAG_VERIFY)
206 #define JITDATA_HAS_FLAG_INSTRUMENT(jd) \
207 ((jd)->flags & JITDATA_FLAG_INSTRUMENT)
209 #define JITDATA_HAS_FLAG_IFCONV(jd) \
210 ((jd)->flags & JITDATA_FLAG_IFCONV)
212 #define JITDATA_HAS_FLAG_REORDER(jd) \
213 ((jd)->flags & JITDATA_FLAG_REORDER)
215 #define JITDATA_HAS_FLAG_INLINE(jd) \
216 ((jd)->flags & JITDATA_FLAG_INLINE)
218 #define JITDATA_HAS_FLAG_COUNTDOWN(jd) \
219 ((jd)->flags & JITDATA_FLAG_COUNTDOWN)
221 #define JITDATA_HAS_FLAG_SHOWINTERMEDIATE(jd) \
222 ((jd)->flags & JITDATA_FLAG_SHOWINTERMEDIATE)
224 #define JITDATA_HAS_FLAG_SHOWDISASSEMBLE(jd) \
225 ((jd)->flags & JITDATA_FLAG_SHOWDISASSEMBLE)
227 #define JITDATA_HAS_FLAG_VERBOSECALL(jd) \
228 ((jd)->flags & JITDATA_FLAG_VERBOSECALL)
251 #define VAROP(v) (jd->var + (v).varindex)
252 #define VAR(i) (jd->var + (i))
255 return (i < jd->localcount);
285 #define BBFLAG_REPLACEMENT 0x01
347 #if defined(ENABLE_LOOP)
353 #if defined(ENABLE_SSA)
356 s4 domsuccessorcount;
364 s4 expredecessorcount;
374 #define FOR_EACH_SUCCESSOR(bptr, it) \
375 for ((it) = (bptr)->successors; (it) != (bptr)->successors + (bptr)->successorcount; ++(it))
377 #define FOR_EACH_PREDECESSOR(bptr, it) \
379 (it) = (bptr)->predecessors; \
380 (it) != (bptr)->predecessors + ((bptr)->predecessorcount < 0 ? 0 : (bptr)->predecessorcount); \
384 #define FOR_EACH_INSTRUCTION(bptr, it) \
385 for ((it) = (bptr)->iinstr; (it) != (bptr)->iinstr + (bptr)->icount; ++(it))
387 #define FOR_EACH_INSTRUCTION_REV(bptr, it) \
388 for ((it) = (bptr)->iinstr + (bptr)->icount - 1; (it) != (bptr)->iinstr - 1; --(it))
390 #if defined(ENABLE_SSA)
392 #define FOR_EACH_EXHANDLER(bptr, it) \
393 for ((it) = (bptr)->exhandlers; (it) != (bptr)->exhandlers + (bptr)->exhandlercount; ++(it))
395 #define FOR_EACH_EXPREDECESSOR(bptr, it) \
396 for ((it) = (bptr)->expredecessors; (it) != (bptr)->expredecessors + (bptr)->expredecessorcount; ++(it))
416 #define JAVALOCAL_FROM_RETADDR(nr) (jitdata::UNUSED - (1 + (nr)))
417 #define RETADDR_FROM_JAVALOCAL(jl) (jitdata::UNUSED - (1 + (jl)))
423 #define BASICBLOCK_INIT(bptr,m) \
426 bptr->state = basicblock::UNDEF; \
427 bptr->type = basicblock::TYPE_STD; \
428 bptr->method = (m); \
448 #define PARAMMODE_NUMBERED 0
449 #define PARAMMODE_STUFFED 1
472 #if !defined(JIT_COMPILER_VIA_SIGNAL)
487 #if defined(ENABLE_JIT)
491 #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)
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.
instruction * instructions