[php-src] PR #25136: opcache: preserve cv values across jit assignments and cse
| From: | aasul | Date: | Sun, 01 Nov 2026 19:46:53 +0000 |
| Subject: | [php-src] PR #25136: opcache: preserve cv values across jit assignments and cse | ||
| Groups: | php.git-pulls | ||
| Request: | Send a blank email to git-pulls+get-40198@lists.php.net to get a copy of this message | ||
Pull Request: https://github.com/php/php-src/pull/25136
Author: aasul
this fixes the A and C tracing jit failures from GH-24683.
for A, assignment handling can create redundant copies of identical typed constants that end up
overwriting a live cv value before a trace guard or side exit.
for C, a reusable expression can remain bound to a cv spill slot even after that cv has been
assigned a different value. later cse reuse can then corrupt the observable state.
the changes preserve the constant identity where appropriate, separate reusable expression values
from their cv assignments, and safely share spill storage when the optimized live ranges allow it.
i've included regression tests for the original failures, floating-point cse, and spill-frame
pressure.
@ChrisOrlando independently tested A+C on an apple m1 against php 8.5.12. A went from 9 wrong
results to 0, and C went from 939 wrong results to 0. the larger workload also matched the jit-off
result.
B is handled separately in #25085. the combined A+C+B patches fix all three original reproductions.
refs GH-24683.