com php-src: Cleanup (updated comments about optimization of comparison with IS_NULL): ext/opcache/Optimizer/block_pass.c
| From: | Dmitry Stogov | Date: | Wed, 01 Jul 2015 13:31:20 +0000 |
| Subject: | com php-src: Cleanup (updated comments about optimization of comparison with IS_NULL): ext/opcache/Optimizer/block_pass.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-87662@lists.php.net to get a copy of this message | ||
Commit: a0b55e6a3703268871dd53bd295d6bbc1fd890b0
Author: Dmitry Stogov <dmitry@zend.com> Wed, 1 Jul 2015 16:31:20 +0300
Parents: e2baf737aede3cea8a37cf29cbf1935308259566
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=a0b55e6a3703268871dd53bd295d6bbc1fd890b0
Log:
Cleanup (updated comments about optimization of comparison with IS_NULL)
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 f4753ed..a810829 100644
--- a/ext/opcache/Optimizer/block_pass.c
+++ b/ext/opcache/Optimizer/block_pass.c
@@ -764,26 +764,30 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array
*op_array,
opline->opcode == ZEND_IS_NOT_EQUAL ||
opline->opcode == ZEND_CASE) {
if (ZEND_OP1_TYPE(opline) == IS_CONST &&
-// TODO: Optimization of comparison with null may be not safe ???
-#if 1
(Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_FALSE ||
Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_TRUE)) {
-#else
- Z_TYPE(ZEND_OP1_LITERAL(opline)) <= IS_TRUE) {
-#endif
+ /* T = IS_EQUAL(TRUE, X) => T = BOOL(X) */
+ /* T = IS_EQUAL(FALSE, X) => T = BOOL_NOT(X) */
+ /* T = IS_NOT_EQUAL(TRUE, X) => T = BOOL_NOT(X) */
+ /* T = IS_NOT_EQUAL(FALSE, X) => T = BOOL(X) */
+ /* Optimization of comparison with "null" is not safe,
+ * because ("0" == null) is not equal to !("0")
+ */
opline->opcode =
((opline->opcode != ZEND_IS_NOT_EQUAL) == ((Z_TYPE(ZEND_OP1_LITERAL(opline))) == IS_TRUE))
?
ZEND_BOOL : ZEND_BOOL_NOT;
COPY_NODE(opline->op1, opline->op2);
SET_UNUSED(opline->op2);
} else if (ZEND_OP2_TYPE(opline) == IS_CONST &&
-// TODO: Optimization of comparison with null may be not safe ???
-#if 1
(Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_FALSE ||
Z_TYPE(ZEND_OP2_LITERAL(opline)) == IS_TRUE)) {
-#else
- Z_TYPE(ZEND_OP2_LITERAL(opline)) <= IS_TRUE) {
-#endif
+ /* T = IS_EQUAL(X, TRUE) => T = BOOL(X) */
+ /* T = IS_EQUAL(X, FALSE) => T = BOOL_NOT(X) */
+ /* T = IS_NOT_EQUAL(X, TRUE) => T = BOOL_NOT(X) */
+ /* T = IS_NOT_EQUAL(X, FALSE) => T = BOOL(X) */
+ /* Optimization of comparison with "null" is not safe,
+ * because ("0" == null) is not equal to !("0")
+ */
opline->opcode =
((opline->opcode != ZEND_IS_NOT_EQUAL) == ((Z_TYPE(ZEND_OP2_LITERAL(opline))) == IS_TRUE))
?
ZEND_BOOL : ZEND_BOOL_NOT;