1
0
mirror of https://github.com/php/php-src.git synced 2026-03-26 01:02:25 +01:00

Remove ZEND_BRK/ZEND_CONT from VM

These are no longer used at run-time now, only temporarily during
compilation.
This commit is contained in:
Nikita Popov
2015-05-22 22:31:02 +02:00
parent 7a88d16cf3
commit 8542befa7b
9 changed files with 59 additions and 156 deletions

View 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"

View 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

View 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,

View 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",

View 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

View 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);

View 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:

View 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++;
}

View 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 ||