J'essaie de tracer quelques registre coalescence trop complexe NYI dans mon code luajit. De l'IR peut voir que l'instantané quand la JNI arrive est assez plein. Ma tentative est de tracer à l'envers et de découvrir ce qui provoque le remplissage de l'instantané. Pour commencer, je cherche à comprendre quelles informations sont données par la ligne SNAP. par exemple dans une ligne de SNAP ci-dessous:Comprendre Luajit instruction SNAP IR
> local x = 1.2 for i=1,1e3 do x = x * -3 end
---- TRACE 1 start stdin:1
0006 MULVN 0 0 1 ; -3
0007 FORL 1 => 0006
---- TRACE 1 IR
.... SNAP #0 [ ---- ]
0001 rbp int SLOAD #2 CI
0002 xmm7 > num SLOAD #1 T
0003 xmm7 + num MUL 0002 -3
0004 rbp + int ADD 0001 +1
.... SNAP #1 [ ---- 0003 ]
0005 > int LE 0004 +1000
.... SNAP #2 [ ---- 0003 0004 ---- ---- 0004 ]
0006 ------------ LOOP ------------
0007 xmm7 + num MUL 0003 -3
0008 rbp + int ADD 0004 +1
.... SNAP #3 [ ---- 0007 ]
0009 > int LE 0008 +1000
0010 rbp int PHI 0004 0008
0011 xmm7 num PHI 0003 0007
Si je comprends bien, dans le premier instantané deuxième position est écrite par IR à 0003
. En passant par l'argument de l'IR à 0003
je suppose que 0002
(est-ce un emplacement de mémoire?) est . Ce que je ne comprends pas, c'est que dans la deuxième ligne d'instantané (après IR 0005
) les 3ème et 6ème positions sont modifiées par IR à 0004
. Comment c'est?
Maintenant, comment puis-je savoir quelles variables sont présentes dans une position d'instantané au-dessus de IR? Par exemple: dans SNAP #7 [ ---- 0007 ]
.
De même que signifie le deuxième argument à SLOAD
(flags)? [I, CI, CRI, T, PI, PRI, R, RI]
etc ... J'ai également vu SLOAD
avec le second argument vide.