Lines Matching refs:op_array

84 static void strip_leading_nops(zend_op_array *op_array, zend_basic_block *b)  in strip_leading_nops()  argument
86 zend_op *opcodes = op_array->opcodes; in strip_leading_nops()
103 static void strip_nops(zend_op_array *op_array, zend_basic_block *b) in strip_nops() argument
111 if (op_array->opcodes[b->start].opcode == ZEND_NOP) { in strip_nops()
112 strip_leading_nops(op_array, b); in strip_nops()
122 if (op_array->opcodes[i].opcode != ZEND_NOP) { in strip_nops()
124 op_array->opcodes[j] = op_array->opcodes[i]; in strip_nops()
129 && (op_array->opcodes[i+1].opcode == ZEND_JMPZ in strip_nops()
130 || op_array->opcodes[i+1].opcode == ZEND_JMPNZ) in strip_nops()
131 && op_array->opcodes[i+1].op1_type & (IS_CV|IS_CONST) in strip_nops()
132 && zend_is_smart_branch(op_array->opcodes + j - 1)) { in strip_nops()
140 MAKE_NOP(op_array->opcodes + j); in strip_nops()
145 static int get_const_switch_target(zend_cfg *cfg, zend_op_array *op_array, zend_basic_block *block,… in get_const_switch_target() argument
163 return cfg->map[ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, Z_LVAL_P(zv))]; in get_const_switch_target()
166 static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array, zend_bitset used_… in zend_optimize_block() argument
175 if (op_array->opcodes[block->start].opcode == ZEND_NOP) { in zend_optimize_block()
177 strip_leading_nops(op_array, block); in zend_optimize_block()
180 opline = op_array->opcodes + block->start; in zend_optimize_block()
201 if (zend_optimizer_update_op1_const(op_array, opline, &c)) { in zend_optimize_block()
270 if (zend_optimizer_update_op2_const(op_array, opline, &c)) { in zend_optimize_block()
403 ZEND_OP1_LITERAL(opline) = zend_optimizer_add_literal(op_array, &c); in zend_optimize_block()
436 int target = get_const_switch_target(cfg, op_array, block, opline, &ZEND_OP1_LITERAL(opline)); in zend_optimize_block()
812 zend_optimizer_update_op1_const(op_array, opline, &result); in zend_optimize_block()
827 zend_optimizer_update_op1_const(op_array, opline, &result); in zend_optimize_block()
842 zend_optimizer_update_op1_const(op_array, opline, &result); in zend_optimize_block()
855 zend_optimizer_update_op1_const(op_array, opline, &result); in zend_optimize_block()
910 static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array, zend_optimizer_ctx *ctx) in assemble_code_blocks() argument
927 ZEND_ASSERT(op_array->opcodes[b->start].opcode == ZEND_FREE in assemble_code_blocks()
928 || op_array->opcodes[b->start].opcode == ZEND_FE_FREE); in assemble_code_blocks()
933 opline = op_array->opcodes + b->start + b->len - 1; in assemble_code_blocks()
952 zend_op *op = op_array->opcodes + b->start; in assemble_code_blocks()
971 memcpy(opline, op_array->opcodes + b->start, b->len * sizeof(zend_op)); in assemble_code_blocks()
978 efree(op_array->opcodes); in assemble_code_blocks()
979 op_array->opcodes = new_opcodes; in assemble_code_blocks()
980 op_array->last = len; in assemble_code_blocks()
986 opline = op_array->opcodes + b->start + b->len - 1; in assemble_code_blocks()
1033 if (op_array->last_try_catch) { in assemble_code_blocks()
1038 map = (uint32_t *)do_alloca(sizeof(uint32_t) * op_array->last_try_catch, use_heap); in assemble_code_blocks()
1039 for (i = 0, j = 0; i< op_array->last_try_catch; i++) { in assemble_code_blocks()
1040 if (blocks[cfg->map[op_array->try_catch_array[i].try_op]].flags & ZEND_BB_REACHABLE) { in assemble_code_blocks()
1042op_array->try_catch_array[j].try_op = blocks[cfg->map[op_array->try_catch_array[i].try_op]].start; in assemble_code_blocks()
1043 if (op_array->try_catch_array[i].catch_op) { in assemble_code_blocks()
1044op_array->try_catch_array[j].catch_op = blocks[cfg->map[op_array->try_catch_array[i].catch_op]].st… in assemble_code_blocks()
1046 op_array->try_catch_array[j].catch_op = 0; in assemble_code_blocks()
1048 if (op_array->try_catch_array[i].finally_op) { in assemble_code_blocks()
1049op_array->try_catch_array[j].finally_op = blocks[cfg->map[op_array->try_catch_array[i].finally_op]… in assemble_code_blocks()
1051 op_array->try_catch_array[j].finally_op = 0; in assemble_code_blocks()
1053 if (!op_array->try_catch_array[i].finally_end) { in assemble_code_blocks()
1054 op_array->try_catch_array[j].finally_end = 0; in assemble_code_blocks()
1056op_array->try_catch_array[j].finally_end = blocks[cfg->map[op_array->try_catch_array[i].finally_en… in assemble_code_blocks()
1062 op_array->last_try_catch = j; in assemble_code_blocks()
1064 efree(op_array->try_catch_array); in assemble_code_blocks()
1065 op_array->try_catch_array = NULL; in assemble_code_blocks()
1068 if (op_array->fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK) { in assemble_code_blocks()
1085 if (op_array->fn_flags & ZEND_ACC_EARLY_BINDING) { in assemble_code_blocks()
1086 ZEND_ASSERT(op_array == &ctx->script->main_op_array); in assemble_code_blocks()
1088 zend_build_delayed_early_binding_list(op_array); in assemble_code_blocks()
1092 memset(cfg->map, -1, sizeof(int) * op_array->last); in assemble_code_blocks()
1100 static void zend_jmp_optimization(zend_basic_block *block, zend_op_array *op_array, zend_cfg *cfg, … in zend_jmp_optimization() argument
1110 last_op = op_array->opcodes + block->start + block->len - 1; in zend_jmp_optimization()
1115 zend_op *target = op_array->opcodes + target_block->start; in zend_jmp_optimization()
1147 last_op->op1.constant = zend_optimizer_add_literal(op_array, &zv); in zend_jmp_optimization()
1159 !(op_array->fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK)) { in zend_jmp_optimization()
1165 last_op->op1.constant = zend_optimizer_add_literal(op_array, &zv); in zend_jmp_optimization()
1174 op_array->last_try_catch == 0 && in zend_jmp_optimization()
1279 target = op_array->opcodes + target_block->start; in zend_jmp_optimization()
1354 target = op_array->opcodes + target_block->start; in zend_jmp_optimization()
1355 target_end = op_array->opcodes + target_block->start + 1; in zend_jmp_optimization()
1414 int var_num = op_array->last_var + op_array->T; in zend_jmp_optimization()
1424 target = op_array->opcodes + target_block->start; in zend_jmp_optimization()
1558 target = op_array->opcodes + target_block->start; in zend_jmp_optimization()
1606 static void zend_t_usage(zend_cfg *cfg, zend_op_array *op_array, zend_bitset used_ext, zend_optimiz… in zend_t_usage() argument
1618 if (op_array->T == 0) { in zend_t_usage()
1624 bitset_len = zend_bitset_len(op_array->last_var + op_array->T); in zend_t_usage()
1635 opline = op_array->opcodes + block->start; in zend_t_usage()
1692 for (i = op_array->last_var; i< op_array->T; i++) { in zend_t_usage()
1716 end = op_array->opcodes + block->start; in zend_t_usage()
1826 static void zend_merge_blocks(zend_op_array *op_array, zend_cfg *cfg, uint32_t *opt_count) in zend_merge_blocks() argument
1839 zend_op *last_op = op_array->opcodes + prev->start + prev->len - 1; in zend_merge_blocks()
1845 zend_op *op = op_array->opcodes + bb->start; in zend_merge_blocks()
1886 void zend_optimize_cfg(zend_op_array *op_array, zend_optimizer_ctx *ctx) in zend_optimize_cfg() argument
1900 if (zend_build_cfg(&ctx->arena, op_array, 0, &cfg) != SUCCESS) { in zend_optimize_cfg()
1905 if (cfg.blocks_count * (op_array->last_var + op_array->T) > 64 * 1024 * 1024) { in zend_optimize_cfg()
1911 zend_dump_op_array(op_array, ZEND_DUMP_CFG, "before block pass", &cfg); in zend_optimize_cfg()
1914 bitset_len = zend_bitset_len(op_array->last_var + op_array->T); in zend_optimize_cfg()
1915 Tsource = zend_arena_calloc(&ctx->arena, op_array->last_var + op_array->T, sizeof(zend_op *)); in zend_optimize_cfg()
1916 same_t = zend_arena_alloc(&ctx->arena, op_array->last_var + op_array->T); in zend_optimize_cfg()
1926 zend_t_usage(&cfg, op_array, usage, ctx); in zend_optimize_cfg()
1937 memset(Tsource, 0, (op_array->last_var + op_array->T) * sizeof(zend_op *)); in zend_optimize_cfg()
1939 zend_optimize_block(b, op_array, usage, &cfg, Tsource, &opt_count); in zend_optimize_cfg()
1945 strip_nops(op_array, b); in zend_optimize_cfg()
1952 zend_jmp_optimization(b, op_array, &cfg, same_t, &opt_count); in zend_optimize_cfg()
1957 zend_cfg_remark_reachable_blocks(op_array, &cfg); in zend_optimize_cfg()
1960 zend_merge_blocks(op_array, &cfg, &opt_count); in zend_optimize_cfg()
1968 zend_t_usage(&cfg, op_array, usage, ctx); in zend_optimize_cfg()
1969 assemble_code_blocks(&cfg, op_array, ctx); in zend_optimize_cfg()
1972 …zend_dump_op_array(op_array, ZEND_DUMP_CFG | ZEND_DUMP_HIDE_UNREACHABLE, "after block pass", &cfg); in zend_optimize_cfg()