2017-09-24 3 views
1

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.

Répondre