From fe08b933e4ab380d4b07275384226b688f82eeac Mon Sep 17 00:00:00 2001 From: Bob Weinand Date: Sun, 13 Sep 2015 12:35:35 +0200 Subject: [PATCH] Add support for **= in opcache optimizer --- ext/opcache/Optimizer/block_pass.c | 1 + ext/opcache/Optimizer/compact_literals.c | 1 + ext/opcache/Optimizer/pass2.c | 2 ++ ext/opcache/Optimizer/zend_optimizer.c | 2 ++ 4 files changed, 6 insertions(+) diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c index c723440753..b7e1682866 100644 --- a/ext/opcache/Optimizer/block_pass.c +++ b/ext/opcache/Optimizer/block_pass.c @@ -1866,6 +1866,7 @@ static void zend_t_usage(zend_code_block *block, zend_op_array *op_array, zend_b case ZEND_ASSIGN_SUB: case ZEND_ASSIGN_MUL: case ZEND_ASSIGN_DIV: + case ZEND_ASSIGN_POW: case ZEND_ASSIGN_MOD: case ZEND_ASSIGN_SL: case ZEND_ASSIGN_SR: diff --git a/ext/opcache/Optimizer/compact_literals.c b/ext/opcache/Optimizer/compact_literals.c index 1b7e1d9714..7650ae1cc5 100644 --- a/ext/opcache/Optimizer/compact_literals.c +++ b/ext/opcache/Optimizer/compact_literals.c @@ -263,6 +263,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx case ZEND_ASSIGN_SUB: case ZEND_ASSIGN_MUL: case ZEND_ASSIGN_DIV: + case ZEND_ASSIGN_POW: case ZEND_ASSIGN_MOD: case ZEND_ASSIGN_SL: case ZEND_ASSIGN_SR: diff --git a/ext/opcache/Optimizer/pass2.c b/ext/opcache/Optimizer/pass2.c index a9d85daa6f..143167f816 100644 --- a/ext/opcache/Optimizer/pass2.c +++ b/ext/opcache/Optimizer/pass2.c @@ -45,6 +45,7 @@ void zend_optimizer_pass2(zend_op_array *op_array) case ZEND_SUB: case ZEND_MUL: case ZEND_DIV: + case ZEND_POW: if (ZEND_OP1_TYPE(opline) == IS_CONST) { if (Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_STRING) { convert_scalar_to_number(&ZEND_OP1_LITERAL(opline)); @@ -55,6 +56,7 @@ void zend_optimizer_pass2(zend_op_array *op_array) case ZEND_ASSIGN_SUB: case ZEND_ASSIGN_MUL: case ZEND_ASSIGN_DIV: + case ZEND_ASSIGN_POW: if (opline->extended_value != 0) { /* object tristate op - don't attempt to optimize it! */ break; diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index fe258adbba..22bb806a4c 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -234,6 +234,7 @@ void zend_optimizer_update_op2_const(zend_op_array *op_array, case ZEND_ASSIGN_SUB: case ZEND_ASSIGN_MUL: case ZEND_ASSIGN_DIV: + case ZEND_ASSIGN_POW: case ZEND_ASSIGN_MOD: case ZEND_ASSIGN_SL: case ZEND_ASSIGN_SR: @@ -253,6 +254,7 @@ void zend_optimizer_update_op2_const(zend_op_array *op_array, (opline-1)->opcode == ZEND_ASSIGN_SUB || (opline-1)->opcode == ZEND_ASSIGN_MUL || (opline-1)->opcode == ZEND_ASSIGN_DIV || + (opline-1)->opcode == ZEND_ASSIGN_POW || (opline-1)->opcode == ZEND_ASSIGN_MOD || (opline-1)->opcode == ZEND_ASSIGN_SL || (opline-1)->opcode == ZEND_ASSIGN_SR || -- 2.40.0