From 87691e74e54ab4303d6f6ea826b7bc1555112e4d Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 10 Dec 2019 09:00:09 +0100 Subject: Fix DCE with FE_FETCH For now, don't treat FE_FETCH op2 as no-val use. See GH-4982. --- ext/opcache/Optimizer/zend_ssa.h | 5 +++-- ext/opcache/tests/fe_fetch_dce.phpt | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 ext/opcache/tests/fe_fetch_dce.phpt diff --git a/ext/opcache/Optimizer/zend_ssa.h b/ext/opcache/Optimizer/zend_ssa.h index 4ee442dcab..4707e3807a 100644 --- a/ext/opcache/Optimizer/zend_ssa.h +++ b/ext/opcache/Optimizer/zend_ssa.h @@ -217,9 +217,10 @@ static zend_always_inline zend_bool zend_ssa_is_no_val_use(const zend_op *opline if (opline->opcode == ZEND_ASSIGN || opline->opcode == ZEND_UNSET_CV) { return ssa_op->op1_use == var && ssa_op->op2_use != var; } - if (opline->opcode == ZEND_FE_FETCH_R) { + // TODO: Reenable this after changing the SSA structure. + /*if (opline->opcode == ZEND_FE_FETCH_R) { return ssa_op->op2_use == var && ssa_op->op1_use != var; - } + }*/ if (ssa_op->result_use == var && opline->opcode != ZEND_ADD_ARRAY_ELEMENT) { return ssa_op->op1_use != var && ssa_op->op2_use != var; } diff --git a/ext/opcache/tests/fe_fetch_dce.phpt b/ext/opcache/tests/fe_fetch_dce.phpt new file mode 100644 index 0000000000..f7ff0203d7 --- /dev/null +++ b/ext/opcache/tests/fe_fetch_dce.phpt @@ -0,0 +1,22 @@ +--TEST-- +Incorrect DCE with FE_FETCH +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +--FILE-- + +--EXPECT-- +float(2) -- cgit v1.2.1