Skip to content

Conversation

@Akeit0
Copy link
Collaborator

@Akeit0 Akeit0 commented Nov 4, 2024

No description provided.

@Akeit0
Copy link
Collaborator Author

Akeit0 commented Nov 4, 2024

Optimization sample
101 Instructions to 68 Instructions

local function advance(bodies, nbody, dt)
    for i = 1, nbody do
        local bi = bodies[i]
        local bix, biy, biz, bimass = bi.x, bi.y, bi.z, bi.mass
        local bivx, bivy, bivz = bi.vx, bi.vy, bi.vz
        for j = i + 1, nbody do
            local bj = bodies[j]
            local dx, dy, dz = bix - bj.x, biy - bj.y, biz - bj.z
            local dist2 = dx * dx + dy * dy + dz * dz
            local mag = sqrt(dist2)
            mag = dt / (mag * dist2)
            local bm = bj.mass * mag
            bivx = bivx - (dx * bm)
            bivy = bivy - (dy * bm)
            bivz = bivz - (dz * bm)
            bm = bimass * mag
            bj.vx = bj.vx + (dx * bm)
            bj.vy = bj.vy + (dy * bm)
            bj.vz = bj.vz + (dz * bm)
        end
        bi.vx = bivx
        bi.vy = bivy
        bi.vz = bivz
        bi.x = bix + dt * bivx
        bi.y = biy + dt * bivy
        bi.z = biz + dt * bivz
    end
end
Instructions --------------------------------------------------
[0]     (2,12)          LOADK     3 0
[1]     (2,15)          MOVE      4 1
[2]     (2,4)           LOADK     5 0
[3]     (2,4)           FORPREP   3 96
[4]     (3,19)          MOVE      7 0
[5]     (3,25)          GETTABLE  7 7 3
[6]     (4,38)          MOVE      8 7
[7]     (4,40)          GETTABLE  8 8 257
[8]     (4,44)          MOVE      9 7
[9]     (4,46)          GETTABLE  9 9 258
[10]    (4,50)          MOVE      10 7
[11]    (4,52)          GETTABLE  10 10 259
[12]    (4,56)          MOVE      11 7
[13]    (4,58)          GETTABLE  11 11 260
[14]    (5,33)          MOVE      12 7
[15]    (5,35)          GETTABLE  12 12 261
[16]    (5,40)          MOVE      13 7
[17]    (5,42)          GETTABLE  13 13 262
[18]    (5,47)          MOVE      14 7
[19]    (5,49)          GETTABLE  14 14 263
[20]    (6,18)          ADD       15 3 256
[21]    (6,23)          MOVE      16 1
[22]    (6,8)           LOADK     17 0
[23]    (6,8)           FORPREP   15 54
[24]    (7,23)          MOVE      19 0
[25]    (7,29)          GETTABLE  19 19 15
[26]    (8,37)          MOVE      20 19
[27]    (8,39)          GETTABLE  20 20 257
[28]    (8,35)          SUB       20 8 20
[29]    (8,49)          MOVE      21 19
[30]    (8,51)          GETTABLE  21 21 258
[31]    (8,47)          SUB       21 9 21
[32]    (8,61)          MOVE      22 19
[33]    (8,63)          GETTABLE  22 22 259
[34]    (8,59)          SUB       22 10 22
[35]    (9,29)          MUL       23 20 20
[36]    (9,39)          MUL       24 21 21
[37]    (9,34)          ADD       23 23 24
[38]    (9,49)          MUL       24 22 22
[39]    (9,44)          ADD       23 23 24
[40]    (10,24)         GETTABUP  24 0 264
[41]    (10,29)         MOVE      25 23
[42]    (10,24)         CALL      24 2 2
[43]    (11,28)         MUL       25 24 23
[44]    (11,21)         DIV       25 2 25
[45]    (11,12)         MOVE      24 25
[46]    (12,23)         MOVE      25 19
[47]    (12,25)         GETTABLE  25 25 260
[48]    (12,31)         MUL       25 25 24
[49]    (13,30)         MUL       26 20 25
[50]    (13,24)         SUB       26 12 26
[51]    (13,12)         MOVE      12 26
[52]    (14,30)         MUL       26 21 25
[53]    (14,24)         SUB       26 13 26
[54]    (14,12)         MOVE      13 26
[55]    (15,30)         MUL       26 22 25
[56]    (15,24)         SUB       26 14 26
[57]    (15,12)         MOVE      14 26
[58]    (16,24)         MUL       26 11 24
[59]    (16,12)         MOVE      25 26
[60]    (17,20)         MOVE      26 19
[61]    (17,22)         GETTABLE  26 26 261
[62]    (17,32)         MUL       27 20 25
[63]    (17,26)         ADD       26 26 27
[64]    (17,12)         MOVE      27 19
[65]    (17,14)         SETTABLE  27 261 26
[66]    (18,20)         MOVE      26 19
[67]    (18,22)         GETTABLE  26 26 262
[68]    (18,32)         MUL       27 21 25
[69]    (18,26)         ADD       26 26 27
[70]    (18,12)         MOVE      27 19
[71]    (18,14)         SETTABLE  27 262 26
[72]    (19,20)         MOVE      26 19
[73]    (19,22)         GETTABLE  26 26 263
[74]    (19,32)         MUL       27 22 25
[75]    (19,26)         ADD       26 26 27
[76]    (19,12)         MOVE      27 19
[77]    (19,14)         SETTABLE  27 263 26
[78]    (6,8)           FORLOOP   15 -55
[79]    (21,16)         MOVE      15 12
[80]    (21,8)          MOVE      16 7
[81]    (21,10)         SETTABLE  16 261 15
[82]    (22,16)         MOVE      15 13
[83]    (22,8)          MOVE      16 7
[84]    (22,10)         SETTABLE  16 262 15
[85]    (23,16)         MOVE      15 14
[86]    (23,8)          MOVE      16 7
[87]    (23,10)         SETTABLE  16 263 15
[88]    (24,24)         MUL       15 2 12
[89]    (24,19)         ADD       15 8 15
[90]    (24,8)          MOVE      16 7
[91]    (24,10)         SETTABLE  16 257 15
[92]    (25,24)         MUL       15 2 13
[93]    (25,19)         ADD       15 9 15
[94]    (25,8)          MOVE      16 7
[95]    (25,10)         SETTABLE  16 258 15
[96]    (26,24)         MUL       15 2 14
[97]    (26,19)         ADD       15 10 15
[98]    (26,8)          MOVE      16 7
[99]    (26,10)         SETTABLE  16 259 15
[100]   (2,4)           FORLOOP   3 -97
[101]   (2,4)           RETURN    0 1
Constants --------------------------------------------------
[0]     1
[1]     x
[2]     y
[3]     z
[4]     mass
[5]     vx
[6]     vy
[7]     vz
[8]     sqrt
UpValues --------------------------------------------------
[0]     _ENV    0       0
Instructions --------------------------------------------------
[0]     (2,12)          LOADK     3 0
[1]     (2,15)          MOVE      4 1
[2]     (2,4)           LOADK     5 0
[3]     (2,4)           FORPREP   3 63
[4]     (3,25)          GETTABLE  7 0 3
[5]     (4,40)          GETTABLE  8 7 257
[6]     (4,46)          GETTABLE  9 7 258
[7]     (4,52)          GETTABLE  10 7 259
[8]     (4,58)          GETTABLE  11 7 260
[9]     (5,35)          GETTABLE  12 7 261
[10]    (5,42)          GETTABLE  13 7 262
[11]    (5,49)          GETTABLE  14 7 263
[12]    (6,18)          ADD       15 3 256
[13]    (6,23)          MOVE      16 1
[14]    (6,8)           LOADK     17 0
[15]    (6,8)           FORPREP   15 38
[16]    (7,29)          GETTABLE  19 0 15
[17]    (8,39)          GETTABLE  20 19 257
[18]    (8,35)          SUB       20 8 20
[19]    (8,51)          GETTABLE  21 19 258
[20]    (8,47)          SUB       21 9 21
[21]    (8,63)          GETTABLE  22 19 259
[22]    (8,59)          SUB       22 10 22
[23]    (9,29)          MUL       23 20 20
[24]    (9,39)          MUL       24 21 21
[25]    (9,34)          ADD       23 23 24
[26]    (9,49)          MUL       24 22 22
[27]    (9,44)          ADD       23 23 24
[28]    (10,24)         GETTABUP  24 0 264
[29]    (10,29)         MOVE      25 23
[30]    (10,24)         CALL      24 2 2
[31]    (11,28)         MUL       25 24 23
[32]    (11,21)         DIV       24 2 25
[33]    (12,25)         GETTABLE  25 19 260
[34]    (12,31)         MUL       25 25 24
[35]    (13,30)         MUL       26 20 25
[36]    (13,24)         SUB       12 12 26
[37]    (14,30)         MUL       26 21 25
[38]    (14,24)         SUB       13 13 26
[39]    (15,30)         MUL       26 22 25
[40]    (15,24)         SUB       14 14 26
[41]    (16,24)         MUL       25 11 24
[42]    (17,22)         GETTABLE  26 19 261
[43]    (17,32)         MUL       27 20 25
[44]    (17,26)         ADD       26 26 27
[45]    (17,14)         SETTABLE  19 261 26
[46]    (18,22)         GETTABLE  26 19 262
[47]    (18,32)         MUL       27 21 25
[48]    (18,26)         ADD       26 26 27
[49]    (18,14)         SETTABLE  19 262 26
[50]    (19,22)         GETTABLE  26 19 263
[51]    (19,32)         MUL       27 22 25
[52]    (19,26)         ADD       26 26 27
[53]    (19,14)         SETTABLE  19 263 26
[54]    (6,8)           FORLOOP   15 -39
[55]    (21,10)         SETTABLE  7 261 12
[56]    (22,10)         SETTABLE  7 262 13
[57]    (23,10)         SETTABLE  7 263 14
[58]    (24,24)         MUL       15 2 12
[59]    (24,19)         ADD       15 8 15
[60]    (24,10)         SETTABLE  7 257 15
[61]    (25,24)         MUL       15 2 13
[62]    (25,19)         ADD       15 9 15
[63]    (25,10)         SETTABLE  7 258 15
[64]    (26,24)         MUL       15 2 14
[65]    (26,19)         ADD       15 10 15
[66]    (26,10)         SETTABLE  7 259 15
[67]    (2,4)           FORLOOP   3 -64
[68]    (2,4)           RETURN    0 1
Constants --------------------------------------------------
[0]     1
[1]     x
[2]     y
[3]     z
[4]     mass
[5]     vx
[6]     vy
[7]     vz
[8]     sqrt
UpValues --------------------------------------------------
[0]     _ENV    0       0

@Akeit0
Copy link
Collaborator Author

Akeit0 commented Nov 4, 2024

This is not done.

@Akeit0
Copy link
Collaborator Author

Akeit0 commented Nov 4, 2024

I think almost all pattern merging is done.
Now the compiler returns almost the same results as luac except for the EQ - JMP pattern.

@nuskey8 nuskey8 merged commit 55d8f1a into nuskey8:main Dec 29, 2024
@nuskey8
Copy link
Owner

nuskey8 commented Dec 29, 2024

Merged the PR. Thanks!

@Akeit0 Akeit0 deleted the reduce-move branch January 5, 2025 02:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants