From 3f42ce18ba4420aabb9b07b838096cce340d06b7 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 12 Jul 2017 23:03:11 +0300 Subject: [PATCH] Added few more instructions without side effects and exceptions --- ext/opcache/Optimizer/dce.c | 9 +++++++++ ext/opcache/Optimizer/zend_inference.c | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/ext/opcache/Optimizer/dce.c b/ext/opcache/Optimizer/dce.c index 25a41950142..3ccdbfeb43e 100644 --- a/ext/opcache/Optimizer/dce.c +++ b/ext/opcache/Optimizer/dce.c @@ -108,6 +108,15 @@ static inline zend_bool may_have_side_effects( case ZEND_ROPE_END: case ZEND_INIT_ARRAY: case ZEND_ADD_ARRAY_ELEMENT: + case ZEND_SPACESHIP: + case ZEND_STRLEN: + case ZEND_COUNT: + case ZEND_GET_TYPE: + case ZEND_ISSET_ISEMPTY_THIS: + case ZEND_ISSET_ISEMPTY_DIM_OBJ: + case ZEND_FETCH_DIM_IS: + case ZEND_ISSET_ISEMPTY_VAR: + case ZEND_FETCH_IS: /* No side effects */ return 0; case ZEND_JMP: diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 6c63d48f7aa..e3f433af0ae 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -4172,6 +4172,8 @@ int zend_may_throw(const zend_op *opline, zend_op_array *op_array, zend_ssa *ssa return (opline->op2_type != IS_UNUSED) && (t2 & (MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE)); case ZEND_STRLEN: return (t1 & MAY_BE_ANY) != MAY_BE_STRING; + case ZEND_COUNT: + return (t1 & MAY_BE_ANY) != MAY_BE_ARRAY; case ZEND_RECV_INIT: if (Z_CONSTANT_P(CRT_CONSTANT_EX(op_array, opline->op2, ssa->rt_constants))) { return 1; @@ -4191,6 +4193,8 @@ int zend_may_throw(const zend_op *opline, zend_op_array *op_array, zend_ssa *ssa } else { return 0; } + case ZEND_FETCH_IS: + return (t2 & (MAY_BE_ARRAY|MAY_BE_OBJECT)); case ZEND_ISSET_ISEMPTY_DIM_OBJ: case ZEND_FETCH_DIM_IS: return (t1 & MAY_BE_OBJECT) || (t2 & (MAY_BE_ARRAY|MAY_BE_OBJECT));