com php-src: Optimize CASE(TRUE, X) into BOOL(X) (this pattern affects wordpress): ext/opcache/Optimizer/block_pass.c
| From: | Dmitry Stogov | Date: | Thu, 17 Apr 2014 17:15:02 +0000 |
| Subject: | com php-src: Optimize CASE(TRUE, X) into BOOL(X) (this pattern affects wordpress): ext/opcache/Optimizer/block_pass.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-77352@lists.php.net to get a copy of this message | ||
Commit: 3434d3fc98881ee5cd45b2b57afc789fd69b810b
Author: Dmitry Stogov <dmitry@zend.com> Thu, 17 Apr 2014 21:15:02 +0400
Parents: e7b3b1132a56a227d9d323e6a2d912a9e3f6109e
Branches: phpng
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=3434d3fc98881ee5cd45b2b57afc789fd69b810b
Log:
Optimize CASE(TRUE, X) into BOOL(X) (this pattern affects wordpress)
Changed paths:
M ext/opcache/Optimizer/block_pass.c
Diff:
diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c
index 708bdd4..2260af8 100644
--- a/ext/opcache/Optimizer/block_pass.c
+++ b/ext/opcache/Optimizer/block_pass.c
@@ -785,20 +785,23 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array
*op_array,
* IS_EQ(FALSE, X) => BOOL_NOT(X)
* IS_NOT_EQ(TRUE, X) => BOOL_NOT(X)
* IS_NOT_EQ(FALSE, X) => BOOL(X)
+ * CASE(TRUE, X) => BOOL(X)
+ * CASE(FALSE, X) => BOOL_NOT(X)
*/
if (opline->opcode == ZEND_IS_EQUAL ||
- opline->opcode == ZEND_IS_NOT_EQUAL) {
+ opline->opcode == ZEND_IS_NOT_EQUAL ||
+ opline->opcode == ZEND_CASE) {
if (ZEND_OP1_TYPE(opline) == IS_CONST &&
Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_BOOL) {
opline->opcode =
- ((opline->opcode == ZEND_IS_EQUAL) == Z_LVAL(ZEND_OP1_LITERAL(opline)))?
+ ((opline->opcode != ZEND_IS_NOT_EQUAL) == Z_LVAL(ZEND_OP1_LITERAL(opline)))?
ZEND_BOOL : ZEND_BOOL_NOT;
COPY_NODE(opline->op1, opline->op2);
SET_UNUSED(opline->op2);
} else if (ZEND_OP2_TYPE(opline) == IS_CONST &&
Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_BOOL) {
opline->opcode =
- ((opline->opcode == ZEND_IS_EQUAL) == Z_LVAL(ZEND_OP2_LITERAL(opline)))?
+ ((opline->opcode != ZEND_IS_NOT_EQUAL) == Z_LVAL(ZEND_OP2_LITERAL(opline)))?
ZEND_BOOL : ZEND_BOOL_NOT;
SET_UNUSED(opline->op2);
}