com php-src: Optimize code generated for "while" and "for" loops. Eliminate one JMP opcode for each loop iteration.: Zend/zend_compile. c

From: Date: Mon, 19 Jan 2015 10:27:44 +0000
Subject: com php-src: Optimize code generated for "while" and "for" loops. Eliminate one JMP opcode for each loop iteration.: Zend/zend_compile. c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-84173@lists.php.net to get a copy of this message
Commit: 2efa53649e50ea180e3214a608e8777e80777e9f Author: Dmitry Stogov <dmitry@zend.com> Mon, 19 Jan 2015 13:27:44 +0300 Parents: b33629f21253b106157e8a3f24b376a4aadd92f0 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=2efa53649e50ea180e3214a608e8777e80777e9f Log: Optimize code generated for "while" and "for" loops. Eliminate one JMP opcode for each loop iteration. Changed paths: M Zend/zend_compile.c Diff: diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 1a7f4d0..7b2ac28 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3251,23 +3251,23 @@ void zend_compile_while(zend_ast *ast) /* {{{ */ { zend_ast *cond_ast = ast->child[0]; zend_ast *stmt_ast = ast->child[1]; - znode cond_node; - uint32_t opnum_start, opnum_jmpz; + uint32_t opnum_start, opnum_jmp, opnum_cond; - opnum_start = get_next_op_number(CG(active_op_array)); - zend_compile_expr(&cond_node, cond_ast); + opnum_jmp = zend_emit_jump(0); - opnum_jmpz = zend_emit_cond_jump(ZEND_JMPZ, &cond_node, 0); zend_begin_loop(); + opnum_start = get_next_op_number(CG(active_op_array)); zend_compile_stmt(stmt_ast); - zend_emit_jump(opnum_start); + opnum_cond = get_next_op_number(CG(active_op_array)); + zend_update_jump_target(opnum_jmp, opnum_cond); + zend_compile_expr(&cond_node, cond_ast); - zend_update_jump_target_to_next(opnum_jmpz); + zend_emit_cond_jump(ZEND_JMPNZ, &cond_node, opnum_start); - zend_end_loop(opnum_start, 0); + zend_end_loop(opnum_cond, 0); } /* }}} */ @@ -3323,27 +3323,27 @@ void zend_compile_for(zend_ast *ast) /* {{{ */ zend_ast *stmt_ast = ast->child[3]; znode result; - uint32_t opnum_cond, opnum_jmpz, opnum_loop; + uint32_t opnum_start, opnum_cond, opnum_jmp, opnum_loop; zend_compile_expr_list(&result, init_ast); zend_do_free(&result); - opnum_cond = get_next_op_number(CG(active_op_array)); - zend_compile_expr_list(&result, cond_ast); - zend_do_extended_info(); + opnum_jmp = zend_emit_jump(0); - opnum_jmpz = zend_emit_cond_jump(ZEND_JMPZ, &result, 0); zend_begin_loop(); + opnum_start = get_next_op_number(CG(active_op_array)); zend_compile_stmt(stmt_ast); opnum_loop = get_next_op_number(CG(active_op_array)); zend_compile_expr_list(&result, loop_ast); zend_do_free(&result); - zend_emit_jump(opnum_cond); + zend_update_jump_target_to_next(opnum_jmp); + zend_compile_expr_list(&result, cond_ast); + zend_do_extended_info(); - zend_update_jump_target_to_next(opnum_jmpz); + zend_emit_cond_jump(ZEND_JMPNZ, &result, opnum_start); zend_end_loop(opnum_loop, 0); }

« previous php.cvs (#84173) next »