Lines Matching refs:ssa_op

191 static zval *get_op1_value(sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op) {  in get_op1_value()  argument
194 } else if (ssa_op->op1_use != -1) { in get_op1_value()
195 return &ctx->values[ssa_op->op1_use]; in get_op1_value()
201 static zval *get_op2_value(sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op) { in get_op2_value() argument
204 } else if (ssa_op->op2_use != -1) { in get_op2_value()
205 return &ctx->values[ssa_op->op2_use]; in get_op2_value()
212 const zend_op_array *op_array, zend_op *opline, zend_ssa_op *ssa_op) { in can_replace_op1() argument
271 if (ssa_op->op1_def != -1) { in can_replace_op1()
281 const zend_op_array *op_array, zend_op *opline, zend_ssa_op *ssa_op) { in can_replace_op2() argument
294 sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op, int var, zval *value) { in try_replace_op1() argument
295 if (ssa_op->op1_use == var && can_replace_op1(ctx->scdf.op_array, opline, ssa_op)) { in try_replace_op1()
327 if (ssa_op->op2_use >= 0) { in try_replace_op1()
328 ZEND_ASSERT(ssa_op->op2_def == -1); in try_replace_op1()
329 zend_ssa_unlink_use_chain(ctx->scdf.ssa, ssa_op - ctx->scdf.ssa->ops, ssa_op->op2_use); in try_replace_op1()
330 ssa_op->op2_use = -1; in try_replace_op1()
331 ssa_op->op2_use_chain = -1; in try_replace_op1()
344 sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op, int var, zval *value) { in try_replace_op2() argument
345 if (ssa_op->op2_use == var && can_replace_op2(ctx->scdf.op_array, opline, ssa_op)) { in try_replace_op2()
355 ZEND_ASSERT(ssa_op->result_def == (ssa_op + 1)->op2_use); in try_replace_op2()
357 zend_ssa_op *next_op = ssa_op + 1; in try_replace_op2()
361 zend_ssa_remove_result_def(ctx->scdf.ssa, ssa_op); in try_replace_op2()
1001 if (ssa_op->op##_def >= 0) { \
1002 set_value(scdf, ctx, ssa_op->op##_def, zv); \
1010 static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_op) { in sccp_visit_instr() argument
1014 op1 = get_op1_value(ctx, opline, ssa_op); in sccp_visit_instr()
1015 op2 = get_op2_value(ctx, opline, ssa_op); in sccp_visit_instr()
1022 if (IS_BOT(op1) && (ctx->scdf.ssa->var_info[ssa_op->op1_use].type & MAY_BE_REF)) { in sccp_visit_instr()
1034 uint32_t type = ctx->scdf.ssa->var_info[ssa_op->op1_use].type; in sccp_visit_instr()
1050 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
1053 if ((ctx->scdf.ssa->var_info[ssa_op->op1_use].type & MAY_BE_ANY) == 0) { in sccp_visit_instr()
1072 if (ssa_op->op1_def >= 0) { in sccp_visit_instr()
1089 && ssa_op->op1_def >= 0) { in sccp_visit_instr()
1141 if (ssa_op->op1_def >= 0 in sccp_visit_instr()
1142 && ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
1143 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
1144 zend_ssa_var_info *var_info = &ctx->scdf.ssa->var_info[ssa_op->op1_use]; in sccp_visit_instr()
1236 ssa_op = &ctx->scdf.ssa->ops[opline - ctx->scdf.op_array->opcodes]; in sccp_visit_instr()
1245 result = &ctx->values[ssa_op->result_use]; in sccp_visit_instr()
1273 if (ssa_op->result_def >= 0) { in sccp_visit_instr()
1287 if (ssa_op->result_def >= 0) { in sccp_visit_instr()
1339 zval *result = &ctx->values[ssa_op->result_use]; in sccp_visit_instr()
1364 if (ssa_op->result_def >= 0 in sccp_visit_instr()
1365 && ctx->scdf.ssa->vars[ssa_op->result_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
1381 ssa_op++; in sccp_visit_instr()
1447 && ssa_op->op1_def >= 0 && op2) { in sccp_visit_instr()
1449 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
1491 && ssa_op->op1_def >= 0 in sccp_visit_instr()
1492 && ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
1494 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
1542 && ssa_op->op1_def >= 0 in sccp_visit_instr()
1543 && ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
1820 if (ssa_op->result_def < 0 || IS_BOT(&ctx->values[ssa_op->result_def])) { in sccp_visit_instr()
1850 if (!IS_TOP(&ctx->values[ssa_op->result_def])) { in sccp_visit_instr()
1888 zend_op *opline, zend_ssa_op *ssa_op) { in sccp_mark_feasible_successors() argument
1904 op1 = get_op1_value(ctx, opline, ssa_op); in sccp_mark_feasible_successors()
2182 static int remove_call(sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op) in remove_call() argument
2193 zend_ssa_remove_instr(ssa, opline, ssa_op); in remove_call()
2229 zend_ssa_op *ssa_op = &ssa->ops[var->definition]; in try_remove_definition() local
2236 if (ssa_op->result_def == var_num) { in try_remove_definition()
2237 if (ssa_op->op1_def >= 0 || ssa_op->op2_def >= 0) { in try_remove_definition()
2264 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2298 ssa_op->result_def = -1; in try_remove_definition()
2300 removed_ops = remove_call(ctx, opline, ssa_op) - 1; in try_remove_definition()
2302 zend_ssa_remove_instr(ssa, opline, ssa_op); in try_remove_definition()
2304 ssa_op->result_def = var_num; in try_remove_definition()
2313 && (!value_known(&ctx->values[ssa_op->op2_use]) in try_remove_definition()
2314 || IS_PARTIAL_ARRAY(&ctx->values[ssa_op->op2_use]) in try_remove_definition()
2315 || IS_PARTIAL_OBJECT(&ctx->values[ssa_op->op2_use]))) { in try_remove_definition()
2318 && (!value_known(&ctx->values[ssa_op->op1_use]) in try_remove_definition()
2319 || IS_PARTIAL_ARRAY(&ctx->values[ssa_op->op1_use]) in try_remove_definition()
2320 || IS_PARTIAL_OBJECT(&ctx->values[ssa_op->op1_use]))) { in try_remove_definition()
2323 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2334 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2336 removed_ops = remove_call(ctx, opline, ssa_op); in try_remove_definition()
2338 zend_ssa_remove_instr(ssa, opline, ssa_op); in try_remove_definition()
2342 } else if (ssa_op->op1_def == var_num) { in try_remove_definition()
2354 if ((ssa_op->op2_use >= 0 && !value_known(&ctx->values[ssa_op->op2_use])) in try_remove_definition()
2355 || ((ssa_op+1)->op1_use >= 0 &&!value_known(&ctx->values[(ssa_op+1)->op1_use]))) { in try_remove_definition()
2363 if (ssa_op->op2_use >= 0 && !value_known(&ctx->values[ssa_op->op2_use])) { in try_remove_definition()
2374 if (zend_may_throw(opline, ssa_op, op_array, ssa)) { in try_remove_definition()
2382 if (ssa_op->result_def >= 0) { in try_remove_definition()
2383 if (ssa->vars[ssa_op->result_def].use_chain < 0 in try_remove_definition()
2384 && ssa->vars[ssa_op->result_def].phi_use_chain == NULL) { in try_remove_definition()
2385 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2397 } else if (ssa_op->op2_use >= 0) { in try_remove_definition()
2398 if (ssa_op->op2_use != ssa_op->op1_use) { in try_remove_definition()
2399 zend_ssa_unlink_use_chain(ssa, var->definition, ssa_op->op2_use); in try_remove_definition()
2401 ssa_op->op2_use = -1; in try_remove_definition()
2402 ssa_op->op2_use_chain = -1; in try_remove_definition()
2410 zend_ssa_remove_instr(ssa, opline + 1, ssa_op + 1); in try_remove_definition()
2416 zend_ssa_remove_instr(ssa, opline + 1, ssa_op + 1); in try_remove_definition()
2432 zend_ssa_rename_var_uses(ssa, ssa_op->op1_def, ssa_op->op1_use, 1); in try_remove_definition()
2434 zend_ssa_remove_op1_def(ssa, ssa_op); in try_remove_definition()
2435 zend_ssa_remove_instr(ssa, opline, ssa_op); in try_remove_definition()
2484 zend_ssa_op *ssa_op = &ssa->ops[use]; in replace_constant_operands() local
2485 if (try_replace_op1(ctx, opline, ssa_op, i, value)) { in replace_constant_operands()
2489 ZEND_ASSERT(ssa_op->op1_def == -1); in replace_constant_operands()
2490 if (ssa_op->op1_use != ssa_op->op2_use) { in replace_constant_operands()
2491 zend_ssa_unlink_use_chain(ssa, use, ssa_op->op1_use); in replace_constant_operands()
2493 ssa_op->op2_use_chain = ssa_op->op1_use_chain; in replace_constant_operands()
2495 ssa_op->op1_use = -1; in replace_constant_operands()
2496 ssa_op->op1_use_chain = -1; in replace_constant_operands()
2498 if (try_replace_op2(ctx, opline, ssa_op, i, value)) { in replace_constant_operands()
2499 ZEND_ASSERT(ssa_op->op2_def == -1); in replace_constant_operands()
2500 if (ssa_op->op2_use != ssa_op->op1_use) { in replace_constant_operands()
2501 zend_ssa_unlink_use_chain(ssa, use, ssa_op->op2_use); in replace_constant_operands()
2503 ssa_op->op2_use = -1; in replace_constant_operands()
2504 ssa_op->op2_use_chain = -1; in replace_constant_operands()