From aeca761856b2b0e6aea85a6dbf8837684d206e21 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 26 Oct 2017 19:13:53 +0300 Subject: [PATCH] Removed useless reallocations --- Zend/zend_execute.c | 2 -- Zend/zend_execute_API.c | 2 +- Zend/zend_object_handlers.c | 2 +- Zend/zend_operators.c | 2 ++ Zend/zend_vm_def.h | 6 ------ Zend/zend_vm_execute.h | 40 ------------------------------------- 6 files changed, 4 insertions(+), 50 deletions(-) diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 4e841d5a7f..8f04518d15 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1364,7 +1364,6 @@ static zend_never_inline void zend_pre_incdec_overloaded_property(zval *object, ZVAL_COPY_VALUE(z, value); } ZVAL_DEREF(z); - SEPARATE_ZVAL_NOREF(z); if (inc) { increment_function(z); } else { @@ -1412,7 +1411,6 @@ static zend_never_inline void zend_assign_op_overloaded_property(zval *object, z } zptr = z; ZVAL_DEREF(z); - SEPARATE_ZVAL_NOREF(z); binary_op(z, z, value); Z_OBJ_HT(obj)->write_property(&obj, property, z, cache_slot); if (UNEXPECTED(result)) { diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index e69a84ba6b..7792325af8 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -589,7 +589,7 @@ ZEND_API int zval_update_constant_ex(zval *p, zend_class_entry *scope) /* {{{ */ return zend_use_undefined_constant(name, ast->attr, p); } zval_ptr_dtor_nogc(p); - ZVAL_DUP(p, zv); + ZVAL_COPY(p, zv); } else { zval tmp; diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 389e1c6b80..27177a80fc 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -650,7 +650,7 @@ zval *zend_std_read_property(zval *object, zval *member, int type, void **cache_ retval = rv; if (!Z_ISREF_P(rv) && (type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET)) { - SEPARATE_ZVAL(rv); + SEPARATE_ZVAL_NOREF(rv); if (UNEXPECTED(Z_TYPE_P(rv) != IS_OBJECT)) { zend_error(E_NOTICE, "Indirect modification of overloaded property %s::$%s has no effect", ZSTR_VAL(zobj->ce->name), Z_STRVAL_P(member)); } diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 1449405b43..076c170f36 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -923,6 +923,8 @@ ZEND_API int ZEND_FASTCALL add_function(zval *result, zval *op1, zval *op2) /* { } if (result != op1) { ZVAL_DUP(result, op1); + } else { + SEPARATE_ARRAY(result); } zend_hash_merge(Z_ARRVAL_P(result), Z_ARRVAL_P(op2), zval_add_ref, 0); return SUCCESS; diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 3f1c94a942..9bed9f86bb 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -830,7 +830,6 @@ ZEND_VM_HELPER(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { @@ -881,7 +880,6 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array): ZEND_VM_C_GOTO(assign_dim_op_ret_null); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); @@ -956,7 +954,6 @@ ZEND_VM_HELPER(zend_binary_assign_op_simple_helper, VAR|CV, CONST|TMPVAR|CV, bin } } else { ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); binary_op(var_ptr, var_ptr, value); @@ -1097,7 +1094,6 @@ ZEND_VM_HELPER(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); if (inc) { increment_function(zptr); @@ -1231,7 +1227,6 @@ ZEND_VM_HANDLER(34, ZEND_PRE_INC, VAR|CV, ANY, SPEC(RETVAL)) var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); increment_function(var_ptr); @@ -1271,7 +1266,6 @@ ZEND_VM_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY, SPEC(RETVAL)) var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); decrement_function(var_ptr); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 5d6b1424bf..e04ddeb2f1 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -15931,7 +15931,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); increment_function(var_ptr); @@ -15971,7 +15970,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_H var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); increment_function(var_ptr); @@ -16011,7 +16009,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); decrement_function(var_ptr); @@ -16051,7 +16048,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_H var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); decrement_function(var_ptr); @@ -17773,7 +17769,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { @@ -17824,7 +17819,6 @@ assign_dim_op_new_array: goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); @@ -17898,7 +17892,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper } } else { ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); binary_op(var_ptr, var_ptr, value); @@ -18198,7 +18191,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); if (inc) { increment_function(zptr); @@ -20863,7 +20855,6 @@ assign_dim_op_new_array: goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); @@ -22117,7 +22108,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { @@ -22168,7 +22158,6 @@ assign_dim_op_new_array: goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); @@ -22242,7 +22231,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper } } else { ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); binary_op(var_ptr, var_ptr, value); @@ -22542,7 +22530,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); if (inc) { increment_function(zptr); @@ -24738,7 +24725,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { @@ -24789,7 +24775,6 @@ assign_dim_op_new_array: goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); @@ -24864,7 +24849,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper } } else { ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); binary_op(var_ptr, var_ptr, value); @@ -25165,7 +25149,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); if (inc) { increment_function(zptr); @@ -27190,7 +27173,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { @@ -27336,7 +27318,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); if (inc) { increment_function(zptr); @@ -29848,7 +29829,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { @@ -29994,7 +29974,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); if (inc) { increment_function(zptr); @@ -31606,7 +31585,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { @@ -31752,7 +31730,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); if (inc) { increment_function(zptr); @@ -33264,7 +33241,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_ var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); increment_function(var_ptr); @@ -33303,7 +33279,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HA var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); increment_function(var_ptr); @@ -33342,7 +33317,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_ var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); decrement_function(var_ptr); @@ -33381,7 +33355,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HA var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); decrement_function(var_ptr); @@ -35694,7 +35667,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { @@ -35745,7 +35717,6 @@ assign_dim_op_new_array: goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); @@ -35819,7 +35790,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper } } else { ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); binary_op(var_ptr, var_ptr, value); @@ -36119,7 +36089,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); if (inc) { increment_function(zptr); @@ -39942,7 +39911,6 @@ assign_dim_op_new_array: goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); @@ -42241,7 +42209,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { @@ -42292,7 +42259,6 @@ assign_dim_op_new_array: goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); @@ -42366,7 +42332,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper } } else { ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); binary_op(var_ptr, var_ptr, value); @@ -42666,7 +42631,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); if (inc) { increment_function(zptr); @@ -45954,7 +45918,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SP } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { @@ -46005,7 +45968,6 @@ assign_dim_op_new_array: goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); @@ -46080,7 +46042,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper } } else { ZVAL_DEREF(var_ptr); - SEPARATE_ZVAL_NOREF(var_ptr); binary_op(var_ptr, var_ptr, value); @@ -46381,7 +46342,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPE } } else { ZVAL_DEREF(zptr); - SEPARATE_ZVAL_NOREF(zptr); if (inc) { increment_function(zptr); -- 2.40.0