Lines Matching refs:ssa_op

189 static zval *get_op1_value(sccp_ctx *ctx, zend_op *opline, 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, zend_op *opline, 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, zend_op *opline, zend_ssa_op *ssa_op) { in can_replace_op1() argument
269 if (ssa_op->op1_def != -1) { in can_replace_op1()
279 const zend_op_array *op_array, zend_op *opline, zend_ssa_op *ssa_op) { in can_replace_op2() argument
292 sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op, int var, zval *value) { in try_replace_op1() argument
293 if (ssa_op->op1_use == var && can_replace_op1(ctx->scdf.op_array, opline, ssa_op)) { in try_replace_op1()
305 sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op, int var, zval *value) { in try_replace_op2() argument
306 if (ssa_op->op2_use == var && can_replace_op2(ctx->scdf.op_array, opline, ssa_op)) { in try_replace_op2()
848 if (ssa_op->op##_def >= 0) { \
849 set_value(scdf, ctx, ssa_op->op##_def, zv); \
857 static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_op) { in sccp_visit_instr() argument
861 op1 = get_op1_value(ctx, opline, ssa_op); in sccp_visit_instr()
862 op2 = get_op2_value(ctx, opline, ssa_op); in sccp_visit_instr()
869 if (IS_BOT(op1) && (ctx->scdf.ssa->var_info[ssa_op->op1_use].type & MAY_BE_REF)) { in sccp_visit_instr()
879 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
882 if ((ctx->scdf.ssa->var_info[ssa_op->op1_use].type & MAY_BE_ANY) == 0) { in sccp_visit_instr()
901 if (ssa_op->op1_def >= 0) { in sccp_visit_instr()
918 && ssa_op->op1_def >= 0) { in sccp_visit_instr()
970 if (ssa_op->op1_def >= 0 in sccp_visit_instr()
971 && ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
972 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
973 zend_ssa_var_info *var_info = &ctx->scdf.ssa->var_info[ssa_op->op1_use]; in sccp_visit_instr()
1067 ssa_op = &ctx->scdf.ssa->ops[opline - ctx->scdf.op_array->opcodes]; in sccp_visit_instr()
1076 result = &ctx->values[ssa_op->result_use]; in sccp_visit_instr()
1104 if (ssa_op->result_def >= 0) { in sccp_visit_instr()
1118 if (ssa_op->result_def >= 0) { in sccp_visit_instr()
1170 zval *result = &ctx->values[ssa_op->result_use]; in sccp_visit_instr()
1195 if (ssa_op->result_def >= 0 in sccp_visit_instr()
1196 && ctx->scdf.ssa->vars[ssa_op->result_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
1212 ssa_op++; in sccp_visit_instr()
1278 && ssa_op->op1_def >= 0 && op2) { in sccp_visit_instr()
1280 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
1322 && ssa_op->op1_def >= 0 in sccp_visit_instr()
1323 && ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
1325 zval *data = get_op1_value(ctx, opline+1, ssa_op+1); in sccp_visit_instr()
1373 && ssa_op->op1_def >= 0 in sccp_visit_instr()
1374 && ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) { in sccp_visit_instr()
1645 if (ssa_op->result_def < 0 || IS_BOT(&ctx->values[ssa_op->result_def])) { in sccp_visit_instr()
1676 if (!IS_TOP(&ctx->values[ssa_op->result_def])) { in sccp_visit_instr()
1765 zend_op *opline, zend_ssa_op *ssa_op) { in sccp_mark_feasible_successors() argument
1781 op1 = get_op1_value(ctx, opline, ssa_op); in sccp_mark_feasible_successors()
1783 ZEND_ASSERT(ssa_op->op1_use >= 0); in sccp_mark_feasible_successors()
1784 op1 = value_from_type_and_range(ctx, ssa_op->op1_use, &zv); in sccp_mark_feasible_successors()
2021 static int remove_call(sccp_ctx *ctx, zend_op *opline, zend_ssa_op *ssa_op) in remove_call() argument
2032 zend_ssa_remove_instr(ssa, opline, ssa_op); in remove_call()
2068 zend_ssa_op *ssa_op = &ssa->ops[var->definition]; in try_remove_definition() local
2070 if (ssa_op->result_def == var_num) { in try_remove_definition()
2075 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2079 if (ssa_op->op1_def >= 0 || ssa_op->op2_def >= 0) { in try_remove_definition()
2106 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2141 ssa_op->result_def = -1; in try_remove_definition()
2143 removed_ops = remove_call(ctx, opline, ssa_op) - 1; in try_remove_definition()
2145 zend_ssa_remove_instr(ssa, opline, ssa_op); in try_remove_definition()
2147 ssa_op->result_def = var_num; in try_remove_definition()
2156 && (!value_known(&ctx->values[ssa_op->op2_use]) in try_remove_definition()
2157 || IS_PARTIAL_ARRAY(&ctx->values[ssa_op->op2_use]) in try_remove_definition()
2158 || IS_PARTIAL_OBJECT(&ctx->values[ssa_op->op2_use]))) { in try_remove_definition()
2161 && (!value_known(&ctx->values[ssa_op->op1_use]) in try_remove_definition()
2162 || IS_PARTIAL_ARRAY(&ctx->values[ssa_op->op1_use]) in try_remove_definition()
2163 || IS_PARTIAL_OBJECT(&ctx->values[ssa_op->op1_use]))) { in try_remove_definition()
2166 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2177 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2179 removed_ops = remove_call(ctx, opline, ssa_op); in try_remove_definition()
2181 zend_ssa_remove_instr(ssa, opline, ssa_op); in try_remove_definition()
2185 } else if (ssa_op->op1_def == var_num) { in try_remove_definition()
2202 if ((ssa_op->op2_use >= 0 && !value_known(&ctx->values[ssa_op->op2_use])) in try_remove_definition()
2203 || ((ssa_op+1)->op1_use >= 0 &&!value_known(&ctx->values[(ssa_op+1)->op1_use]))) { in try_remove_definition()
2211 if (ssa_op->op2_use >= 0 && !value_known(&ctx->values[ssa_op->op2_use])) { in try_remove_definition()
2222 if (zend_may_throw(opline, ssa_op, op_array, ssa)) { in try_remove_definition()
2230 if (ssa_op->result_def >= 0) { in try_remove_definition()
2231 if (ssa->vars[ssa_op->result_def].use_chain < 0 in try_remove_definition()
2232 && ssa->vars[ssa_op->result_def].phi_use_chain == NULL) { in try_remove_definition()
2233 zend_ssa_remove_result_def(ssa, ssa_op); in try_remove_definition()
2245 } else if (ssa_op->op2_use >= 0) { in try_remove_definition()
2246 if (ssa_op->op2_use != ssa_op->op1_use) { in try_remove_definition()
2247 zend_ssa_unlink_use_chain(ssa, var->definition, ssa_op->op2_use); in try_remove_definition()
2249 ssa_op->op2_use = -1; in try_remove_definition()
2250 ssa_op->op2_use_chain = -1; in try_remove_definition()
2258 zend_ssa_remove_instr(ssa, opline + 1, ssa_op + 1); in try_remove_definition()
2264 zend_ssa_remove_instr(ssa, opline + 1, ssa_op + 1); in try_remove_definition()
2280 zend_ssa_rename_var_uses(ssa, ssa_op->op1_def, ssa_op->op1_use, 1); in try_remove_definition()
2282 zend_ssa_remove_op1_def(ssa, ssa_op); in try_remove_definition()
2283 zend_ssa_remove_instr(ssa, opline, ssa_op); in try_remove_definition()
2332 zend_ssa_op *ssa_op = &ssa->ops[use]; in replace_constant_operands() local
2333 if (try_replace_op1(ctx, opline, ssa_op, i, value)) { in replace_constant_operands()
2337 ZEND_ASSERT(ssa_op->op1_def == -1); in replace_constant_operands()
2338 if (ssa_op->op1_use != ssa_op->op2_use) { in replace_constant_operands()
2339 zend_ssa_unlink_use_chain(ssa, use, ssa_op->op1_use); in replace_constant_operands()
2341 ssa_op->op2_use_chain = ssa_op->op1_use_chain; in replace_constant_operands()
2343 ssa_op->op1_use = -1; in replace_constant_operands()
2344 ssa_op->op1_use_chain = -1; in replace_constant_operands()
2346 if (try_replace_op2(ctx, opline, ssa_op, i, value)) { in replace_constant_operands()
2347 ZEND_ASSERT(ssa_op->op2_def == -1); in replace_constant_operands()
2348 if (ssa_op->op2_use != ssa_op->op1_use) { in replace_constant_operands()
2349 zend_ssa_unlink_use_chain(ssa, use, ssa_op->op2_use); in replace_constant_operands()
2351 ssa_op->op2_use = -1; in replace_constant_operands()
2352 ssa_op->op2_use_chain = -1; in replace_constant_operands()