Lines Matching refs:zv

90 #define IS_TOP(zv) (Z_TYPE_P(zv) == TOP)  argument
91 #define IS_BOT(zv) (Z_TYPE_P(zv) == BOT) argument
92 #define IS_PARTIAL_ARRAY(zv) (Z_TYPE_P(zv) == PARTIAL_ARRAY) argument
93 #define IS_PARTIAL_OBJECT(zv) (Z_TYPE_P(zv) == PARTIAL_OBJECT) argument
95 #define MAKE_PARTIAL_ARRAY(zv) (Z_TYPE_INFO_P(zv) = PARTIAL_ARRAY | (IS_TYPE_REFCOUNTED << Z_TYPE_F… argument
96 #define MAKE_PARTIAL_OBJECT(zv) (Z_TYPE_INFO_P(zv) = PARTIAL_OBJECT | (IS_TYPE_REFCOUNTED << Z_TYPE… argument
98 #define MAKE_TOP(zv) (Z_TYPE_INFO_P(zv) = TOP) argument
99 #define MAKE_BOT(zv) (Z_TYPE_INFO_P(zv) = BOT) argument
101 static void scp_dump_value(zval *zv) { in scp_dump_value() argument
102 if (IS_TOP(zv)) { in scp_dump_value()
104 } else if (IS_BOT(zv)) { in scp_dump_value()
106 } else if (Z_TYPE_P(zv) == IS_ARRAY || IS_PARTIAL_ARRAY(zv)) { in scp_dump_value()
107 fprintf(stderr, " %s[", IS_PARTIAL_ARRAY(zv) ? "partial " : ""); in scp_dump_value()
108 zend_dump_ht(Z_ARRVAL_P(zv)); in scp_dump_value()
110 } else if (IS_PARTIAL_OBJECT(zv)) { in scp_dump_value()
112 zend_dump_ht(Z_ARRVAL_P(zv)); in scp_dump_value()
115 zend_dump_const(zv); in scp_dump_value()
119 static void empty_partial_array(zval *zv) in empty_partial_array() argument
121 MAKE_PARTIAL_ARRAY(zv); in empty_partial_array()
122 Z_ARR_P(zv) = zend_new_array(8); in empty_partial_array()
131 static void empty_partial_object(zval *zv) in empty_partial_object() argument
133 MAKE_PARTIAL_OBJECT(zv); in empty_partial_object()
134 Z_ARR_P(zv) = zend_new_array(8); in empty_partial_object()
143 static inline bool value_known(zval *zv) { in value_known() argument
144 return !IS_TOP(zv) && !IS_BOT(zv); in value_known()
295 zval zv; in try_replace_op1() local
296 ZVAL_COPY(&zv, value); in try_replace_op1()
297 if (zend_optimizer_update_op1_const(ctx->scdf.op_array, opline, &zv)) { in try_replace_op1()
300 zval_ptr_dtor_nogc(&zv); in try_replace_op1()
308 zval zv; in try_replace_op2() local
309 ZVAL_COPY(&zv, value); in try_replace_op2()
310 if (zend_optimizer_update_op2_const(ctx->scdf.op_array, opline, &zv)) { in try_replace_op2()
313 zval_ptr_dtor_nogc(&zv); in try_replace_op2()
411 zval zv; in ct_eval_isset_isempty() local
418 } else if (ct_eval_bool_cast(&zv, op1) == SUCCESS) { in ct_eval_isset_isempty()
419 ZVAL_BOOL(result, Z_TYPE(zv) == IS_FALSE); in ct_eval_isset_isempty()
858 #define SET_RESULT(op, zv) do { \ argument
860 set_value(scdf, ctx, ssa_op->op##_def, zv); \
870 zval *op1, *op2, zv; /* zv is a temporary to hold result values */ in sccp_visit_instr() local
913 empty_partial_array(&zv); in sccp_visit_instr()
914 SET_RESULT(op1, &zv); in sccp_visit_instr()
915 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
932 empty_partial_array(&zv); in sccp_visit_instr()
934 dup_partial_array(&zv, op1); in sccp_visit_instr()
939 SET_RESULT(op1, &zv); in sccp_visit_instr()
940 } else if (ct_eval_del_array_elem(&zv, op2) == SUCCESS) { in sccp_visit_instr()
941 SET_RESULT(op1, &zv); in sccp_visit_instr()
946 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
954 dup_partial_array(&zv, op1); in sccp_visit_instr()
956 ZVAL_COPY(&zv, op1); in sccp_visit_instr()
959 if (!op2 && IS_PARTIAL_ARRAY(&zv)) { in sccp_visit_instr()
962 SET_RESULT(op1, &zv); in sccp_visit_instr()
963 } else if (ct_eval_assign_dim(&zv, data, op2) == SUCCESS) { in sccp_visit_instr()
966 MAKE_PARTIAL_ARRAY(&zv); in sccp_visit_instr()
969 SET_RESULT(op1, &zv); in sccp_visit_instr()
975 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1009 empty_partial_object(&zv); in sccp_visit_instr()
1010 SET_RESULT(op1, &zv); in sccp_visit_instr()
1011 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1022 empty_partial_object(&zv); in sccp_visit_instr()
1024 dup_partial_object(&zv, op1); in sccp_visit_instr()
1027 if (ct_eval_del_obj_prop(&zv, op2) == SUCCESS) { in sccp_visit_instr()
1028 SET_RESULT(op1, &zv); in sccp_visit_instr()
1032 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1040 dup_partial_object(&zv, op1); in sccp_visit_instr()
1042 ZVAL_COPY(&zv, op1); in sccp_visit_instr()
1045 if (ct_eval_assign_obj(&zv, data, op2) == SUCCESS) { in sccp_visit_instr()
1047 SET_RESULT(op1, &zv); in sccp_visit_instr()
1053 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1116 empty_partial_array(&zv); in sccp_visit_instr()
1117 SET_RESULT(result, &zv); in sccp_visit_instr()
1118 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1131 empty_partial_array(&zv); in sccp_visit_instr()
1134 ZVAL_COPY_VALUE(&zv, result); in sccp_visit_instr()
1139 SET_RESULT(result, &zv); in sccp_visit_instr()
1140 } else if (ct_eval_del_array_elem(&zv, op2) == SUCCESS) { in sccp_visit_instr()
1141 SET_RESULT(result, &zv); in sccp_visit_instr()
1145 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1154 ZVAL_COPY_VALUE(&zv, result); in sccp_visit_instr()
1157 array_init(&zv); in sccp_visit_instr()
1161 if (!op2 && IS_PARTIAL_ARRAY(&zv)) { in sccp_visit_instr()
1163 SET_RESULT(result, &zv); in sccp_visit_instr()
1164 } else if (ct_eval_add_array_elem(&zv, op1, op2) == SUCCESS) { in sccp_visit_instr()
1166 MAKE_PARTIAL_ARRAY(&zv); in sccp_visit_instr()
1168 SET_RESULT(result, &zv); in sccp_visit_instr()
1173 SET_RESULT(result, &zv); in sccp_visit_instr()
1176 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1194 ZVAL_COPY_VALUE(&zv, result); in sccp_visit_instr()
1197 if (ct_eval_add_array_unpack(&zv, op1) == SUCCESS) { in sccp_visit_instr()
1198 SET_RESULT(result, &zv); in sccp_visit_instr()
1202 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1208 empty_partial_object(&zv); in sccp_visit_instr()
1209 SET_RESULT(result, &zv); in sccp_visit_instr()
1210 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1263 if (ct_eval_binary_op(&zv, opline->opcode, op1, op2) == SUCCESS) { in sccp_visit_instr()
1264 SET_RESULT(result, &zv); in sccp_visit_instr()
1265 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1281 if (ct_eval_binary_op(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1282 SET_RESULT(op1, &zv); in sccp_visit_instr()
1283 SET_RESULT(result, &zv); in sccp_visit_instr()
1284 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1297 dup_partial_array(&zv, op1); in sccp_visit_instr()
1298 ct_eval_del_array_elem(&zv, op2); in sccp_visit_instr()
1300 SET_RESULT(op1, &zv); in sccp_visit_instr()
1302 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1314 dup_partial_array(&zv, op1); in sccp_visit_instr()
1316 ZVAL_COPY(&zv, op1); in sccp_visit_instr()
1319 if (ct_eval_assign_dim(&zv, &tmp, op2) == SUCCESS) { in sccp_visit_instr()
1321 SET_RESULT(op1, &zv); in sccp_visit_instr()
1323 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1328 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1342 dup_partial_object(&zv, op1); in sccp_visit_instr()
1343 ct_eval_del_obj_prop(&zv, op2); in sccp_visit_instr()
1345 SET_RESULT(op1, &zv); in sccp_visit_instr()
1347 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1358 dup_partial_object(&zv, op1); in sccp_visit_instr()
1360 if (ct_eval_assign_obj(&zv, &tmp, op2) == SUCCESS) { in sccp_visit_instr()
1362 SET_RESULT(op1, &zv); in sccp_visit_instr()
1364 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1369 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1390 dup_partial_object(&zv, op1); in sccp_visit_instr()
1391 ct_eval_assign_obj(&zv, &tmp2, op2); in sccp_visit_instr()
1399 SET_RESULT(op1, &zv); in sccp_visit_instr()
1400 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1413 if (ct_eval_incdec(&zv, opline->opcode, op1) == SUCCESS) { in sccp_visit_instr()
1414 SET_RESULT(op1, &zv); in sccp_visit_instr()
1415 SET_RESULT(result, &zv); in sccp_visit_instr()
1416 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1426 if (ct_eval_incdec(&zv, opline->opcode, op1) == SUCCESS) { in sccp_visit_instr()
1427 SET_RESULT(op1, &zv); in sccp_visit_instr()
1428 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1440 if (zend_optimizer_eval_unary_op(&zv, opline->opcode, op1) == SUCCESS) { in sccp_visit_instr()
1441 SET_RESULT(result, &zv); in sccp_visit_instr()
1442 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1453 if (zend_optimizer_eval_cast(&zv, opline->extended_value, op1) == SUCCESS) { in sccp_visit_instr()
1454 SET_RESULT(result, &zv); in sccp_visit_instr()
1455 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1464 if (ct_eval_bool_cast(&zv, op1) == SUCCESS) { in sccp_visit_instr()
1465 SET_RESULT(result, &zv); in sccp_visit_instr()
1466 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1473 if (zend_optimizer_eval_strlen(&zv, op1) == SUCCESS) { in sccp_visit_instr()
1474 SET_RESULT(result, &zv); in sccp_visit_instr()
1475 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1484 ZVAL_NULL(&zv); in sccp_visit_instr()
1485 SET_RESULT(result, &zv); in sccp_visit_instr()
1493 ZVAL_LONG(&zv, zend_hash_num_elements(Z_ARRVAL_P(op1))); in sccp_visit_instr()
1494 SET_RESULT(result, &zv); in sccp_visit_instr()
1495 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1503 if (ct_eval_in_array(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1504 SET_RESULT(result, &zv); in sccp_visit_instr()
1505 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1513 if (ct_eval_array_key_exists(&zv, op1, op2) == SUCCESS) { in sccp_visit_instr()
1514 SET_RESULT(result, &zv); in sccp_visit_instr()
1515 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1526 if (ct_eval_fetch_dim(&zv, op1, op2, (opline->opcode != ZEND_FETCH_LIST_R)) == SUCCESS) { in sccp_visit_instr()
1527 SET_RESULT(result, &zv); in sccp_visit_instr()
1528 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1537 if (ct_eval_isset_dim(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1538 SET_RESULT(result, &zv); in sccp_visit_instr()
1539 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1550 if (ct_eval_fetch_obj(&zv, op1, op2) == SUCCESS) { in sccp_visit_instr()
1551 SET_RESULT(result, &zv); in sccp_visit_instr()
1552 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1563 if (ct_eval_isset_obj(&zv, opline->extended_value, op1, op2) == SUCCESS) { in sccp_visit_instr()
1564 SET_RESULT(result, &zv); in sccp_visit_instr()
1565 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1580 ZVAL_NULL(&zv); in sccp_visit_instr()
1583 ZVAL_FALSE(&zv); in sccp_visit_instr()
1586 ZVAL_TRUE(&zv); in sccp_visit_instr()
1590 SET_RESULT(result, &zv); in sccp_visit_instr()
1597 if (ct_eval_isset_isempty(&zv, opline->extended_value, op1) == SUCCESS) { in sccp_visit_instr()
1598 SET_RESULT(result, &zv); in sccp_visit_instr()
1599 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1606 ct_eval_type_check(&zv, opline->extended_value, op1); in sccp_visit_instr()
1607 SET_RESULT(result, &zv); in sccp_visit_instr()
1608 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1612 ZVAL_FALSE(&zv); in sccp_visit_instr()
1613 SET_RESULT(result, &zv); in sccp_visit_instr()
1621 if (zend_optimizer_eval_cast(&zv, IS_STRING, op2) == SUCCESS) { in sccp_visit_instr()
1622 SET_RESULT(result, &zv); in sccp_visit_instr()
1623 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1635 if (ct_eval_binary_op(&zv, ZEND_CONCAT, op1, op2) == SUCCESS) { in sccp_visit_instr()
1636 SET_RESULT(result, &zv); in sccp_visit_instr()
1637 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1692 if (ct_eval_func_call(scdf->op_array, &zv, Z_STR_P(name), call->num_args, args) == SUCCESS) { in sccp_visit_instr()
1693 SET_RESULT(result, &zv); in sccp_visit_instr()
1694 zval_ptr_dtor_nogc(&zv); in sccp_visit_instr()
1779 zval *op1, zv; in sccp_mark_feasible_successors() local
1797 op1 = value_from_type_and_range(ctx, ssa_op->op1_use, &zv); in sccp_mark_feasible_successors()
1817 if (ct_eval_bool_cast(&zv, op1) == FAILURE) { in sccp_mark_feasible_successors()
1822 s = Z_TYPE(zv) == IS_TRUE; in sccp_mark_feasible_successors()
1829 if (ct_eval_bool_cast(&zv, op1) == FAILURE) { in sccp_mark_feasible_successors()
1834 s = Z_TYPE(zv) == IS_FALSE; in sccp_mark_feasible_successors()
2427 zval *zv = &sccp.values[i]; in sccp_optimize_op_array() local
2429 if (IS_TOP(zv) || IS_BOT(zv)) { in sccp_optimize_op_array()
2441 scp_dump_value(zv); in sccp_optimize_op_array()