diff options
| author | Nikita Popov <nikita.ppv@gmail.com> | 2019-01-17 16:07:17 +0100 |
|---|---|---|
| committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-01-21 11:47:27 +0100 |
| commit | 3269e884686ada59407e14db812bfb42d59d2f1c (patch) | |
| tree | 340b3f09b122a3e1c676f02f0f729bae40c450fd /ext/opcache/Optimizer/zend_dump.c | |
| parent | 276d3a7d159964d225c8e7ff75debdd9c359eee2 (diff) | |
| download | php-git-3269e884686ada59407e14db812bfb42d59d2f1c.tar.gz | |
Implement single-pass live range calculation
Instead of interleaving creation of live-ranges with the main
compiler code, compute them in a separate pass over the opcodes
as part of pass_two. Additionally, do not keep live ranges
synchronized during optimization in opcache and instead use the
same mechanism to recompute them after optimization.
Diffstat (limited to 'ext/opcache/Optimizer/zend_dump.c')
| -rw-r--r-- | ext/opcache/Optimizer/zend_dump.c | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/ext/opcache/Optimizer/zend_dump.c b/ext/opcache/Optimizer/zend_dump.c index d5f6c4564b..ad4d393bd6 100644 --- a/ext/opcache/Optimizer/zend_dump.c +++ b/ext/opcache/Optimizer/zend_dump.c @@ -759,15 +759,12 @@ static void zend_dump_block_info(const zend_cfg *cfg, int n, uint32_t dump_flags if (b->flags & ZEND_BB_FINALLY_END) { fprintf(stderr, " finally_end"); } - if (b->flags & ZEND_BB_GEN_VAR) { - fprintf(stderr, " gen_var"); - } - if (b->flags & ZEND_BB_KILL_VAR) { - fprintf(stderr, " kill_var"); - } if (!(dump_flags & ZEND_DUMP_HIDE_UNREACHABLE) && !(b->flags & ZEND_BB_REACHABLE)) { fprintf(stderr, " unreachable"); } + if (b->flags & ZEND_BB_UNREACHABLE_FREE) { + fprintf(stderr, " unreachable_free"); + } if (b->flags & ZEND_BB_LOOP_HEADER) { fprintf(stderr, " loop_header"); } @@ -1007,20 +1004,13 @@ void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, cons } } } - if (op_array->last_live_range) { + if (op_array->last_live_range && (dump_flags & ZEND_DUMP_LIVE_RANGES)) { fprintf(stderr, "LIVE RANGES:\n"); for (i = 0; i < op_array->last_live_range; i++) { - if ((cfg->flags & ZEND_CFG_SPLIT_AT_LIVE_RANGES)) { - fprintf(stderr, " %u: BB%u - BB%u ", - EX_VAR_TO_NUM(op_array->live_range[i].var & ~ZEND_LIVE_MASK), - cfg->map[op_array->live_range[i].start], - cfg->map[op_array->live_range[i].end]); - } else { - fprintf(stderr, " %u: L%u - L%u ", - EX_VAR_TO_NUM(op_array->live_range[i].var & ~ZEND_LIVE_MASK), - op_array->live_range[i].start, - op_array->live_range[i].end); - } + fprintf(stderr, " %u: L%u - L%u ", + EX_VAR_TO_NUM(op_array->live_range[i].var & ~ZEND_LIVE_MASK), + op_array->live_range[i].start, + op_array->live_range[i].end); switch (op_array->live_range[i].var & ZEND_LIVE_MASK) { case ZEND_LIVE_TMPVAR: fprintf(stderr, "(tmp/var)\n"); @@ -1070,7 +1060,7 @@ void zend_dump_op_array(const zend_op_array *op_array, uint32_t dump_flags, cons zend_dump_op(op_array, NULL, opline, dump_flags, data); opline++; } - if (op_array->last_live_range) { + if (op_array->last_live_range && (dump_flags & ZEND_DUMP_LIVE_RANGES)) { fprintf(stderr, "LIVE RANGES:\n"); for (i = 0; i < op_array->last_live_range; i++) { fprintf(stderr, " %u: L%u - L%u ", |
