diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-12-10 09:00:09 +0100 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-12-10 09:00:09 +0100 |
commit | 87691e74e54ab4303d6f6ea826b7bc1555112e4d (patch) | |
tree | b183dec319eb9038bf368bf8f5c2e87f2bf36b67 | |
parent | 17a9f1401aeb35fe1e3657b38102a410d151d42f (diff) | |
download | php-git-87691e74e54ab4303d6f6ea826b7bc1555112e4d.tar.gz |
Fix DCE with FE_FETCH
For now, don't treat FE_FETCH op2 as no-val use. See GH-4982.
-rw-r--r-- | ext/opcache/Optimizer/zend_ssa.h | 5 | ||||
-rw-r--r-- | ext/opcache/tests/fe_fetch_dce.phpt | 22 |
2 files changed, 25 insertions, 2 deletions
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-- +<?php + +function test() { + $a = ["3"]; + $x = 1; + foreach ($a as $x) { + $x = 2.0; + } + var_dump($x); +} +test(); + +?> +--EXPECT-- +float(2) |