From: Dmitry Stogov Date: Wed, 30 Apr 2008 10:44:24 +0000 (+0000) Subject: IS_CONST operands are always have is_ref==1 and refcount==2, so we can eliminate X-Git-Tag: RELEASE_2_0_0b1~139 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=96ab33de6edba60ffaeba3e667f1e1790c04af84;p=php IS_CONST operands are always have is_ref==1 and refcount==2, so we can eliminate unnecessary checks at specialization/compilation stage --- diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 287543fc76..424570a167 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2374,7 +2374,8 @@ ZEND_VM_C_LABEL(return_by_value): FREE_OP1(); } } else if (!IS_OP1_TMP_FREE()) { /* Not a temp var */ - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF || + if (OP1_TYPE == IS_CONST || + EG(active_op_array)->return_reference == ZEND_RETURN_REF || (PZVAL_IS_REF(retval_ptr) && Z_REFCOUNT_P(retval_ptr) > 0)) { zval *ret; @@ -2964,7 +2965,7 @@ ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMP|VAR|UNUS Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (OP1_TYPE == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 933f06b821..cc47d898ea 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1429,7 +1429,8 @@ return_by_value: } } else if (!0) { /* Not a temp var */ - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF || + if (IS_CONST == IS_CONST || + EG(active_op_array)->return_reference == ZEND_RETURN_REF || (PZVAL_IS_REF(retval_ptr) && Z_REFCOUNT_P(retval_ptr) > 0)) { zval *ret; @@ -2716,7 +2717,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_A Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_CONST == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -3223,7 +3224,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARG Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_CONST == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -3692,7 +3693,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARG Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_CONST == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -3885,7 +3886,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_CONST == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -4353,7 +4354,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_CONST == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -4780,7 +4781,8 @@ return_by_value: zval_dtor(free_op1.var); } } else if (!1) { /* Not a temp var */ - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF || + if (IS_TMP_VAR == IS_CONST || + EG(active_op_array)->return_reference == ZEND_RETURN_REF || (PZVAL_IS_REF(retval_ptr) && Z_REFCOUNT_P(retval_ptr) > 0)) { zval *ret; @@ -6009,7 +6011,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_TMP_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -6472,7 +6474,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_TMP_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -6935,7 +6937,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_TMP_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -7029,7 +7031,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_AR Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_TMP_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -7489,7 +7491,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_TMP_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -8068,7 +8070,8 @@ return_by_value: if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; } } else if (!0) { /* Not a temp var */ - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF || + if (IS_VAR == IS_CONST || + EG(active_op_array)->return_reference == ZEND_RETURN_REF || (PZVAL_IS_REF(retval_ptr) && Z_REFCOUNT_P(retval_ptr) > 0)) { zval *ret; @@ -10662,7 +10665,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARG Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -12479,7 +12482,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -14337,7 +14340,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -15261,7 +15264,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_AR Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -16800,7 +16803,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_VAR == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -22386,7 +22389,8 @@ return_by_value: } } else if (!0) { /* Not a temp var */ - if (EG(active_op_array)->return_reference == ZEND_RETURN_REF || + if (IS_CV == IS_CONST || + EG(active_op_array)->return_reference == ZEND_RETURN_REF || (PZVAL_IS_REF(retval_ptr) && Z_REFCOUNT_P(retval_ptr) > 0)) { zval *ret; @@ -24634,7 +24638,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_CV == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -26340,7 +26344,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_CV == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -28086,7 +28090,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_CV == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -28905,7 +28909,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARG Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_CV == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr); @@ -30336,7 +30340,7 @@ static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) Z_ADDREF_P(expr_ptr); } else #endif - if (PZVAL_IS_REF(expr_ptr)) { + if (IS_CV == IS_CONST || PZVAL_IS_REF(expr_ptr)) { zval *new_expr; ALLOC_ZVAL(new_expr);