]> granicus.if.org Git - php/commitdiff
Remove handling for defined() and strlen() in opcache
authorNikita Popov <nikic@php.net>
Fri, 9 Sep 2016 15:11:25 +0000 (17:11 +0200)
committerNikita Popov <nikic@php.net>
Fri, 9 Sep 2016 15:11:25 +0000 (17:11 +0200)
These are converted by the compiler into DEFINED and STRLEN, no
need to handle the function forms.

ext/opcache/Optimizer/block_pass.c
ext/opcache/Optimizer/pass1_5.c

index e36c533d375e4a80a8b9d6ac4d6a34a11e78c0c5..100862cb1f4e0849dd46c2acfdf80392d7b8c7b4 100644 (file)
@@ -284,7 +284,6 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
 #if 0
                /* pre-evaluate functions:
                   constant(x)
-                  defined(x)
                   function_exists(x)
                   extension_loaded(x)
                   BAD: interacts badly with Accelerator
@@ -301,16 +300,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array
                                zval *arg = &OPLINE_OP1_LITERAL(sv);
                                char *fname = FUNCTION_CACHE->funcs[Z_LVAL(ZEND_OP1_LITERAL(fcall))].function_name;
                                int flen = FUNCTION_CACHE->funcs[Z_LVAL(ZEND_OP1_LITERAL(fcall))].name_len;
-                               if(flen == sizeof("defined")-1 && zend_binary_strcasecmp(fname, flen, "defined", sizeof("defined")-1) == 0) {
-                                       zval c;
-                                       if(zend_optimizer_get_persistent_constant(Z_STR_P(arg), &c, 0 ELS_CC) != 0) {
-                                               literal_dtor(arg);
-                                               MAKE_NOP(sv);
-                                               MAKE_NOP(fcall);
-                                               LITERAL_BOOL(opline->op1, 1);
-                                               ZEND_OP1_TYPE(opline) = IS_CONST;
-                                       }
-                               } else if((flen == sizeof("function_exists")-1 && zend_binary_strcasecmp(fname, flen, "function_exists", sizeof("function_exists")-1) == 0) ||
+                               if((flen == sizeof("function_exists")-1 && zend_binary_strcasecmp(fname, flen, "function_exists", sizeof("function_exists")-1) == 0) ||
                                                  (flen == sizeof("is_callable")-1 && zend_binary_strcasecmp(fname, flen, "is_callable", sizeof("is_callable")-1) == 0)
                                                  ) {
                                        zend_function *function;
index e8399ccc90ab40dd7b8de6b53abeba01fa0d5121..ea9c5c1323de58ec1ed04ddbfa8bcb73e37c31af 100644 (file)
@@ -436,7 +436,6 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
                        }
 
                        /* pre-evaluate constant functions:
-                          defined(x)
                           constant(x)
                           function_exists(x)
                           is_callable(x)
@@ -518,24 +517,6 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
                                                MAKE_NOP(opline);
                                                break;
                                        }
-                               } else if (Z_STRLEN(ZEND_OP2_LITERAL(init_opline)) == sizeof("defined")-1 &&
-                                       !memcmp(Z_STRVAL(ZEND_OP2_LITERAL(init_opline)),
-                                               "defined", sizeof("defined")-1) &&
-                                       !zend_optimizer_is_disabled_func("defined", sizeof("defined") - 1)) {
-                                       zval t;
-
-                                       if (zend_optimizer_get_persistent_constant(Z_STR(ZEND_OP1_LITERAL(send1_opline)), &t, 0)) {
-
-                                               ZVAL_TRUE(&t);
-                                               if (zend_optimizer_replace_by_const(op_array, opline + 1, IS_VAR, ZEND_RESULT(opline).var, &t)) {
-                                                       literal_dtor(&ZEND_OP2_LITERAL(init_opline));
-                                                       MAKE_NOP(init_opline);
-                                                       literal_dtor(&ZEND_OP1_LITERAL(send1_opline));
-                                                       MAKE_NOP(send1_opline);
-                                                       MAKE_NOP(opline);
-                                                       break;
-                                               }
-                                       }
                                } else if (Z_STRLEN(ZEND_OP2_LITERAL(init_opline)) == sizeof("constant")-1 &&
                                        !memcmp(Z_STRVAL(ZEND_OP2_LITERAL(init_opline)),
                                                "constant", sizeof("constant")-1) &&
@@ -552,21 +533,6 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
                                                        break;
                                                }
                                        }
-                               } else if ((CG(compiler_options) & ZEND_COMPILE_NO_BUILTIN_STRLEN) == 0 &&
-                                       Z_STRLEN(ZEND_OP2_LITERAL(init_opline)) == sizeof("strlen") - 1 &&
-                                       !memcmp(Z_STRVAL(ZEND_OP2_LITERAL(init_opline)), "strlen", sizeof("strlen") - 1) &&
-                                       !zend_optimizer_is_disabled_func("strlen", sizeof("strlen") - 1)) {
-                                       zval t;
-
-                                       ZVAL_LONG(&t, Z_STRLEN(ZEND_OP1_LITERAL(send1_opline)));
-                                       if (zend_optimizer_replace_by_const(op_array, opline + 1, IS_VAR, ZEND_RESULT(opline).var, &t)) {
-                                               literal_dtor(&ZEND_OP2_LITERAL(init_opline));
-                                               MAKE_NOP(init_opline);
-                                               literal_dtor(&ZEND_OP1_LITERAL(send1_opline));
-                                               MAKE_NOP(send1_opline);
-                                               MAKE_NOP(opline);
-                                               break;
-                                       }
                                /* dirname(IS_CONST/IS_STRING) -> IS_CONST/IS_STRING */
                                } else if (Z_STRLEN(ZEND_OP2_LITERAL(init_opline)) == sizeof("dirname")-1 &&
                                        !memcmp(Z_STRVAL(ZEND_OP2_LITERAL(init_opline)),