Understanding SNAP
- From: Raj <rajlistuser@xxxxxxxxx>
- To: luajit@xxxxxxxxxxxxx
- Date: Sun, 24 Sep 2017 19:06:14 +0530
Hi all,
I am trying to trace some register coalescing too complex NYI in my
luajit code. From the IR in can see that the snapshot when the NYI
happens is pretty full. My attempt is to trace backwards and to find
out what causes the snapshot to be filled up.
To start with I am looking to understand what information is given out
by the SNAP line. for example in a SNAP line below:
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
If my understanding is correct, in first snapshot second position is
written by IR at 0003. Going by the argument of IR at 0003 I guess
0002 is x. What I do not understand is that in second snapshot line
(after IR 0005) 3rd and 6th position is modified by IR at 0004. How is
that?
Now, how can I trace which variables are present in a snapshot
position in above IR? For eg: in SNAP #7 [ ---- 0007 ].
Also what does the second argument to SLOAD (flags) signify? [I, CI,
CRI, T, PI, PRI, R, RI] etc... I have also seen SLOAD with second
argument empty.
Thanks and Regards,
Raj
Other related posts: