Lines Matching refs:op_array

106 static void zend_mark_reachable_blocks(const zend_op_array *op_array, zend_cfg *cfg, int start) /* …  in zend_mark_reachable_blocks()  argument
111 zend_mark_reachable(op_array->opcodes, cfg, blocks + start); in zend_mark_reachable_blocks()
113 if (op_array->last_live_range || op_array->last_try_catch) { in zend_mark_reachable_blocks()
122 for (j = 0; j < op_array->last_live_range; j++) { in zend_mark_reachable_blocks()
123 zend_live_range *live_range = &op_array->live_range[j]; in zend_mark_reachable_blocks()
130 while (b->len > 0 && op_array->opcodes[b->start].opcode == ZEND_NOP) { in zend_mark_reachable_blocks()
133 && (op_array->opcodes[b->start + 1].opcode == ZEND_JMPZ in zend_mark_reachable_blocks()
134 || op_array->opcodes[b->start + 1].opcode == ZEND_JMPNZ) in zend_mark_reachable_blocks()
135 && (op_array->opcodes[b->start + 1].op1_type & (IS_CV|IS_CONST)) in zend_mark_reachable_blocks()
137 && zend_is_smart_branch(op_array->opcodes + b->start - 1)) { in zend_mark_reachable_blocks()
154 zend_mark_reachable(op_array->opcodes, cfg, b); in zend_mark_reachable_blocks()
165 for (j = 0; j < op_array->last_try_catch; j++) { in zend_mark_reachable_blocks()
168 b = blocks + block_map[op_array->try_catch_array[j].try_op]; in zend_mark_reachable_blocks()
172 if (op_array->try_catch_array[j].catch_op) { in zend_mark_reachable_blocks()
173 end = blocks + block_map[op_array->try_catch_array[j].catch_op]; in zend_mark_reachable_blocks()
176 op_array->try_catch_array[j].try_op = b->start; in zend_mark_reachable_blocks()
182 b = blocks + block_map[op_array->try_catch_array[j].try_op]; in zend_mark_reachable_blocks()
184 if (op_array->try_catch_array[j].finally_op) { in zend_mark_reachable_blocks()
185 end = blocks + block_map[op_array->try_catch_array[j].finally_op]; in zend_mark_reachable_blocks()
188 op_array->try_catch_array[j].try_op = op_array->try_catch_array[j].catch_op; in zend_mark_reachable_blocks()
190 …zend_mark_reachable(op_array->opcodes, cfg, blocks + block_map[op_array->try_catch_array[j].try_op… in zend_mark_reachable_blocks()
199 b = blocks + block_map[op_array->try_catch_array[j].try_op]; in zend_mark_reachable_blocks()
202 if (op_array->try_catch_array[j].catch_op) { in zend_mark_reachable_blocks()
203 b = blocks + block_map[op_array->try_catch_array[j].catch_op]; in zend_mark_reachable_blocks()
207 zend_mark_reachable(op_array->opcodes, cfg, b); in zend_mark_reachable_blocks()
210 if (op_array->try_catch_array[j].finally_op) { in zend_mark_reachable_blocks()
211 b = blocks + block_map[op_array->try_catch_array[j].finally_op]; in zend_mark_reachable_blocks()
215 zend_mark_reachable(op_array->opcodes, cfg, b); in zend_mark_reachable_blocks()
218 if (op_array->try_catch_array[j].finally_end) { in zend_mark_reachable_blocks()
219 b = blocks + block_map[op_array->try_catch_array[j].finally_end]; in zend_mark_reachable_blocks()
223 zend_mark_reachable(op_array->opcodes, cfg, b); in zend_mark_reachable_blocks()
227 if (op_array->try_catch_array[j].catch_op) { in zend_mark_reachable_blocks()
228 …ZEND_ASSERT(!(blocks[block_map[op_array->try_catch_array[j].catch_op]].flags & ZEND_BB_REACHABLE)); in zend_mark_reachable_blocks()
230 if (op_array->try_catch_array[j].finally_op) { in zend_mark_reachable_blocks()
231 …ZEND_ASSERT(!(blocks[block_map[op_array->try_catch_array[j].finally_op]].flags & ZEND_BB_REACHABLE… in zend_mark_reachable_blocks()
233 if (op_array->try_catch_array[j].finally_end) { in zend_mark_reachable_blocks()
234 …ZEND_ASSERT(!(blocks[block_map[op_array->try_catch_array[j].finally_end]].flags & ZEND_BB_REACHABL… in zend_mark_reachable_blocks()
243 void zend_cfg_remark_reachable_blocks(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */ in zend_cfg_remark_reachable_blocks() argument
262 zend_mark_reachable_blocks(op_array, cfg, start); in zend_cfg_remark_reachable_blocks()
284 int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t build_flags, zend_cf… in zend_build_cfg() argument
298 cfg->map = block_map = zend_arena_calloc(arena, op_array->last, sizeof(uint32_t)); in zend_build_cfg()
302 for (i = 0; i < op_array->last; i++) { in zend_build_cfg()
303 zend_op *opline = op_array->opcodes + i; in zend_build_cfg()
316 if (i + 1 < op_array->last) { in zend_build_cfg()
355 BB_START(OP_JMP_ADDR(opline, opline->op1) - op_array->opcodes); in zend_build_cfg()
359 if (i + 1 < op_array->last) { in zend_build_cfg()
364 BB_START(OP_JMP_ADDR(opline, opline->op1) - op_array->opcodes); in zend_build_cfg()
365 if (i + 1 < op_array->last) { in zend_build_cfg()
370 BB_START(OP_JMP_ADDR(opline, opline->op2) - op_array->opcodes); in zend_build_cfg()
371 BB_START(ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value)); in zend_build_cfg()
372 if (i + 1 < op_array->last) { in zend_build_cfg()
383 BB_START(OP_JMP_ADDR(opline, opline->op2) - op_array->opcodes); in zend_build_cfg()
388 BB_START(OP_JMP_ADDR(opline, opline->op2) - op_array->opcodes); in zend_build_cfg()
396 BB_START(ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value)); in zend_build_cfg()
401 BB_START(OP_JMP_ADDR(opline, opline->op2) - op_array->opcodes); in zend_build_cfg()
410 BB_START(ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, Z_LVAL_P(zv))); in zend_build_cfg()
412 BB_START(ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value)); in zend_build_cfg()
421 !op_array->function_name) { in zend_build_cfg()
434 !op_array->function_name) { in zend_build_cfg()
452 && op_array->last > 0 && block_map[0] > 1) { in zend_build_cfg()
457 for (j = 0; j < op_array->last_live_range; j++) { in zend_build_cfg()
458 BB_START(op_array->live_range[j].start); in zend_build_cfg()
459 BB_START(op_array->live_range[j].end); in zend_build_cfg()
463 if (op_array->last_try_catch) { in zend_build_cfg()
464 for (j = 0; j < op_array->last_try_catch; j++) { in zend_build_cfg()
465 BB_START(op_array->try_catch_array[j].try_op); in zend_build_cfg()
466 if (op_array->try_catch_array[j].catch_op) { in zend_build_cfg()
467 BB_START(op_array->try_catch_array[j].catch_op); in zend_build_cfg()
469 if (op_array->try_catch_array[j].finally_op) { in zend_build_cfg()
470 BB_START(op_array->try_catch_array[j].finally_op); in zend_build_cfg()
472 if (op_array->try_catch_array[j].finally_end) { in zend_build_cfg()
473 BB_START(op_array->try_catch_array[j].finally_end); in zend_build_cfg()
493 for (i = 0; i < op_array->last; i++) { in zend_build_cfg()
518 opline = op_array->opcodes + block->start + block->len - 1; in zend_build_cfg()
529 block->successors[0] = block_map[OP_JMP_ADDR(opline, opline->op1) - op_array->opcodes]; in zend_build_cfg()
533 block->successors[0] = block_map[OP_JMP_ADDR(opline, opline->op2) - op_array->opcodes]; in zend_build_cfg()
534 …block->successors[1] = block_map[ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_valu… in zend_build_cfg()
544 block->successors[0] = block_map[OP_JMP_ADDR(opline, opline->op2) - op_array->opcodes]; in zend_build_cfg()
550 block->successors[0] = block_map[OP_JMP_ADDR(opline, opline->op2) - op_array->opcodes]; in zend_build_cfg()
562 …block->successors[0] = block_map[ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_valu… in zend_build_cfg()
568 block->successors[0] = block_map[OP_JMP_ADDR(opline, opline->op2) - op_array->opcodes]; in zend_build_cfg()
573 block->successors[0] = block_map[OP_JMP_ADDR(opline, opline->op1) - op_array->opcodes]; in zend_build_cfg()
587 block->successors[s++] = block_map[ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, Z_LVAL_P(zv))]; in zend_build_cfg()
590 …block->successors[s++] = block_map[ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_va… in zend_build_cfg()
602 zend_mark_reachable_blocks(op_array, cfg, 0); in zend_build_cfg()
693 int zend_cfg_compute_dominators_tree(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */ in zend_cfg_compute_dominators_tree() argument
806 int zend_cfg_identify_loops(const zend_op_array *op_array, zend_cfg *cfg) /* {{{ */ in zend_cfg_identify_loops() argument