Lines Matching refs:ssa_op

189 static zval *get_op1_value(sccp_ctx *ctx, zend_op *opline, const zend_ssa_op *ssa_op) {  in get_op1_value()  argument
192 } else if (ssa_op->op1_use != -1) { in get_op1_value()
193 return &ctx->values[ssa_op->op1_use]; in get_op1_value()
199 static zval *get_op2_value(sccp_ctx *ctx, const zend_op *opline, const zend_ssa_op *ssa_op) { in get_op2_value() argument
202 } else if (ssa_op->op2_use != -1) { in get_op2_value()
203 return &ctx->values[ssa_op->op2_use]; in get_op2_value()
210 const zend_op_array *op_array, const zend_op *opline, const zend_ssa_op *ssa_op) { in can_replace_op1() argument
270 if (ssa_op->op1_def != -1) { in can_replace_op1()
280 const zend_op_array *op_array, zend_op *opline, zend_ssa_op *ssa_op) { in can_replace_op2() argument
293 sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op, int var, zval *value) { in try_replace_op1() argument
294 if (ssa_op->op1_use == var && can_replace_op1(ctx->scdf.op_array, opline, ssa_op)) { in try_replace_op1()
306 sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op, int var, zval *value) { in try_replace_op2() argument
307 if (ssa_op->op2_use == var && can_replace_op2(ctx->scdf.op_array, opline, ssa_op)) { in try_replace_op2()
859 if (ssa_op->op##_def >= 0) { \
860 set_value(scdf, ctx, ssa_op->op##_def, zv); \
868 static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_op) { in sccp_visit_instr() argument
872 op1 = get_op1_value(ctx, opline, ssa_op); in sccp_visit_instr()
873 op2 = get_op2_value(ctx, opline, ssa_op); in sccp_visit_instr()
880 if (IS_BOT(op1) && (ctx->scdf.ssa->var_info[ssa_op->op1_use].type & MAY_BE_REF)) { in sccp_visit_instr()
890 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
893 if ((ctx->scdf.ssa->var_info[ssa_op->op1_use].type & MAY_BE_ANY) == 0) { in sccp_visit_instr()
912 if (ssa_op->op1_def >= 0) { in sccp_visit_instr()
929 && ssa_op->op1_def >= 0) { in sccp_visit_instr()
981 if (ssa_op->op1_def >= 0 in sccp_visit_instr()
982 && ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
983 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
984 zend_ssa_var_info *var_info = &ctx->scdf.ssa->var_info[ssa_op->op1_use]; in sccp_visit_instr()
1078 ssa_op = &ctx->scdf.ssa->ops[opline - ctx->scdf.op_array->opcodes]; in sccp_visit_instr()
1087 result = &ctx->values[ssa_op->result_use]; in sccp_visit_instr()
1115 if (ssa_op->result_def >= 0) { in sccp_visit_instr()
1129 if (ssa_op->result_def >= 0) { in sccp_visit_instr()
1181 zval *result = &ctx->values[ssa_op->result_use]; in sccp_visit_instr()
1206 if (ssa_op->result_def >= 0 in sccp_visit_instr()
1207 && ctx->scdf.ssa->vars[ssa_op->result_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
1223 ssa_op++; in sccp_visit_instr()
1289 && ssa_op->op1_def >= 0 && op2) { in sccp_visit_instr()
1291 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
1333 && ssa_op->op1_def >= 0 in sccp_visit_instr()
1334 && ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
1336 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
1384 && ssa_op->op1_def >= 0 in sccp_visit_instr()
1385 && ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
1657 if (ssa_op->result_def < 0 || IS_BOT(&ctx->values[ssa_op->result_def])) { in sccp_visit_instr()
1688 if (!IS_TOP(&ctx->values[ssa_op->result_def])) { in sccp_visit_instr()
1777 zend_op *opline, zend_ssa_op *ssa_op) { in sccp_mark_feasible_successors() argument
1794 op1 = get_op1_value(ctx, opline, ssa_op); in sccp_mark_feasible_successors()
1796 ZEND_ASSERT(ssa_op->op1_use >= 0); in sccp_mark_feasible_successors()
1797 op1 = value_from_type_and_range(ctx, ssa_op->op1_use, &zv); in sccp_mark_feasible_successors()
2034 static int remove_call(sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op) in remove_call() argument
2045 zend_ssa_remove_instr(ssa, opline, ssa_op); in remove_call()
2081 zend_ssa_op *ssa_op = &ssa->ops[var->definition]; in try_remove_definition() local
2083 if (ssa_op->result_def == var_num) { in try_remove_definition()
2088 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2092 if (ssa_op->op1_def >= 0 || ssa_op->op2_def >= 0) { in try_remove_definition()
2119 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2154 ssa_op->result_def = -1; in try_remove_definition()
2156 removed_ops = remove_call(ctx, opline, ssa_op) - 1; in try_remove_definition()
2158 zend_ssa_remove_instr(ssa, opline, ssa_op); in try_remove_definition()
2160 ssa_op->result_def = var_num; in try_remove_definition()
2169 && (!value_known(&ctx->values[ssa_op->op2_use]) in try_remove_definition()
2170 || IS_PARTIAL_ARRAY(&ctx->values[ssa_op->op2_use]) in try_remove_definition()
2171 || IS_PARTIAL_OBJECT(&ctx->values[ssa_op->op2_use]))) { in try_remove_definition()
2174 && (!value_known(&ctx->values[ssa_op->op1_use]) in try_remove_definition()
2175 || IS_PARTIAL_ARRAY(&ctx->values[ssa_op->op1_use]) in try_remove_definition()
2176 || IS_PARTIAL_OBJECT(&ctx->values[ssa_op->op1_use]))) { in try_remove_definition()
2179 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2190 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2192 removed_ops = remove_call(ctx, opline, ssa_op); in try_remove_definition()
2194 zend_ssa_remove_instr(ssa, opline, ssa_op); in try_remove_definition()
2198 } else if (ssa_op->op1_def == var_num) { in try_remove_definition()
2215 if ((ssa_op->op2_use >= 0 && !value_known(&ctx->values[ssa_op->op2_use])) in try_remove_definition()
2216 || ((ssa_op+1)->op1_use >= 0 &&!value_known(&ctx->values[(ssa_op+1)->op1_use]))) { in try_remove_definition()
2224 if (ssa_op->op2_use >= 0 && !value_known(&ctx->values[ssa_op->op2_use])) { in try_remove_definition()
2235 if (zend_may_throw(opline, ssa_op, op_array, ssa)) { in try_remove_definition()
2243 if (ssa_op->result_def >= 0) { in try_remove_definition()
2244 if (ssa->vars[ssa_op->result_def].use_chain < 0 in try_remove_definition()
2245 && ssa->vars[ssa_op->result_def].phi_use_chain == NULL) { in try_remove_definition()
2246 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2258 } else if (ssa_op->op2_use >= 0) { in try_remove_definition()
2259 if (ssa_op->op2_use != ssa_op->op1_use) { in try_remove_definition()
2260 zend_ssa_unlink_use_chain(ssa, var->definition, ssa_op->op2_use); in try_remove_definition()
2262 ssa_op->op2_use = -1; in try_remove_definition()
2263 ssa_op->op2_use_chain = -1; in try_remove_definition()
2271 zend_ssa_remove_instr(ssa, opline + 1, ssa_op + 1); in try_remove_definition()
2277 zend_ssa_remove_instr(ssa, opline + 1, ssa_op + 1); in try_remove_definition()
2293 zend_ssa_rename_var_uses(ssa, ssa_op->op1_def, ssa_op->op1_use, 1); in try_remove_definition()
2295 zend_ssa_remove_op1_def(ssa, ssa_op); in try_remove_definition()
2296 zend_ssa_remove_instr(ssa, opline, ssa_op); in try_remove_definition()
2345 zend_ssa_op *ssa_op = &ssa->ops[use]; in replace_constant_operands() local
2346 if (try_replace_op1(ctx, opline, ssa_op, i, value)) { in replace_constant_operands()
2350 ZEND_ASSERT(ssa_op->op1_def == -1); in replace_constant_operands()
2351 if (ssa_op->op1_use != ssa_op->op2_use) { in replace_constant_operands()
2352 zend_ssa_unlink_use_chain(ssa, use, ssa_op->op1_use); in replace_constant_operands()
2354 ssa_op->op2_use_chain = ssa_op->op1_use_chain; in replace_constant_operands()
2356 ssa_op->op1_use = -1; in replace_constant_operands()
2357 ssa_op->op1_use_chain = -1; in replace_constant_operands()
2359 if (try_replace_op2(ctx, opline, ssa_op, i, value)) { in replace_constant_operands()
2360 ZEND_ASSERT(ssa_op->op2_def == -1); in replace_constant_operands()
2361 if (ssa_op->op2_use != ssa_op->op1_use) { in replace_constant_operands()
2362 zend_ssa_unlink_use_chain(ssa, use, ssa_op->op2_use); in replace_constant_operands()
2364 ssa_op->op2_use = -1; in replace_constant_operands()
2365 ssa_op->op2_use_chain = -1; in replace_constant_operands()