Lines Matching refs:zv

91 #define IS_TOP(zv) (Z_TYPE_P(zv) == TOP)  argument
92 #define IS_BOT(zv) (Z_TYPE_P(zv) == BOT) argument
93 #define IS_PARTIAL_ARRAY(zv) (Z_TYPE_P(zv) == PARTIAL_ARRAY) argument
94 #define IS_PARTIAL_OBJECT(zv) (Z_TYPE_P(zv) == PARTIAL_OBJECT) argument
96 #define MAKE_PARTIAL_ARRAY(zv) (Z_TYPE_INFO_P(zv) = PARTIAL_ARRAY | (IS_TYPE_REFCOUNTED << Z_TYPE_F… argument
97 #define MAKE_PARTIAL_OBJECT(zv) (Z_TYPE_INFO_P(zv) = PARTIAL_OBJECT | (IS_TYPE_REFCOUNTED << Z_TYPE… argument
99 #define MAKE_TOP(zv) (Z_TYPE_INFO_P(zv) = TOP) argument
100 #define MAKE_BOT(zv) (Z_TYPE_INFO_P(zv) = BOT) argument
102 static void scp_dump_value(zval *zv) { in scp_dump_value() argument
103 if (IS_TOP(zv)) { in scp_dump_value()
105 } else if (IS_BOT(zv)) { in scp_dump_value()
107 } else if (Z_TYPE_P(zv) == IS_ARRAY || IS_PARTIAL_ARRAY(zv)) { in scp_dump_value()
108 fprintf(stderr, " %s[", IS_PARTIAL_ARRAY(zv) ? "partial " : ""); in scp_dump_value()
109 zend_dump_ht(Z_ARRVAL_P(zv)); in scp_dump_value()
111 } else if (IS_PARTIAL_OBJECT(zv)) { in scp_dump_value()
113 zend_dump_ht(Z_ARRVAL_P(zv)); in scp_dump_value()
116 zend_dump_const(zv); in scp_dump_value()
120 static void empty_partial_array(zval *zv) in empty_partial_array() argument
122 MAKE_PARTIAL_ARRAY(zv); in empty_partial_array()
123 Z_ARR_P(zv) = zend_new_array(8); in empty_partial_array()
132 static void empty_partial_object(zval *zv) in empty_partial_object() argument
134 MAKE_PARTIAL_OBJECT(zv); in empty_partial_object()
135 Z_ARR_P(zv) = zend_new_array(8); in empty_partial_object()
144 static inline zend_bool value_known(zval *zv) { in value_known() argument
145 return !IS_TOP(zv) && !IS_BOT(zv); in value_known()
294 zval zv; in try_replace_op1() local
295 ZVAL_COPY(&zv, value); in try_replace_op1()
296 if (zend_optimizer_update_op1_const(ctx->scdf.op_array, opline, &zv)) { in try_replace_op1()
307 if (Z_TYPE(zv) == IS_STRING) { in try_replace_op1()
308 zend_string_hash_val(Z_STR(zv)); in try_replace_op1()
310 opline->op1.constant = zend_optimizer_add_literal(ctx->scdf.op_array, &zv); in try_replace_op1()
314 zval_ptr_dtor_nogc(&zv); in try_replace_op1()
315 ZVAL_FALSE(&zv); in try_replace_op1()
318 opline->op1.constant = zend_optimizer_add_literal(ctx->scdf.op_array, &zv); in try_replace_op1()
330 zval_ptr_dtor_nogc(&zv); in try_replace_op1()
339 zval zv; in try_replace_op2() local
340 ZVAL_COPY(&zv, value); in try_replace_op2()
341 if (zend_optimizer_update_op2_const(ctx->scdf.op_array, opline, &zv)) { in try_replace_op2()
346 if (Z_TYPE(zv) == IS_STRING) { in try_replace_op2()
349 if (zend_optimizer_update_op2_const(ctx->scdf.op_array, opline + 1, &zv)) { in try_replace_op2()
362 zval_ptr_dtor_nogc(&zv); in try_replace_op2()
456 zval zv; in ct_eval_isset_isempty() local
463 } else if (ct_eval_bool_cast(&zv, op1) == SUCCESS) { in ct_eval_isset_isempty()
464 ZVAL_BOOL(result, Z_TYPE(zv) == IS_FALSE); in ct_eval_isset_isempty()
1057 #define SET_RESULT(op, zv) do { \ argument
1059 set_value(scdf, ctx, ssa_op->op##_def, zv); \
1069 zval *op1, *op2, zv; /* zv is a temporary to hold result values */ in sccp_visit_instr() local
1093 ZVAL_FALSE(&zv); in sccp_visit_instr()
1094 SET_RESULT(result, &zv); in sccp_visit_instr()
1098 ZVAL_TRUE(&zv); in sccp_visit_instr()
1099 SET_RESULT(result, &zv); in sccp_visit_instr()
1129 empty_partial_array(&zv); in sccp_visit_instr()
1130 SET_RESULT(op1, &zv); in sccp_visit_instr()
1131 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1148 empty_partial_array(&zv); in sccp_visit_instr()
1150 dup_partial_array(&zv, op1); in sccp_visit_instr()
1155 SET_RESULT(op1, &zv); in sccp_visit_instr()
1156 } else if (ct_eval_del_array_elem(&zv, op2) == SUCCESS) { in sccp_visit_instr()
1157 SET_RESULT(op1, &zv); in sccp_visit_instr()
1162 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1170 dup_partial_array(&zv, op1); in sccp_visit_instr()
1172 ZVAL_COPY(&zv, op1); in sccp_visit_instr()
1175 if (!op2 && IS_PARTIAL_ARRAY(&zv)) { in sccp_visit_instr()
1178 SET_RESULT(op1, &zv); in sccp_visit_instr()
1179 } else if (ct_eval_assign_dim(&zv, data, op2) == SUCCESS) { in sccp_visit_instr()
1182 MAKE_PARTIAL_ARRAY(&zv); in sccp_visit_instr()
1185 SET_RESULT(op1, &zv); in sccp_visit_instr()
1191 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1228 empty_partial_object(&zv); in sccp_visit_instr()
1229 SET_RESULT(op1, &zv); in sccp_visit_instr()
1230 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1241 empty_partial_object(&zv); in sccp_visit_instr()
1243 dup_partial_object(&zv, op1); in sccp_visit_instr()
1246 if (ct_eval_del_obj_prop(&zv, op2) == SUCCESS) { in sccp_visit_instr()
1247 SET_RESULT(op1, &zv); in sccp_visit_instr()
1251 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1259 dup_partial_object(&zv, op1); in sccp_visit_instr()
1261 ZVAL_COPY(&zv, op1); in sccp_visit_instr()
1264 if (ct_eval_assign_obj(&zv, data, op2) == SUCCESS) { in sccp_visit_instr()
1266 SET_RESULT(op1, &zv); in sccp_visit_instr()
1272 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1335 empty_partial_array(&zv); in sccp_visit_instr()
1336 SET_RESULT(result, &zv); in sccp_visit_instr()
1337 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1350 empty_partial_array(&zv); in sccp_visit_instr()
1353 ZVAL_COPY_VALUE(&zv, result); in sccp_visit_instr()
1358 SET_RESULT(result, &zv); in sccp_visit_instr()
1359 } else if (ct_eval_del_array_elem(&zv, op2) == SUCCESS) { in sccp_visit_instr()
1360 SET_RESULT(result, &zv); in sccp_visit_instr()
1364 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1373 ZVAL_COPY_VALUE(&zv, result); in sccp_visit_instr()
1376 array_init(&zv); in sccp_visit_instr()
1380 if (!op2 && IS_PARTIAL_ARRAY(&zv)) { in sccp_visit_instr()
1382 SET_RESULT(result, &zv); in sccp_visit_instr()
1383 } else if (ct_eval_add_array_elem(&zv, op1, op2) == SUCCESS) { in sccp_visit_instr()
1385 MAKE_PARTIAL_ARRAY(&zv); in sccp_visit_instr()
1387 SET_RESULT(result, &zv); in sccp_visit_instr()
1392 SET_RESULT(result, &zv); in sccp_visit_instr()
1395 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1413 ZVAL_COPY_VALUE(&zv, result); in sccp_visit_instr()
1416 if (ct_eval_add_array_unpack(&zv, op1) == SUCCESS) { in sccp_visit_instr()
1417 SET_RESULT(result, &zv); in sccp_visit_instr()
1421 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1427 empty_partial_object(&zv); in sccp_visit_instr()
1428 SET_RESULT(result, &zv); in sccp_visit_instr()
1429 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1481 if (ct_eval_binary_op(&zv, opline->opcode, op1, op2) == SUCCESS) { in sccp_visit_instr()
1482 SET_RESULT(result, &zv); in sccp_visit_instr()
1483 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1499 if (ct_eval_binary_op(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1500 SET_RESULT(op1, &zv); in sccp_visit_instr()
1501 SET_RESULT(result, &zv); in sccp_visit_instr()
1502 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1515 dup_partial_array(&zv, op1); in sccp_visit_instr()
1516 ct_eval_del_array_elem(&zv, op2); in sccp_visit_instr()
1518 SET_RESULT(op1, &zv); in sccp_visit_instr()
1520 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1532 dup_partial_array(&zv, op1); in sccp_visit_instr()
1534 ZVAL_COPY(&zv, op1); in sccp_visit_instr()
1537 if (ct_eval_assign_dim(&zv, &tmp, op2) == SUCCESS) { in sccp_visit_instr()
1539 SET_RESULT(op1, &zv); in sccp_visit_instr()
1541 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1546 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1560 dup_partial_object(&zv, op1); in sccp_visit_instr()
1561 ct_eval_del_obj_prop(&zv, op2); in sccp_visit_instr()
1563 SET_RESULT(op1, &zv); in sccp_visit_instr()
1565 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1576 dup_partial_object(&zv, op1); in sccp_visit_instr()
1578 if (ct_eval_assign_obj(&zv, &tmp, op2) == SUCCESS) { in sccp_visit_instr()
1580 SET_RESULT(op1, &zv); in sccp_visit_instr()
1582 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1587 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1609 dup_partial_object(&zv, op1); in sccp_visit_instr()
1610 ct_eval_assign_obj(&zv, &tmp2, op2); in sccp_visit_instr()
1617 SET_RESULT(op1, &zv); in sccp_visit_instr()
1618 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1629 if (ct_eval_incdec(&zv, opline->opcode, op1) == SUCCESS) { in sccp_visit_instr()
1630 SET_RESULT(op1, &zv); in sccp_visit_instr()
1631 SET_RESULT(result, &zv); in sccp_visit_instr()
1632 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1642 if (ct_eval_incdec(&zv, opline->opcode, op1) == SUCCESS) { in sccp_visit_instr()
1643 SET_RESULT(op1, &zv); in sccp_visit_instr()
1644 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1656 if (zend_optimizer_eval_unary_op(&zv, opline->opcode, op1) == SUCCESS) { in sccp_visit_instr()
1657 SET_RESULT(result, &zv); in sccp_visit_instr()
1658 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1669 if (zend_optimizer_eval_cast(&zv, opline->extended_value, op1) == SUCCESS) { in sccp_visit_instr()
1670 SET_RESULT(result, &zv); in sccp_visit_instr()
1671 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1680 if (ct_eval_bool_cast(&zv, op1) == SUCCESS) { in sccp_visit_instr()
1681 SET_RESULT(result, &zv); in sccp_visit_instr()
1682 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1689 if (zend_optimizer_eval_strlen(&zv, op1) == SUCCESS) { in sccp_visit_instr()
1690 SET_RESULT(result, &zv); in sccp_visit_instr()
1691 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1699 ZVAL_LONG(&zv, zend_hash_num_elements(Z_ARRVAL_P(op1))); in sccp_visit_instr()
1700 SET_RESULT(result, &zv); in sccp_visit_instr()
1701 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1709 if (ct_eval_in_array(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1710 SET_RESULT(result, &zv); in sccp_visit_instr()
1711 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1719 if (ct_eval_array_key_exists(&zv, op1, op2) == SUCCESS) { in sccp_visit_instr()
1720 SET_RESULT(result, &zv); in sccp_visit_instr()
1721 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1732 if (ct_eval_fetch_dim(&zv, op1, op2, (opline->opcode != ZEND_FETCH_LIST_R)) == SUCCESS) { in sccp_visit_instr()
1733 SET_RESULT(result, &zv); in sccp_visit_instr()
1734 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1743 if (ct_eval_isset_dim(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1744 SET_RESULT(result, &zv); in sccp_visit_instr()
1745 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1756 if (ct_eval_fetch_obj(&zv, op1, op2) == SUCCESS) { in sccp_visit_instr()
1757 SET_RESULT(result, &zv); in sccp_visit_instr()
1758 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1769 if (ct_eval_isset_obj(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1770 SET_RESULT(result, &zv); in sccp_visit_instr()
1771 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1794 if (ct_eval_isset_isempty(&zv, opline->extended_value, op1) == SUCCESS) { in sccp_visit_instr()
1795 SET_RESULT(result, &zv); in sccp_visit_instr()
1796 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1803 ct_eval_type_check(&zv, opline->extended_value, op1); in sccp_visit_instr()
1804 SET_RESULT(result, &zv); in sccp_visit_instr()
1805 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1809 ZVAL_FALSE(&zv); in sccp_visit_instr()
1810 SET_RESULT(result, &zv); in sccp_visit_instr()
1818 if (zend_optimizer_eval_cast(&zv, IS_STRING, op2) == SUCCESS) { in sccp_visit_instr()
1819 SET_RESULT(result, &zv); in sccp_visit_instr()
1820 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1832 if (ct_eval_binary_op(&zv, ZEND_CONCAT, op1, op2) == SUCCESS) { in sccp_visit_instr()
1833 SET_RESULT(result, &zv); in sccp_visit_instr()
1834 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1888 if (ct_eval_func_call(&zv, Z_STR_P(name), call->num_args, args) == SUCCESS) { in sccp_visit_instr()
1889 SET_RESULT(result, &zv); in sccp_visit_instr()
1890 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1924 zval *op1, zv; in sccp_mark_feasible_successors() local
1958 if (ct_eval_bool_cast(&zv, op1) == FAILURE) { in sccp_mark_feasible_successors()
1963 s = Z_TYPE(zv) == IS_TRUE; in sccp_mark_feasible_successors()
1970 if (ct_eval_bool_cast(&zv, op1) == FAILURE) { in sccp_mark_feasible_successors()
1975 s = Z_TYPE(zv) == IS_FALSE; in sccp_mark_feasible_successors()
2545 zval *zv = &sccp.values[i]; in sccp_optimize_op_array() local
2547 if (IS_TOP(zv) || IS_BOT(zv)) { in sccp_optimize_op_array()
2559 scp_dump_value(zv); in sccp_optimize_op_array()