Lines Matching refs:op_array

65 static void strip_leading_nops(zend_op_array *op_array, zend_basic_block *b)  in strip_leading_nops()  argument
67 zend_op *opcodes = op_array->opcodes; in strip_leading_nops()
75 static void strip_nops(zend_op_array *op_array, zend_basic_block *b) in strip_nops() argument
83 if (op_array->opcodes[b->start].opcode == ZEND_NOP) { in strip_nops()
84 strip_leading_nops(op_array, b); in strip_nops()
94 if (op_array->opcodes[i].opcode != ZEND_NOP) { in strip_nops()
96 op_array->opcodes[j] = op_array->opcodes[i]; in strip_nops()
104 MAKE_NOP(op_array->opcodes + j); in strip_nops()
109 static int get_const_switch_target(zend_cfg *cfg, zend_op_array *op_array, zend_basic_block *block,… in get_const_switch_target() argument
131 return cfg->map[ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, Z_LVAL_P(zv))]; in get_const_switch_target()
134 static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array, zend_bitset used_… in zend_optimize_block() argument
143 if (op_array->opcodes[block->start].opcode == ZEND_NOP) { in zend_optimize_block()
145 strip_leading_nops(op_array, block); in zend_optimize_block()
148 opline = op_array->opcodes + block->start; in zend_optimize_block()
176 && zend_optimizer_update_op1_const(op_array, opline, &c)) { in zend_optimize_block()
202 if (zend_optimizer_update_op2_const(op_array, opline, &c)) { in zend_optimize_block()
304 if (src < op_array->opcodes + block->start) { in zend_optimize_block()
319 if (src >= op_array->opcodes + block->start && in zend_optimize_block()
376 ZEND_OP1_LITERAL(opline) = zend_optimizer_add_literal(op_array, &c); in zend_optimize_block()
410 int target = get_const_switch_target(cfg, op_array, block, opline, &ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
821 zend_optimizer_update_op1_const(op_array, opline, &result); in zend_optimize_block()
836 zend_optimizer_update_op1_const(op_array, opline, &result); in zend_optimize_block()
851 zend_optimizer_update_op1_const(op_array, opline, &result); in zend_optimize_block()
864 zend_optimizer_update_op1_const(op_array, opline, &result); in zend_optimize_block()
936 static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array, zend_optimizer_ctx *ctx) in assemble_code_blocks() argument
950 opline = op_array->opcodes + b->start + b->len - 1; in assemble_code_blocks()
969 zend_op *op = op_array->opcodes + b->start; in assemble_code_blocks()
988 memcpy(opline, op_array->opcodes + b->start, b->len * sizeof(zend_op)); in assemble_code_blocks()
995 efree(op_array->opcodes); in assemble_code_blocks()
996 op_array->opcodes = new_opcodes; in assemble_code_blocks()
997 op_array->last = len; in assemble_code_blocks()
1003 opline = op_array->opcodes + b->start + b->len - 1; in assemble_code_blocks()
1051 if (op_array->last_try_catch) { in assemble_code_blocks()
1056 map = (uint32_t *)do_alloca(sizeof(uint32_t) * op_array->last_try_catch, use_heap); in assemble_code_blocks()
1057 for (i = 0, j = 0; i< op_array->last_try_catch; i++) { in assemble_code_blocks()
1058 if (blocks[cfg->map[op_array->try_catch_array[i].try_op]].flags & ZEND_BB_REACHABLE) { in assemble_code_blocks()
1060op_array->try_catch_array[j].try_op = blocks[cfg->map[op_array->try_catch_array[i].try_op]].start; in assemble_code_blocks()
1061 if (op_array->try_catch_array[i].catch_op) { in assemble_code_blocks()
1062op_array->try_catch_array[j].catch_op = blocks[cfg->map[op_array->try_catch_array[i].catch_op]].st… in assemble_code_blocks()
1064 op_array->try_catch_array[j].catch_op = 0; in assemble_code_blocks()
1066 if (op_array->try_catch_array[i].finally_op) { in assemble_code_blocks()
1067op_array->try_catch_array[j].finally_op = blocks[cfg->map[op_array->try_catch_array[i].finally_op]… in assemble_code_blocks()
1069 op_array->try_catch_array[j].finally_op = 0; in assemble_code_blocks()
1071 if (!op_array->try_catch_array[i].finally_end) { in assemble_code_blocks()
1072 op_array->try_catch_array[j].finally_end = 0; in assemble_code_blocks()
1074op_array->try_catch_array[j].finally_end = blocks[cfg->map[op_array->try_catch_array[i].finally_en… in assemble_code_blocks()
1080 op_array->last_try_catch = j; in assemble_code_blocks()
1082 efree(op_array->try_catch_array); in assemble_code_blocks()
1083 op_array->try_catch_array = NULL; in assemble_code_blocks()
1086 if (op_array->fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK) { in assemble_code_blocks()
1103 memset(cfg->map, -1, sizeof(int) * op_array->last); in assemble_code_blocks()
1183 static void zend_jmp_optimization(zend_basic_block *block, zend_op_array *op_array, const zend_cfg … in zend_jmp_optimization() argument
1194 last_op = op_array->opcodes + block->start + block->len - 1; in zend_jmp_optimization()
1201 target = op_array->opcodes + target_block->start; in zend_jmp_optimization()
1221 target = op_array->opcodes + target_block->start; in zend_jmp_optimization()
1226 !(op_array->fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK)) { in zend_jmp_optimization()
1232 last_op->op1.constant = zend_optimizer_add_literal(op_array, &zv); in zend_jmp_optimization()
1247 target = op_array->opcodes + target_block->start; in zend_jmp_optimization()
1268 target = op_array->opcodes + target_block->start; in zend_jmp_optimization()
1293 zend_optimizer_convert_to_free_op1(op_array, last_op); in zend_jmp_optimization()
1300 target = op_array->opcodes + follow_block->start; in zend_jmp_optimization()
1304 zend_optimizer_convert_to_free_op1(op_array, last_op); in zend_jmp_optimization()
1342 target = op_array->opcodes + target_block->start; in zend_jmp_optimization()
1411 static void zend_t_usage(zend_cfg *cfg, zend_op_array *op_array, zend_bitset used_ext, zend_optimiz… in zend_t_usage() argument
1423 if (op_array->T == 0) { in zend_t_usage()
1429 bitset_len = zend_bitset_len(op_array->last_var + op_array->T); in zend_t_usage()
1440 opline = op_array->opcodes + block->start; in zend_t_usage()
1497 for (i = op_array->last_var; i< op_array->T; i++) { in zend_t_usage()
1521 end = op_array->opcodes + block->start; in zend_t_usage()
1564 zend_optimizer_convert_to_free_op1(op_array, opline); in zend_t_usage()
1615 static void zend_merge_blocks(zend_op_array *op_array, zend_cfg *cfg, uint32_t *opt_count) in zend_merge_blocks() argument
1628 zend_op *last_op = op_array->opcodes + prev->start + prev->len - 1; in zend_merge_blocks()
1634 zend_op *op = op_array->opcodes + bb->start; in zend_merge_blocks()
1675 void zend_optimize_cfg(zend_op_array *op_array, zend_optimizer_ctx *ctx) in zend_optimize_cfg() argument
1689 zend_build_cfg(&ctx->arena, op_array, 0, &cfg); in zend_optimize_cfg()
1691 if (cfg.blocks_count * (op_array->last_var + op_array->T) > 64 * 1024 * 1024) { in zend_optimize_cfg()
1697 zend_dump_op_array(op_array, ZEND_DUMP_CFG, "before block pass", &cfg); in zend_optimize_cfg()
1700 bitset_len = zend_bitset_len(op_array->last_var + op_array->T); in zend_optimize_cfg()
1701 Tsource = zend_arena_calloc(&ctx->arena, op_array->last_var + op_array->T, sizeof(zend_op *)); in zend_optimize_cfg()
1712 zend_t_usage(&cfg, op_array, usage, ctx); in zend_optimize_cfg()
1723 memset(Tsource, 0, (op_array->last_var + op_array->T) * sizeof(zend_op *)); in zend_optimize_cfg()
1725 zend_optimize_block(b, op_array, usage, &cfg, Tsource, &opt_count); in zend_optimize_cfg()
1733 zend_op *opline = &op_array->opcodes[i]; in zend_optimize_cfg()
1740 strip_nops(op_array, b); in zend_optimize_cfg()
1749 zend_jmp_optimization(b, op_array, &cfg, jmp_hitlist, &opt_count); in zend_optimize_cfg()
1754 zend_cfg_remark_reachable_blocks(op_array, &cfg); in zend_optimize_cfg()
1757 zend_merge_blocks(op_array, &cfg, &opt_count); in zend_optimize_cfg()
1764 assemble_code_blocks(&cfg, op_array, ctx); in zend_optimize_cfg()
1767 …zend_dump_op_array(op_array, ZEND_DUMP_CFG | ZEND_DUMP_HIDE_UNREACHABLE, "after block pass", &cfg); in zend_optimize_cfg()