]> granicus.if.org Git - php/commitdiff
Remove ZEND_BRK/ZEND_CONT from VM
authorNikita Popov <nikic@php.net>
Fri, 22 May 2015 20:31:02 +0000 (22:31 +0200)
committerNikita Popov <nikic@php.net>
Sat, 23 May 2015 08:51:33 +0000 (10:51 +0200)
These are no longer used at run-time now, only temporarily during
compilation.

Zend/zend_compile.h
Zend/zend_vm_def.h
Zend/zend_vm_execute.h
Zend/zend_vm_opcodes.c
Zend/zend_vm_opcodes.h
ext/opcache/Optimizer/block_pass.c
ext/opcache/Optimizer/pass1_5.c
ext/opcache/Optimizer/pass2.c
ext/opcache/Optimizer/pass3.c

index 3c3569b9f09fcfc06449dddfe639dc10e8003d14..3f9098c314fee7cfb57e4908b2141de3625ace6b 100644 (file)
@@ -949,6 +949,11 @@ static zend_always_inline int zend_check_arg_send_type(const zend_function *zf,
 #define ZEND_ARRAY_NOT_PACKED          (1<<1)
 #define ZEND_ARRAY_SIZE_SHIFT          2
 
+/* Pseudo-opcodes that are used only temporarily during compilation */
+#define ZEND_BRK 254
+#define ZEND_CONT 255
+
+
 END_EXTERN_C()
 
 #define ZEND_CLONE_FUNC_NAME           "__clone"
index f63a41e51514772213b3a5311aeb03dcba5e5eee..d3ca96819d1a3cfc82da0f6b409a3515ade046eb 100644 (file)
@@ -4816,28 +4816,6 @@ ZEND_VM_HANDLER(52, ZEND_BOOL, CONST|TMPVAR|CV, ANY)
        ZEND_VM_NEXT_OPCODE();
 }
 
-ZEND_VM_HANDLER(50, ZEND_BRK, ANY, ANY)
-{
-       USE_OPLINE
-       zend_brk_cont_element *el;
-
-       SAVE_OPLINE();
-       el = zend_brk_cont(opline->op2.num, opline->op1.num,
-                          &EX(func)->op_array, execute_data);
-       ZEND_VM_JMP(EX(func)->op_array.opcodes + el->brk);
-}
-
-ZEND_VM_HANDLER(51, ZEND_CONT, ANY, ANY)
-{
-       USE_OPLINE
-       zend_brk_cont_element *el;
-
-       SAVE_OPLINE();
-       el = zend_brk_cont(opline->op2.num, opline->op1.num,
-                          &EX(func)->op_array, execute_data);
-       ZEND_VM_JMP(EX(func)->op_array.opcodes + el->cont);
-}
-
 ZEND_VM_HANDLER(100, ZEND_GOTO, ANY, CONST)
 {
        USE_OPLINE
index aa3b7f3658030f263bddf93cd022de26b2b1f7ff..c174ff46536d8b7e978752e800740de657742d09 100644 (file)
@@ -1248,28 +1248,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_HANDLER(ZEN
        ZEND_VM_NEXT_OPCODE();
 }
 
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BRK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       USE_OPLINE
-       zend_brk_cont_element *el;
-
-       SAVE_OPLINE();
-       el = zend_brk_cont(opline->op2.num, opline->op1.num,
-                          &EX(func)->op_array, execute_data);
-       ZEND_VM_JMP(EX(func)->op_array.opcodes + el->brk);
-}
-
-static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
-{
-       USE_OPLINE
-       zend_brk_cont_element *el;
-
-       SAVE_OPLINE();
-       el = zend_brk_cont(opline->op2.num, opline->op1.num,
-                          &EX(func)->op_array, execute_data);
-       ZEND_VM_JMP(EX(func)->op_array.opcodes + el->cont);
-}
-
 static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
 {
        USE_OPLINE
@@ -46678,56 +46656,56 @@ void zend_init_opcodes_handlers(void)
        ZEND_NULL_HANDLER,
        ZEND_NULL_HANDLER,
        ZEND_NULL_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_BRK_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
-       ZEND_CONT_SPEC_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
+       ZEND_NULL_HANDLER,
        ZEND_BOOL_SPEC_CONST_HANDLER,
        ZEND_BOOL_SPEC_CONST_HANDLER,
        ZEND_BOOL_SPEC_CONST_HANDLER,
index 95b8b859eb1c8965d572c5bf72dc18967b0dcd08..705ab9cd29c8fc8527b0f7690321beae0e17e662 100644 (file)
@@ -72,8 +72,8 @@ const char *zend_vm_opcodes_map[173] = {
        "ZEND_JMPNZ_EX",
        "ZEND_CASE",
        NULL,
-       "ZEND_BRK",
-       "ZEND_CONT",
+       NULL,
+       NULL,
        "ZEND_BOOL",
        "ZEND_FAST_CONCAT",
        "ZEND_ROPE_INIT",
index 89a0d3139be33ddb0d33ae6ffc42276d43ca55fb..f6de5b1b577ea293d0ff52d688e4d9fc6e018d1f 100644 (file)
@@ -82,8 +82,6 @@ END_EXTERN_C()
 #define ZEND_JMPZ_EX                          46
 #define ZEND_JMPNZ_EX                         47
 #define ZEND_CASE                             48
-#define ZEND_BRK                              50
-#define ZEND_CONT                             51
 #define ZEND_BOOL                             52
 #define ZEND_FAST_CONCAT                      53
 #define ZEND_ROPE_INIT                        54
index 275e3f5fa250b482854c65cef014ffd670926e59..fe20248fee416f237d20400df14d701a1424d90e 100644 (file)
@@ -123,12 +123,9 @@ static int find_code_blocks(zend_op_array *op_array, zend_cfg *cfg, zend_optimiz
        blocks[0].start_opline_no = 0;
        while (opline < end) {
                switch((unsigned)opline->opcode) {
-                       case ZEND_BRK:
-                       case ZEND_CONT:
                        case ZEND_GOTO:
-                               /* would not optimize non-optimized BRK/CONTs - we cannot
-                                really know where it jumps, so these optimizations are
-                               too dangerous */
+                               /* would not optimize GOTOs - we cannot really know where it jumps,
+                                * so these optimizations are too dangerous */
                                return 0;
                        case ZEND_FAST_CALL:
                                START_BLOCK_OP(ZEND_OP1(opline).opline_num);
index c042940b0e9955f2ad76ed388a771166018ca6b6..611b39df2420e21d97c1a822fe04c6745200c96f 100644 (file)
@@ -613,8 +613,6 @@ void zend_optimizer_pass1(zend_op_array *op_array, zend_optimizer_ctx *ctx)
                case ZEND_EXIT:
                case ZEND_THROW:
                case ZEND_CATCH:
-               case ZEND_BRK:
-               case ZEND_CONT:
                case ZEND_GOTO:
                case ZEND_FAST_CALL:
                case ZEND_FAST_RET:
index 3991a41e0f2fbc5d18882afe5fe341247ef99b66..a9d85daa6f1ef38af5a358506e4d166b9ae67161 100644 (file)
@@ -181,53 +181,6 @@ void zend_optimizer_pass2(zend_op_array *op_array)
                                        opline->opcode = ZEND_JMP;
                                }
                                break;
-
-                       case ZEND_BRK:
-                       case ZEND_CONT:
-                               {
-                                   zend_brk_cont_element *jmp_to;
-                                       int array_offset = ZEND_OP1(opline).num;
-                                       int nest_levels = ZEND_OP2(opline).num;
-                                       int dont_optimize = 0;
-
-                                       while (1) {
-                                               if (array_offset == -1) {
-                                                       dont_optimize = 1; /* don't optimize this bogus break/continue, let the executor shout */
-                                                       break;
-                                               }
-                                               jmp_to = &op_array->brk_cont_array[array_offset];
-                                               array_offset = jmp_to->parent;
-                                               if (--nest_levels > 0) {
-                                                       if (op_array->opcodes[jmp_to->brk].opcode == ZEND_FREE ||
-                                                           op_array->opcodes[jmp_to->brk].opcode == ZEND_FE_FREE ||
-                                                           op_array->opcodes[jmp_to->brk].opcode == ZEND_END_SILENCE) {
-                                                               dont_optimize = 1;
-                                                               break;
-                                                       }
-                                               } else {
-                                                       break;
-                                               }
-                                       }
-
-                                       if (dont_optimize) {
-                                               break;
-                                       }
-
-                                       /* optimize - convert to a JMP */
-                                       switch (opline->opcode) {
-                                               case ZEND_BRK:
-                                                       MAKE_NOP(opline);
-                                                       ZEND_OP1(opline).opline_num = jmp_to->brk;
-                                                       break;
-                                               case ZEND_CONT:
-                                                       MAKE_NOP(opline);
-                                                       ZEND_OP1(opline).opline_num = jmp_to->cont;
-                                                       break;
-                                       }
-                                       opline->opcode = ZEND_JMP;
-                                       /* MAKE_NOP() already set op1 and op2 to IS_UNUSED */
-                               }
-                               break;
                }
                opline++;
        }
index 3019b274e953ab5901bd98d0eec29b166c8e59da..cb717998d6e806c8febeb257b4e94c9927b190b9 100644 (file)
@@ -322,8 +322,6 @@ continue_jmp_ex_optimization:
                                                           op->opcode == ZEND_JMPNZ ||
                                                           op->opcode == ZEND_JMPNZ_EX ||
                                                           op->opcode == ZEND_JMPZNZ ||
-                                                          op->opcode == ZEND_BRK ||
-                                                          op->opcode == ZEND_CONT ||
                                                           op->opcode == ZEND_CASE ||
                                                           op->opcode == ZEND_RETURN ||
                                                           op->opcode == ZEND_RETURN_BY_REF ||
@@ -358,8 +356,6 @@ continue_jmp_ex_optimization:
                                                           op->opcode == ZEND_JMPNZ ||
                                                           op->opcode == ZEND_JMPNZ_EX ||
                                                           op->opcode == ZEND_JMPZNZ ||
-                                                          op->opcode == ZEND_BRK ||
-                                                          op->opcode == ZEND_CONT ||
                                                           op->opcode == ZEND_CASE ||
                                                           op->opcode == ZEND_RETURN ||
                                                           op->opcode == ZEND_RETURN_BY_REF ||