Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | Improved JIT for TYPE_CHECK opcode | Dmitry Stogov | 2021-03-25 | 1 | -0/+14 |
| | |||||
* | Move x86 dependent code out from platform independed parts. | Dmitry Stogov | 2021-03-23 | 1 | -8/+8 |
| | |||||
* | Support prototypes in call graph | Nikita Popov | 2021-03-19 | 1 | -1/+2 |
| | | | | | | | | | | Even if we don't know the exact method being called, include it in the call graph with the is_prototype flag. In particular, we can still make use of return types from prototype methods, as PHP 8 makes LSP violations a hard error. Most other places are adjusted to skip calls with !is_prototype. Maybe some of them would be fine, but ignoring them is conservative. | ||||
* | Merge branch 'PHP-8.0' | Dmitry Stogov | 2021-02-17 | 1 | -9/+24 |
|\ | | | | | | | | | * PHP-8.0: Fixed bug #80745 (JIT produces Assert failure and UNKNOWN:0 var_dumps in code involving bitshifts) | ||||
| * | Fixed bug #80745 (JIT produces Assert failure and UNKNOWN:0 var_dumps in ↵ | Dmitry Stogov | 2021-02-17 | 1 | -9/+24 |
| | | | | | | | | code involving bitshifts) | ||||
* | | Optimize ZEND_COUNT opcodes on arrays in the jit | Tyson Andre | 2021-02-09 | 1 | -0/+23 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Avoid the overhead of a call and checking types when the argument is definitely an array. Avoid the overhead of gc when `__destruct` won't get called. This seemed cheap enough to check for in the jit. Because of https://wiki.php.net/rfc/restrict_globals_usage we can be sure in the ZEND_COUNT handler that the array count does not have to be recomputed in php 8.1. The below example took 0.854 seconds before the optimization, and 0.564 seconds after the optimization, giving the same result ```php <?php /** @jit */ function bench_count(int $n): int { $total = 0; $arr = []; for ($i = 0; $i < $n; $i++) { $arr[] = $i; $total += count($arr); } return $total; } function main() { $n = 1000; $iterations = 50000; $start = microtime(true); $result = 0; for ($i = 0; $i < $iterations; $i++) { $result += bench_count($n); } $elapsed = microtime(true) - $start; printf("Total for n=%d, iterations=%d = %d, elapsed=%.3f\n", $n, $iterations, $result, $elapsed); } main(); ``` Before ```asm mov $0x7feb8cf8a858, %r15 mov $ZEND_COUNT_SPEC_CV_UNUSED_HANDLER, %rax call *%rax ``` After ```asm mov 0x70(%r14), %rdi - Copy the count from the `zend_array*` pointer mov %rdi, (%rax) - Store the count in the destination's value mov $0x4, 0x8(%rax) - Store IS_LONG(4) in the destination's type ``` And add tracing jit support Closes GH-5584 | ||||
* | | Replace zend_bool uses with bool | Nikita Popov | 2021-01-15 | 1 | -26/+26 |
|/ | | | | | | | We're starting to see a mix between uses of zend_bool and bool. Replace all usages with the standard bool type everywhere. Of course, zend_bool is retained as an alias. | ||||
* | Fixed bug #80422 (php_opcache.dll crashes when using Apache 2.4 with JIT) | Dmitry Stogov | 2021-01-14 | 1 | -0/+5 |
| | |||||
* | Add guard if lvalue of assignment may be a reference, but wasn't a reference ↵ | Dmitry Stogov | 2021-01-11 | 1 | -0/+5 |
| | | | | during recording | ||||
* | Eliminate redundand comparison insructions | Dmitry Stogov | 2020-12-24 | 1 | -6/+100 |
| | |||||
* | Eliminate some repeatable IS_REFERENCE checks | Dmitry Stogov | 2020-12-10 | 1 | -15/+47 |
| | |||||
* | Perform early guard type check for result of FETCH_CONSTANT | Dmitry Stogov | 2020-12-09 | 1 | -1/+1 |
| | |||||
* | Bug #80447 (Strange out of memory error when running with JIT) | Dmitry Stogov | 2020-12-01 | 1 | -1/+1 |
| | |||||
* | Fixed "may be used uninitialized" compilation warnings | Dmitry Stogov | 2020-11-30 | 1 | -0/+3 |
| | |||||
* | Eliminate deafd stores | Dmitry Stogov | 2020-11-26 | 1 | -4/+28 |
| | |||||
* | Fixed use-after-free in PHPUnit tests | Dmitry Stogov | 2020-11-23 | 1 | -0/+3 |
| | |||||
* | Fixed incorrect TRACE_FRAME_MASK_NESTED flag setting | Dmitry Stogov | 2020-11-20 | 1 | -1/+7 |
| | |||||
* | Added missing deoptimization code for trampoline handling | Dmitry Stogov | 2020-11-19 | 1 | -0/+6 |
| | |||||
* | Fixed trampoline handling | Dmitry Stogov | 2020-11-17 | 1 | -7/+18 |
| | |||||
* | Fixed alias handling | Dmitry Stogov | 2020-11-16 | 1 | -11/+24 |
| | |||||
* | Fixed incorrect FETCH_THIS optimization | Dmitry Stogov | 2020-11-16 | 1 | -1/+1 |
| | |||||
* | Trampoline cleanup | Dmitry Stogov | 2020-11-16 | 1 | -3/+13 |
| | |||||
* | Fixed incorrectly eliminated type store | Dmitry Stogov | 2020-11-11 | 1 | -18/+18 |
| | |||||
* | Remove assertion | Dmitry Stogov | 2020-11-11 | 1 | -1/+2 |
| | |||||
* | Fixed incorrect invariant guard motion | Dmitry Stogov | 2020-11-11 | 1 | -1/+2 |
| | |||||
* | Fixed reference-counting propagation | Dmitry Stogov | 2020-11-11 | 1 | -0/+3 |
| | |||||
* | Fixed missaligned access | Dmitry Stogov | 2020-11-09 | 1 | -2/+2 |
| | |||||
* | Move stack overflow checks out of the loops | Dmitry Stogov | 2020-11-06 | 1 | -4/+62 |
| | |||||
* | Fixed incorrect invariant guard motion | Dmitry Stogov | 2020-11-05 | 1 | -1/+3 |
| | |||||
* | Create TSSA loops for recursive call/return traces and move invariant type ↵ | Dmitry Stogov | 2020-10-30 | 1 | -30/+117 |
| | | | | guards out of loops. | ||||
* | Fixed memory leak in Zend/tests/bug78999.phpt | Dmitry Stogov | 2020-10-28 | 1 | -4/+4 |
| | |||||
* | Fixed tracing JIT support for aliasses (Zend/tests/bug75420.13.phpt and ↵ | Dmitry Stogov | 2020-10-27 | 1 | -7/+19 |
| | | | | ext/standard/tests/streams/bug60106.phpt) | ||||
* | Fixed support for named parameters (Zend/tests/named_params/references.phpt) | Dmitry Stogov | 2020-10-27 | 1 | -22/+40 |
| | |||||
* | Fixed tracing JIT for tests/classes/unset_properties.phpt | Dmitry Stogov | 2020-10-27 | 1 | -13/+7 |
| | |||||
* | Fixed memory leak | Dmitry Stogov | 2020-10-27 | 1 | -2/+2 |
| | |||||
* | Better JIT support for aliases | Dmitry Stogov | 2020-10-26 | 1 | -73/+133 |
| | |||||
* | Fixed some typos | Javier Eguiluz | 2020-10-23 | 1 | -2/+2 |
| | | | | | | Closes GH-6373. [ci skip] | ||||
* | Checj type guards before loading values into CPU registers | Dmitry Stogov | 2020-10-22 | 1 | -0/+12 |
| | |||||
* | Avoid register allocation for ASSIGN into aliased variable (it might be ↵ | Dmitry Stogov | 2020-10-22 | 1 | -0/+9 |
| | | | | indirectly changed into IS_REFERENCE) | ||||
* | More accurate live range construction | Dmitry Stogov | 2020-10-21 | 1 | -1/+3 |
| | |||||
* | Improve register allocator (give preference to loop variables). | Dmitry Stogov | 2020-10-20 | 1 | -0/+14 |
| | |||||
* | Avoid refcounting when return CV (similar to optimization in VM). | Dmitry Stogov | 2020-10-15 | 1 | -6/+9 |
| | |||||
* | Avoid useless register allocation | Dmitry Stogov | 2020-10-13 | 1 | -0/+1 |
| | |||||
* | Perform trace range propagation | Dmitry Stogov | 2020-10-13 | 1 | -0/+35 |
| | |||||
* | Eliminate dead stores | Dmitry Stogov | 2020-10-12 | 1 | -5/+10 |
| | |||||
* | Eliminate dead load | Dmitry Stogov | 2020-10-09 | 1 | -1/+3 |
| | |||||
* | Eliminate more dead type stores | Dmitry Stogov | 2020-10-09 | 1 | -2/+13 |
| | |||||
* | Eliminate more dead type stores | Dmitry Stogov | 2020-10-08 | 1 | -14/+26 |
| | |||||
* | Eliminate dead type stores | Dmitry Stogov | 2020-10-08 | 1 | -52/+88 |
| | |||||
* | Cleanup (expand and remove simple macros) | Dmitry Stogov | 2020-10-08 | 1 | -40/+25 |
| |