Skip to content

Instantly share code, notes, and snippets.

@kingluo
Created March 25, 2016 09:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kingluo/a46e41ba63324be46412 to your computer and use it in GitHub Desktop.
Save kingluo/a46e41ba63324be46412 to your computer and use it in GitHub Desktop.
trace order
$ time luajit /tmp/test.lua
real 0m4.923s
user 0m4.912s
sys 0m0.020s
---- TRACE 1 start test.lua:5
0013 FORL 2 => 0006
---- TRACE 1 abort test.lua:3 -- leaving loop in root trace
---- TRACE 1 start test.lua:5
0011 MULVN 1 1 1 ; 9
0012 FORL 6 => 0011
---- TRACE 1 abort test.lua:3 -- leaving loop in root trace
---- TRACE 1 start test.lua:3
0006 ADDVV 1 1 5
0007 KSHORT 6 0
0008 MOV 7 0
0009 KSHORT 8 1
0010 FORI 6 => 0013
0011 MULVN 1 1 1 ; 9
0012 FORL 6 => 0011
0011 MULVN 1 1 1 ; 9
0012 FORL 6 => 0011
0013 FORL 2 => 0006
---- TRACE 1 IR
0001 int SLOAD #3 CI
0002 > num SLOAD #2 T
0003 num CONV 0001 num.int
0004 num ADD 0003 0002
0005 > num SLOAD #1 T
0006 > int CONV 0005 int.num
0007 > int LE 0006 +2147483646
0008 > int GE 0006 +0
0009 num MUL 0004 +9
0010 > int GE 0006 +1
0011 + num MUL 0009 +9
0012 > int LT 0006 +2
0013 + int ADD 0001 +1
0014 > int LE 0013 +10000000
0015 ------ LOOP ------------
0016 num CONV 0013 num.int
0017 num ADD 0016 0011
0018 num MUL 0017 +9
0019 + num MUL 0018 +9
0020 + int ADD 0013 +1
0021 > int LE 0020 +10000000
0022 int PHI 0013 0020
0023 num PHI 0011 0019
---- TRACE 1 mcode 190
0bcbff35 mov dword [0x41b80410], 0x1
0bcbff40 movsd xmm0, [0x41b8cbb0]
0bcbff49 cvttsd2si ebp, [rdx+0x10]
0bcbff4e cmp dword [rdx+0xc], 0xfffeffff
0bcbff55 jnb 0x0bcb0010 ->0
0bcbff5b xorps xmm7, xmm7
0bcbff5e cvtsi2sd xmm7, ebp
0bcbff62 addsd xmm7, [rdx+0x8]
0bcbff67 cmp dword [rdx+0x4], 0xfffeffff
0bcbff6e jnb 0x0bcb0010 ->0
0bcbff74 movsd xmm1, [rdx]
0bcbff78 cvttsd2si eax, xmm1
0bcbff7c xorps xmm6, xmm6
0bcbff7f cvtsi2sd xmm6, eax
0bcbff83 ucomisd xmm1, xmm6
0bcbff87 jnz 0x0bcb0010 ->0
0bcbff8d jpe 0x0bcb0010 ->0
0bcbff93 cmp eax, 0x7ffffffe
0bcbff99 jg 0x0bcb0010 ->0
0bcbff9f test eax, eax
0bcbffa1 jl 0x0bcb0014 ->1
0bcbffa7 mulsd xmm7, xmm0
0bcbffab cmp eax, +0x01
0bcbffae jl 0x0bcb0018 ->2
0bcbffb4 mulsd xmm7, xmm0
0bcbffb8 cmp eax, +0x02
0bcbffbb jge 0x0bcb001c ->3
0bcbffc1 add ebp, +0x01
0bcbffc4 cmp ebp, 0x00989680
0bcbffca jg 0x0bcb0020 ->4
->LOOP:
0bcbffd0 xorps xmm6, xmm6
0bcbffd3 cvtsi2sd xmm6, ebp
0bcbffd7 addsd xmm7, xmm6
0bcbffdb mulsd xmm7, xmm0
0bcbffdf mulsd xmm7, xmm0
0bcbffe3 add ebp, +0x01
0bcbffe6 cmp ebp, 0x00989680
0bcbffec jle 0x0bcbffd0 ->LOOP
0bcbffee jmp 0x0bcb0028 ->6
---- TRACE 1 stop -> loop
---- TRACE 2 start test.lua:5
0011 MULVN 1 1 1 ; 9
0012 FORL 6 => 0011
---- TRACE 2 IR
0001 > int SLOAD #8 CRI
0002 > int LE 0001 +2147483646
0003 int SLOAD #7 CI
0004 > num SLOAD #2 T
0005 + num MUL 0004 +9
0006 + int ADD 0003 +1
0007 > int LE 0006 0001
0008 ------ LOOP ------------
0009 + num MUL 0005 +9
0010 + int ADD 0006 +1
0011 > int LE 0010 0001
0012 int PHI 0006 0010
0013 num PHI 0005 0009
---- TRACE 2 mcode 118
0bcbfeba mov dword [0x41b80410], 0x2
0bcbfec5 movsd xmm0, [0x41b8cbb0]
0bcbfece movsd xmm7, [rdx+0x38]
0bcbfed3 cvttsd2si eax, xmm7
0bcbfed7 xorps xmm6, xmm6
0bcbfeda cvtsi2sd xmm6, eax
0bcbfede ucomisd xmm7, xmm6
0bcbfee2 jnz 0x0bcb0010 ->0
0bcbfee8 jpe 0x0bcb0010 ->0
0bcbfeee cmp eax, 0x7ffffffe
0bcbfef4 jg 0x0bcb0010 ->0
0bcbfefa cvttsd2si ebp, [rdx+0x30]
0bcbfeff cmp dword [rdx+0xc], 0xfffeffff
0bcbff06 jnb 0x0bcb0010 ->0
0bcbff0c movsd xmm7, [rdx+0x8]
0bcbff11 mulsd xmm7, xmm0
0bcbff15 add ebp, +0x01
0bcbff18 cmp ebp, eax
0bcbff1a jg 0x0bcb0014 ->1
->LOOP:
0bcbff20 mulsd xmm7, xmm0
0bcbff24 add ebp, +0x01
0bcbff27 cmp ebp, eax
0bcbff29 jle 0x0bcbff20 ->LOOP
0bcbff2b jmp 0x0bcb001c ->3
---- TRACE 2 stop -> loop
---- TRACE 3 start 1/3 test.lua:6
0011 MULVN 1 1 1 ; 9
0012 JFORL 6 2
---- TRACE 3 IR
0001 num SLOAD #2 PI
0002 int SLOAD #3 PI
0003 int SLOAD #8 PI
0004 num MUL 0001 +9
0005 > int GE 0003 +3
0006 num CONV 0003 num.int
0007 num CONV 0002 num.int
---- TRACE 3 mcode 105
0bcbfe4a mov dword [0x41b80410], 0x3
0bcbfe55 movsd xmm6, [0x41b8cbb0]
0bcbfe5e movsd xmm5, [0x41b8cbb8]
0bcbfe67 movsd xmm3, [0x41b8cbc0]
0bcbfe70 mulsd xmm7, xmm6
0bcbfe74 cmp eax, +0x03
0bcbfe77 jl 0x0bcb0014 ->1
0bcbfe7d xorps xmm4, xmm4
0bcbfe80 cvtsi2sd xmm4, eax
0bcbfe84 xorps xmm6, xmm6
0bcbfe87 cvtsi2sd xmm6, ebp
0bcbfe8b movsd [rdx+0x48], xmm5
0bcbfe90 movsd [rdx+0x40], xmm3
0bcbfe95 movsd [rdx+0x38], xmm4
0bcbfe9a movsd [rdx+0x30], xmm5
0bcbfe9f movsd [rdx+0x28], xmm6
0bcbfea4 movsd [rdx+0x10], xmm6
0bcbfea9 movsd [rdx+0x8], xmm7
0bcbfeae jmp 0x0bcbfeba
---- TRACE 3 stop -> 2
---- TRACE 4 start 2/3 test.lua:3
0013 JFORL 2 1
---- TRACE 4 IR
0001 num SLOAD #2 PI
0002 num SLOAD #3 I
0003 num ADD 0002 +1
0004 > num LE 0003 +10000000
---- TRACE 4 mcode 68
0bcbfdff mov dword [0x41b80410], 0x4
0bcbfe0a movsd xmm5, [0x41b8cbc8]
0bcbfe13 movsd xmm4, [0x41b8cbc0]
0bcbfe1c movsd xmm6, [rdx+0x10]
0bcbfe21 addsd xmm6, xmm4
0bcbfe25 ucomisd xmm5, xmm6
0bcbfe29 jb 0x0bcb0014 ->1
0bcbfe2f movsd [rdx+0x28], xmm6
0bcbfe34 movsd [rdx+0x10], xmm6
0bcbfe39 movsd [rdx+0x8], xmm7
0bcbfe3e jmp 0x0bcbff35
---- TRACE 4 stop -> 1
---- TRACE 5 start 1/6 test.lua:9
0014 RET1 1 2
0016 FORL 0 => 0013
0013 GGET 4 1 ; "test"
0014 KSHORT 5 1
0015 CALL 4 1 2
0000 . FUNCF 10 ; test.lua:1
0001 . KSHORT 1 0
0002 . KSHORT 2 0
0003 . KNUM 3 0 ; 10000000
0004 . KSHORT 4 1
0005 . JFORI 2 => 0014
---- TRACE 5 IR
0001 num SLOAD #2 PI
0003 > p32 RETF proto: 0x41b8d278 [0x41b8d2f8]
0004 num SLOAD #1 I
0005 num ADD 0004 +1
0006 > num LE 0005 +50
0007 fun SLOAD #0 R
0008 tab FLOAD 0007 func.env
0009 int FLOAD 0008 tab.hmask
0010 > int EQ 0009 +63
0011 p32 FLOAD 0008 tab.node
0012 > p32 HREFK 0011 "test" @35
0013 > fun HLOAD 0012
0014 > fun EQ 0013 test.lua:1
---- TRACE 5 mcode 216
0bcbfd20 mov dword [0x41b80410], 0x5
0bcbfd2b movsd xmm6, [0x41b8cbc0]
0bcbfd34 xorps xmm5, xmm5
0bcbfd37 movsd xmm4, [0x41b8cbc8]
0bcbfd40 movsd xmm3, [0x41b8cbd0]
0bcbfd49 cmp dword [rdx-0x4], 0x41b8d2f8
0bcbfd50 jnz 0x0bcb0014 ->1
0bcbfd56 add edx, -0x28
0bcbfd59 mov [0x41b804b4], edx
0bcbfd60 movsd xmm7, [rdx]
0bcbfd64 addsd xmm7, xmm6
0bcbfd68 ucomisd xmm3, xmm7
0bcbfd6c jb 0x0bcb0018 ->2
0bcbfd72 mov ebp, [rdx-0x8]
0bcbfd75 mov ebp, [rbp+0x8]
0bcbfd78 cmp dword [rbp+0x1c], +0x3f
0bcbfd7c jnz 0x0bcb001c ->3
0bcbfd82 mov ebp, [rbp+0x14]
0bcbfd85 mov rdi, 0xfffffffb416b4d78
0bcbfd8f cmp rdi, [rbp+0x350]
0bcbfd96 jnz 0x0bcb001c ->3
0bcbfd9c cmp dword [rbp+0x34c], -0x09
0bcbfda3 jnz 0x0bcb001c ->3
0bcbfda9 cmp dword [rbp+0x348], 0x41b8ce08
0bcbfdb3 jnz 0x0bcb001c ->3
0bcbfdb9 movsd [rdx+0x50], xmm5
0bcbfdbe movsd [rdx+0x48], xmm6
0bcbfdc3 movsd [rdx+0x40], xmm4
0bcbfdc8 movsd [rdx+0x38], xmm5
0bcbfdcd movsd [rdx+0x30], xmm5
0bcbfdd2 movsd [rdx+0x28], xmm6
0bcbfdd7 mov dword [rdx+0x24], 0x41b8d2f8
0bcbfdde mov dword [rdx+0x20], 0x41b8ce08
0bcbfde5 movsd [rdx], xmm7
0bcbfde9 add edx, +0x28
0bcbfdec mov [0x41b804b4], edx
0bcbfdf3 jmp 0x0bcbff35
---- TRACE 5 stop -> 1
function test(n)
local x = 0
for i = 0,10000000 do
x = x + i
for i = 0, n do
x= x * 9
end
end
return x
end
test(1)
test(100)
for i = 1,50 do
test(1)
end
$ time luajit /tmp/test.lua
real 0m6.240s
user 0m6.236s
sys 0m0.008s
---- TRACE 1 start test.lua:5
0011 MULVN 1 1 1 ; 9
0012 FORL 6 => 0011
---- TRACE 1 IR
0001 > int SLOAD #8 CRI
0002 > int LE 0001 +2147483646
0003 int SLOAD #7 CI
0004 > num SLOAD #2 T
0005 + num MUL 0004 +9
0006 + int ADD 0003 +1
0007 > int LE 0006 0001
0008 ------ LOOP ------------
0009 + num MUL 0005 +9
0010 + int ADD 0006 +1
0011 > int LE 0010 0001
0012 int PHI 0006 0010
0013 num PHI 0005 0009
---- TRACE 1 mcode 118
0bcbff8a mov dword [0x40693410], 0x1
0bcbff95 movsd xmm0, [0x406a3a30]
0bcbff9e movsd xmm7, [rdx+0x38]
0bcbffa3 cvttsd2si eax, xmm7
0bcbffa7 xorps xmm6, xmm6
0bcbffaa cvtsi2sd xmm6, eax
0bcbffae ucomisd xmm7, xmm6
0bcbffb2 jnz 0x0bcb0010 ->0
0bcbffb8 jpe 0x0bcb0010 ->0
0bcbffbe cmp eax, 0x7ffffffe
0bcbffc4 jg 0x0bcb0010 ->0
0bcbffca cvttsd2si ebp, [rdx+0x30]
0bcbffcf cmp dword [rdx+0xc], 0xfffeffff
0bcbffd6 jnb 0x0bcb0010 ->0
0bcbffdc movsd xmm7, [rdx+0x8]
0bcbffe1 mulsd xmm7, xmm0
0bcbffe5 add ebp, +0x01
0bcbffe8 cmp ebp, eax
0bcbffea jg 0x0bcb0014 ->1
->LOOP:
0bcbfff0 mulsd xmm7, xmm0
0bcbfff4 add ebp, +0x01
0bcbfff7 cmp ebp, eax
0bcbfff9 jle 0x0bcbfff0 ->LOOP
0bcbfffb jmp 0x0bcb001c ->3
---- TRACE 1 stop -> loop
---- TRACE 2 start 1/3 test.lua:3
0013 FORL 2 => 0006
0006 ADDVV 1 1 5
0007 KSHORT 6 0
0008 MOV 7 0
0009 KSHORT 8 1
0010 JFORI 6 => 0013
---- TRACE 2 IR
0001 num SLOAD #2 PI
0002 num SLOAD #3 I
0003 num ADD 0002 +1
0004 > num LE 0003 +10000000
0005 num ADD 0003 0001
0006 > num SLOAD #1 T
0007 > int CONV 0006 int.num
0008 > int LE 0007 +2147483646
0009 > int GE 0007 +0
---- TRACE 2 mcode 165
0bcbfede movaps xmm2, xmm7
0bcbfee1 mov dword [0x40693410], 0x2
0bcbfeec movsd xmm7, [0x406a3a38]
0bcbfef5 xorps xmm5, xmm5
0bcbfef8 movsd xmm3, [0x406a3a40]
0bcbff01 movsd xmm6, [rdx+0x10]
0bcbff06 addsd xmm6, xmm3
0bcbff0a ucomisd xmm7, xmm6
0bcbff0e jb 0x0bcb0014 ->1
0bcbff14 movaps xmm7, xmm6
0bcbff17 addsd xmm7, xmm2
0bcbff1b cmp dword [rdx+0x4], 0xfffeffff
0bcbff22 jnb 0x0bcb0018 ->2
0bcbff28 movsd xmm4, [rdx]
0bcbff2c cvttsd2si ebp, xmm4
0bcbff30 xorps xmm1, xmm1
0bcbff33 cvtsi2sd xmm1, ebp
0bcbff37 ucomisd xmm4, xmm1
0bcbff3b jnz 0x0bcb0018 ->2
0bcbff41 jpe 0x0bcb0018 ->2
0bcbff47 cmp ebp, 0x7ffffffe
0bcbff4d jg 0x0bcb0018 ->2
0bcbff53 test ebp, ebp
0bcbff55 jl 0x0bcb001c ->3
0bcbff5b movsd [rdx+0x48], xmm5
0bcbff60 movsd [rdx+0x40], xmm3
0bcbff65 movsd [rdx+0x38], xmm4
0bcbff6a movsd [rdx+0x30], xmm5
0bcbff6f movsd [rdx+0x28], xmm6
0bcbff74 movsd [rdx+0x10], xmm6
0bcbff79 movsd [rdx+0x8], xmm7
0bcbff7e jmp 0x0bcbff8a
---- TRACE 2 stop -> 1
---- TRACE 3 start 2/1 test.lua:9
0014 RET1 1 2
0016 FORL 0 => 0013
0013 GGET 4 1 ; "test"
0014 KSHORT 5 1
0015 CALL 4 1 2
0000 . FUNCF 10 ; test.lua:1
0001 . KSHORT 1 0
0002 . KSHORT 2 0
0003 . KNUM 3 0 ; 10000000
0004 . KSHORT 4 1
0005 . FORI 2 => 0014
0006 . ADDVV 1 1 5
0007 . KSHORT 6 0
0008 . MOV 7 0
0009 . KSHORT 8 1
0010 . JFORI 6 => 0013
---- TRACE 3 IR
0001 num SLOAD #2 PI
0003 > p32 RETF proto: 0x406a0278 [0x406a02f8]
0004 num SLOAD #1 I
0005 num ADD 0004 +1
0006 > num LE 0005 +50
0007 fun SLOAD #0 R
0008 tab FLOAD 0007 func.env
0009 int FLOAD 0008 tab.hmask
0010 > int EQ 0009 +63
0011 p32 FLOAD 0008 tab.node
0012 > p32 HREFK 0011 "test" @35
0013 > fun HLOAD 0012
0014 > fun EQ 0013 test.lua:1
---- TRACE 3 mcode 236
0bcbfdeb mov dword [0x40693410], 0x3
0bcbfdf6 movsd xmm6, [0x406a3a40]
0bcbfdff xorps xmm5, xmm5
0bcbfe02 movsd xmm4, [0x406a3a38]
0bcbfe0b movsd xmm3, [0x406a3a50]
0bcbfe14 cmp dword [rdx-0x4], 0x406a02f8
0bcbfe1b jnz 0x0bcb0014 ->1
0bcbfe21 add edx, -0x28
0bcbfe24 mov [0x406934b4], edx
0bcbfe2b movsd xmm7, [rdx]
0bcbfe2f addsd xmm7, xmm6
0bcbfe33 ucomisd xmm3, xmm7
0bcbfe37 jb 0x0bcb0018 ->2
0bcbfe3d mov ebp, [rdx-0x8]
0bcbfe40 mov ebp, [rbp+0x8]
0bcbfe43 cmp dword [rbp+0x1c], +0x3f
0bcbfe47 jnz 0x0bcb001c ->3
0bcbfe4d mov ebp, [rbp+0x14]
0bcbfe50 mov rdi, 0xfffffffb40bc2d78
0bcbfe5a cmp rdi, [rbp+0x350]
0bcbfe61 jnz 0x0bcb001c ->3
0bcbfe67 cmp dword [rbp+0x34c], -0x09
0bcbfe6e jnz 0x0bcb001c ->3
0bcbfe74 cmp dword [rbp+0x348], 0x4069fe08
0bcbfe7e jnz 0x0bcb001c ->3
0bcbfe84 movsd [rdx+0x70], xmm5
0bcbfe89 movsd [rdx+0x68], xmm6
0bcbfe8e movsd [rdx+0x60], xmm6
0bcbfe93 movsd [rdx+0x58], xmm5
0bcbfe98 movsd [rdx+0x50], xmm5
0bcbfe9d movsd [rdx+0x48], xmm6
0bcbfea2 movsd [rdx+0x40], xmm4
0bcbfea7 movsd [rdx+0x38], xmm5
0bcbfeac movsd [rdx+0x30], xmm5
0bcbfeb1 movsd [rdx+0x28], xmm6
0bcbfeb6 mov dword [rdx+0x24], 0x406a02f8
0bcbfebd mov dword [rdx+0x20], 0x4069fe08
0bcbfec4 movsd [rdx], xmm7
0bcbfec8 add edx, +0x28
0bcbfecb mov [0x406934b4], edx
0bcbfed2 jmp 0x0bcbff8a
---- TRACE 3 stop -> 1
function test(n)
local x = 0
for i = 0,10000000 do
x = x + i
for i = 0, n do
x= x * 9
end
end
return x
end
test(100)
test(1)
for i = 1,50 do
test(1)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment