Tracing JIT drops loop-PHI CV register from SNAPSHOT after intermediate op1_def
Aperta
Nessuno ha ancora preso questa issue.
Bug
Status: Needs Triage
- Lingua principale
- C
- Stelle
- 40.4k
- Fork
- 8.1k
- Merge medio
- 2g 13h
- PR unite (30g)
- 96
Descrizione
Description
Tracing JIT returns wrong values from hot loops!
<?php
function f(array $meta, int $n): int {
$s = 0; $i = 0; $sink = 0;
while ($i < $n) {
$copy = $s; // QM_ASSIGN, op1_def on $s under RC inference
$sink += $copy; // keep ASSIGN past DCE
$m = (int) $meta[$s]; // FETCH_DIM_R use of $s, ZREG_LAST_USE
if (($m & 0xFF) === 1) { // IS_IDENTICAL guard, side-exit's SNAPSHOT misses $s
$i++;
$s = ($m >> 32) & 0xFFFFFF;
continue;
}
return $s;
}
return $s;
}
$meta = [0 => 1 | (1 << 32), 1 => 2 | (2 << 32)];
for ($w = 0; $w < 2000; $w++) f($meta, 3);
var_dump(f($meta, 3));
Results in:
$ php -d opcache.enable_cli=1 -d opcache.jit_buffer_size=64M -d opcache.jit=tracing repro.php
int(0)
Expected:
$ php -d opcache.enable_cli=1 -d opcache.jit_buffer_size=64M -d opcache.jit=function repro.php
int(1)
PHP Version
PHP 8.4 and above
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia eseguendo il repro.php fornito con le impostazioni di tracing JIT e function JIT, quindi confronta i valori risultanti e analizza il comportamento dello snapshot del loop attorno all’operazione intermedia e all’uscita laterale. Il lavoro è completato quando il tracing JIT restituisce int(1), in corrispondenza del risultato del function JIT, senza introdurre regressioni nel caso di hot-loop fornito.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c, php
- Ambito
- compilers
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 38/100