From 0f815642e093f2d49e6bc55e5a5a6bf37f4326c6 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sat, 6 Dec 2014 12:57:20 +0100 Subject: [PATCH] Drop ZEND_PRINT opcode in favor of ZEND_ECHO The return value long(1) is an IS_CONST operand now. --- Zend/zend_compile.c | 5 +- Zend/zend_vm_def.h | 8 ---- Zend/zend_vm_execute.h | 74 ++++++++++-------------------- Zend/zend_vm_opcodes.c | 2 +- Zend/zend_vm_opcodes.h | 1 - ext/opcache/Optimizer/block_pass.c | 34 +------------- 6 files changed, 31 insertions(+), 93 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index c196e39887..c159fcc6e1 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -5361,7 +5361,10 @@ void zend_compile_print(znode *result, zend_ast *ast) /* {{{ */ znode expr_node; zend_compile_expr(&expr_node, expr_ast); - zend_emit_op_tmp(result, ZEND_PRINT, &expr_node, NULL); + zend_emit_op(NULL, ZEND_ECHO, &expr_node, NULL); + + result->op_type = IS_CONST; + ZVAL_LONG(&result->u.constant, 1); } /* }}} */ diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index d9f6f3ef69..c1115fd7d6 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -1085,14 +1085,6 @@ ZEND_VM_HANDLER(40, ZEND_ECHO, CONST|TMPVAR|CV, ANY) ZEND_VM_NEXT_OPCODE(); } -ZEND_VM_HANDLER(41, ZEND_PRINT, CONST|TMPVAR|CV, ANY) -{ - USE_OPLINE - - ZVAL_LONG(EX_VAR(opline->result.var), 1); - ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ECHO); -} - ZEND_VM_HELPER_EX(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED|CONST|VAR, int type) { USE_OPLINE diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 1c2700e3b5..100d2d48ec 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -2319,14 +2319,6 @@ static int ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) ZEND_VM_NEXT_OPCODE(); } -static int ZEND_FASTCALL ZEND_PRINT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - - ZVAL_LONG(EX_VAR(opline->result.var), 1); - return ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - static int ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -23013,14 +23005,6 @@ static int ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) ZEND_VM_NEXT_OPCODE(); } -static int ZEND_FASTCALL ZEND_PRINT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - - ZVAL_LONG(EX_VAR(opline->result.var), 1); - return ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - static int ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -32379,14 +32363,6 @@ static int ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS ZEND_VM_NEXT_OPCODE(); } -static int ZEND_FASTCALL ZEND_PRINT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) -{ - USE_OPLINE - - ZVAL_LONG(EX_VAR(opline->result.var), 1); - return ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); -} - static int ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE @@ -36825,31 +36801,31 @@ void zend_init_opcodes_handlers(void) ZEND_ECHO_SPEC_CV_HANDLER, ZEND_ECHO_SPEC_CV_HANDLER, ZEND_ECHO_SPEC_CV_HANDLER, - ZEND_PRINT_SPEC_CONST_HANDLER, - ZEND_PRINT_SPEC_CONST_HANDLER, - ZEND_PRINT_SPEC_CONST_HANDLER, - ZEND_PRINT_SPEC_CONST_HANDLER, - ZEND_PRINT_SPEC_CONST_HANDLER, - ZEND_PRINT_SPEC_TMPVAR_HANDLER, - ZEND_PRINT_SPEC_TMPVAR_HANDLER, - ZEND_PRINT_SPEC_TMPVAR_HANDLER, - ZEND_PRINT_SPEC_TMPVAR_HANDLER, - ZEND_PRINT_SPEC_TMPVAR_HANDLER, - ZEND_PRINT_SPEC_TMPVAR_HANDLER, - ZEND_PRINT_SPEC_TMPVAR_HANDLER, - ZEND_PRINT_SPEC_TMPVAR_HANDLER, - ZEND_PRINT_SPEC_TMPVAR_HANDLER, - ZEND_PRINT_SPEC_TMPVAR_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_NULL_HANDLER, - ZEND_PRINT_SPEC_CV_HANDLER, - ZEND_PRINT_SPEC_CV_HANDLER, - ZEND_PRINT_SPEC_CV_HANDLER, - ZEND_PRINT_SPEC_CV_HANDLER, - ZEND_PRINT_SPEC_CV_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_JMP_SPEC_HANDLER, ZEND_JMP_SPEC_HANDLER, ZEND_JMP_SPEC_HANDLER, diff --git a/Zend/zend_vm_opcodes.c b/Zend/zend_vm_opcodes.c index 067fd362e6..aaaf8df6b3 100644 --- a/Zend/zend_vm_opcodes.c +++ b/Zend/zend_vm_opcodes.c @@ -63,7 +63,7 @@ const char *zend_vm_opcodes_map[170] = { "ZEND_ASSIGN", "ZEND_ASSIGN_REF", "ZEND_ECHO", - "ZEND_PRINT", + NULL, "ZEND_JMP", "ZEND_JMPZ", "ZEND_JMPNZ", diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h index 9d969877e0..e31a26a3be 100644 --- a/Zend/zend_vm_opcodes.h +++ b/Zend/zend_vm_opcodes.h @@ -68,7 +68,6 @@ END_EXTERN_C() #define ZEND_ASSIGN 38 #define ZEND_ASSIGN_REF 39 #define ZEND_ECHO 40 -#define ZEND_PRINT 41 #define ZEND_JMP 42 #define ZEND_JMPZ 43 #define ZEND_JMPNZ 44 diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c index 49ca397316..9cb95a3e47 100644 --- a/ext/opcache/Optimizer/block_pass.c +++ b/ext/opcache/Optimizer/block_pass.c @@ -645,24 +645,8 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array, MAKE_NOP(src); } - /* T = PRINT(X), F(T) => ECHO(X), F(1) */ - if (ZEND_OP1_TYPE(opline) == IS_TMP_VAR && - VAR_SOURCE(opline->op1) && - VAR_SOURCE(opline->op1)->opcode == ZEND_PRINT && - opline->opcode != ZEND_CASE && opline->opcode != ZEND_FREE) { - ZEND_OP1_TYPE(opline) = IS_CONST; - LITERAL_LONG(opline->op1, 1); - } - - if (ZEND_OP2_TYPE(opline) == IS_TMP_VAR && - VAR_SOURCE(opline->op2) && - VAR_SOURCE(opline->op2)->opcode == ZEND_PRINT) { - ZEND_OP2_TYPE(opline) = IS_CONST; - LITERAL_LONG(opline->op2, 1); - } - /* T = CAST(X, String), ECHO(T) => NOP, ECHO(X) */ - if ((opline->opcode == ZEND_ECHO || opline->opcode == ZEND_PRINT) && + if (opline->opcode == ZEND_ECHO && ZEND_OP1_TYPE(opline) & (IS_TMP_VAR|IS_VAR) && VAR_SOURCE(opline->op1) && VAR_SOURCE(opline->op1)->opcode == ZEND_CAST && @@ -672,18 +656,6 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array, MAKE_NOP(src); } - /* T = PRINT(X), FREE(T) => ECHO(X) */ - if (opline->opcode == ZEND_FREE && - ZEND_OP1_TYPE(opline) == IS_TMP_VAR && - VAR_SOURCE(opline->op1)) { - zend_op *src = VAR_SOURCE(opline->op1); - if (src->opcode == ZEND_PRINT) { - src->opcode = ZEND_ECHO; - ZEND_RESULT_TYPE(src) = IS_UNUSED; - MAKE_NOP(opline); - } - } - /* T = BOOL(X), FREE(T) => NOP */ if (opline->opcode == ZEND_FREE && ZEND_OP1_TYPE(opline) == IS_TMP_VAR && @@ -1859,10 +1831,6 @@ static void zend_t_usage(zend_code_block *block, zend_op_array *op_array, char * } MAKE_NOP(opline); break; - case ZEND_PRINT: - opline->opcode = ZEND_ECHO; - ZEND_RESULT_TYPE(opline) = IS_UNUSED; - break; case ZEND_JMPZ_EX: case ZEND_JMPNZ_EX: opline->opcode -= 3; -- 2.40.0