Skip to content
Snippets Groups Projects
Commit 0568f6f8 authored by Rafael Ravedutti's avatar Rafael Ravedutti
Browse files

Transformations and analysis refactoring

parent ba3a6c8f
Branches
Tags
No related merge requests found
Showing
with 1062 additions and 1021 deletions
digraph AST { digraph AST {
node [color=lightblue2 style=filled] node [color=lightblue2 style=filled]
size="6,6" size="6,6"
n139969368120288 [label=Block] n140343105889616 [label=Block]
n139969367650200 [label=Module] n140343105956160 [label=Module]
n139969368120288 -> n139969367650200 n140343105889616 -> n140343105956160
n139969367650256 [label=Module] n140343105956216 [label=Module]
n139969368120288 -> n139969367650256 n140343105889616 -> n140343105956216
n139969367650200 [label=Module] n140343105956160 [label=Module]
n139969367650144 [label=Block] n140343105956104 [label=Block]
n139969367650200 -> n139969367650144 n140343105956160 -> n140343105956104
n139969367650144 [label=Block] n140343105956104 [label=Block]
n139969367647400 [label=ParticleFor] n140343105954200 [label=ParticleFor]
n139969367650144 -> n139969367647400 n140343105956104 -> n140343105954200
n139969367647400 [label=ParticleFor] n140343105954200 [label=ParticleFor]
n139969366898952 [label=Block] n140343105184936 [label=Block]
n139969367647400 -> n139969366898952 n140343105954200 -> n140343105184936
n139969370135744 [label=nlocal] n140343108419712 [label=nlocal]
n139969367647400 -> n139969370135744 n140343105954200 -> n140343108419712
n139969366898952 [label=Block] n140343105184936 [label=Block]
n139969366899120 [label=For] n140343105185104 [label=For]
n139969366898952 -> n139969366899120 n140343105184936 -> n140343105185104
n139969366899400 [label="*"] n140343105185384 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969366899400 -> n139969366898784 n140343105185384 -> n140343105184768
n139969367646952 [label=neighborlist_capacity] n140343105891352 [label=neighborlist_capacity]
n139969366899400 -> n139969367646952 n140343105185384 -> n140343105891352
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969367646952 [label=neighborlist_capacity] n140343105891352 [label=neighborlist_capacity]
n139969366899624 [label=PropertyAccess] n140343105185608 [label=PropertyAccess]
n139969368120512 [label=position] n140343105889840 [label=position]
n139969366899624 -> n139969368120512 n140343105185608 -> n140343105889840
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969366899624 -> n139969366898784 n140343105185608 -> n140343105184768
n139969366925440 [label="*"] n140343105186784 [label="*"]
n139969366899624 -> n139969366925440 n140343105185608 -> n140343105186784
n139969366927288 [label="+"] n140343105225560 [label="+"]
n139969366899624 -> n139969366927288 n140343105185608 -> n140343105225560
n139969366929080 [label="+"] n140343105227352 [label="+"]
n139969366899624 -> n139969366929080 n140343105185608 -> n140343105227352
n139969368120512 [label=position] n140343105889840 [label=position]
n139969366925440 [label="*"] n140343105186784 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969366925440 -> n139969366898784 n140343105186784 -> n140343105184768
n139969366925496 [label=3] n140343105186840 [label=3]
n139969366925440 -> n139969366925496 n140343105186784 -> n140343105186840
n139969366925496 [label=3] n140343105186840 [label=3]
n139969366927288 [label="+"] n140343105225560 [label="+"]
n139969366927120 [label="*"] n140343105225392 [label="*"]
n139969366927288 -> n139969366927120 n140343105225560 -> n140343105225392
n139969366927344 [label=1] n140343105225616 [label=1]
n139969366927288 -> n139969366927344 n140343105225560 -> n140343105225616
n139969366927120 [label="*"] n140343105225392 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969366927120 -> n139969366898784 n140343105225392 -> n140343105184768
n139969366927176 [label=3] n140343105225448 [label=3]
n139969366927120 -> n139969366927176 n140343105225392 -> n140343105225448
n139969366927176 [label=3] n140343105225448 [label=3]
n139969366927344 [label=1] n140343105225616 [label=1]
n139969366929080 [label="+"] n140343105227352 [label="+"]
n139969366928912 [label="*"] n140343105227184 [label="*"]
n139969366929080 -> n139969366928912 n140343105227352 -> n140343105227184
n139969366929136 [label=2] n140343105227408 [label=2]
n139969366929080 -> n139969366929136 n140343105227352 -> n140343105227408
n139969366928912 [label="*"] n140343105227184 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969366928912 -> n139969366898784 n140343105227184 -> n140343105184768
n139969366928968 [label=3] n140343105227240 [label=3]
n139969366928912 -> n139969366928968 n140343105227184 -> n140343105227240
n139969366928968 [label=3] n140343105227240 [label=3]
n139969366929136 [label=2] n140343105227408 [label=2]
n139969366900016 [label="*"] n140343105186000 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969366900016 -> n139969366898784 n140343105186000 -> n140343105184768
n139969366900072 [label=3] n140343105186056 [label=3]
n139969366900016 -> n139969366900072 n140343105186000 -> n140343105186056
n139969366900072 [label=3] n140343105186056 [label=3]
n139969366926336 [label="*"] n140343105187680 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969366926336 -> n139969366898784 n140343105187680 -> n140343105184768
n139969366926392 [label=3] n140343105187736 [label=3]
n139969366926336 -> n139969366926392 n140343105187680 -> n140343105187736
n139969366926392 [label=3] n140343105187736 [label=3]
n139969366926504 [label="+"] n140343105224776 [label="+"]
n139969366926336 [label="*"] n140343105187680 [label="*"]
n139969366926504 -> n139969366926336 n140343105224776 -> n140343105187680
n139969366926560 [label=1] n140343105224832 [label=1]
n139969366926504 -> n139969366926560 n140343105224776 -> n140343105224832
n139969366926560 [label=1] n140343105224832 [label=1]
n139969366928128 [label="*"] n140343105226400 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969366928128 -> n139969366898784 n140343105226400 -> n140343105184768
n139969366928184 [label=3] n140343105226456 [label=3]
n139969366928128 -> n139969366928184 n140343105226400 -> n140343105226456
n139969366928184 [label=3] n140343105226456 [label=3]
n139969366928296 [label="+"] n140343105226568 [label="+"]
n139969366928128 [label="*"] n140343105226400 [label="*"]
n139969366928296 -> n139969366928128 n140343105226568 -> n140343105226400
n139969366928352 [label=2] n140343105226624 [label=2]
n139969366928296 -> n139969366928352 n140343105226568 -> n140343105226624
n139969366928352 [label=2] n140343105226624 [label=2]
n139969367692344 [label="*"] n140343106084936 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969367692344 -> n139969366898784 n140343106084936 -> n140343105184768
n139969367692288 [label=3] n140343106084992 [label=3]
n139969367692344 -> n139969367692288 n140343106084936 -> n140343106084992
n139969367692288 [label=3] n140343106084992 [label=3]
n139969367691616 [label="*"] n140343106085328 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969367691616 -> n139969366898784 n140343106085328 -> n140343105184768
n139969367691672 [label=3] n140343106085384 [label=3]
n139969367691616 -> n139969367691672 n140343106085328 -> n140343106085384
n139969367691672 [label=3] n140343106085384 [label=3]
n139969367692120 [label="*"] n140343106085832 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969367692120 -> n139969366898784 n140343106085832 -> n140343105184768
n139969367692176 [label=3] n140343106085888 [label=3]
n139969367692120 -> n139969367692176 n140343106085832 -> n140343106085888
n139969367692176 [label=3] n140343106085888 [label=3]
n139969367692456 [label="+"] n140343106086000 [label="+"]
n139969367692120 [label="*"] n140343106085832 [label="*"]
n139969367692456 -> n139969367692120 n140343106086000 -> n140343106085832
n139969367692512 [label=1] n140343106086056 [label=1]
n139969367692456 -> n139969367692512 n140343106086000 -> n140343106086056
n139969367692512 [label=1] n140343106086056 [label=1]
n139969367692624 [label="*"] n140343106086224 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969367692624 -> n139969366898784 n140343106086224 -> n140343105184768
n139969367692680 [label=3] n140343106086280 [label=3]
n139969367692624 -> n139969367692680 n140343106086224 -> n140343106086280
n139969367692680 [label=3] n140343106086280 [label=3]
n139969367694024 [label="+"] n140343106086392 [label="+"]
n139969367692624 [label="*"] n140343106086224 [label="*"]
n139969367694024 -> n139969367692624 n140343106086392 -> n140343106086224
n139969367692792 [label=1] n140343106086448 [label=1]
n139969367694024 -> n139969367692792 n140343106086392 -> n140343106086448
n139969367692792 [label=1] n140343106086448 [label=1]
n139969367694248 [label="*"] n140343106086728 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969367694248 -> n139969366898784 n140343106086728 -> n140343105184768
n139969367694640 [label=3] n140343106086784 [label=3]
n139969367694248 -> n139969367694640 n140343106086728 -> n140343106086784
n139969367694640 [label=3] n140343106086784 [label=3]
n139969367694808 [label="+"] n140343106086896 [label="+"]
n139969367694248 [label="*"] n140343106086728 [label="*"]
n139969367694808 -> n139969367694248 n140343106086896 -> n140343106086728
n139969367695088 [label=2] n140343106086952 [label=2]
n139969367694808 -> n139969367695088 n140343106086896 -> n140343106086952
n139969367695088 [label=2] n140343106086952 [label=2]
n139969367695256 [label="*"] n140343106087120 [label="*"]
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969367695256 -> n139969366898784 n140343106087120 -> n140343105184768
n139969367695312 [label=3] n140343106087176 [label=3]
n139969367695256 -> n139969367695312 n140343106087120 -> n140343106087176
n139969367695312 [label=3] n140343106087176 [label=3]
n139969367826560 [label="+"] n140343106087288 [label="+"]
n139969367695256 [label="*"] n140343106087120 [label="*"]
n139969367826560 -> n139969367695256 n140343106087288 -> n140343106087120
n139969367826616 [label=2] n140343106087344 [label=2]
n139969367826560 -> n139969367826616 n140343106087288 -> n140343106087344
n139969367826616 [label=2] n140343106087344 [label=2]
n139969366899120 [label=For] n140343105185104 [label=For]
n139969366899176 [label="Iter(15)"] n140343105185160 [label="Iter(15)"]
n139969366899120 -> n139969366899176 n140343105185104 -> n140343105185160
n139969366899288 [label=Block] n140343105185272 [label=Block]
n139969366899120 -> n139969366899288 n140343105185104 -> n140343105185272
n139969366899232 [label=0] n140343105185216 [label=0]
n139969366899120 -> n139969366899232 n140343105185104 -> n140343105185216
n139969366899064 [label=ArrayAccess] n140343105185048 [label=ArrayAccess]
n139969366899120 -> n139969366899064 n140343105185104 -> n140343105185048
n139969366899176 [label="Iter(15)"] n140343105185160 [label="Iter(15)"]
n139969366899288 [label=Block] n140343105185272 [label=Block]
n139969366958768 [label=Filter] n140343105228304 [label=Filter]
n139969366899288 -> n139969366958768 n140343105185272 -> n140343105228304
n139969366899512 [label="+"] n140343105185496 [label="+"]
n139969366899400 [label="*"] n140343105185384 [label="*"]
n139969366899512 -> n139969366899400 n140343105185496 -> n140343105185384
n139969366899176 [label="Iter(15)"] n140343105185160 [label="Iter(15)"]
n139969366899512 -> n139969366899176 n140343105185496 -> n140343105185160
n139969366899736 [label=PropertyAccess] n140343105185720 [label=PropertyAccess]
n139969368120512 [label=position] n140343105889840 [label=position]
n139969366899736 -> n139969368120512 n140343105185720 -> n140343105889840
n139969366899344 [label=ArrayAccess] n140343105185328 [label=ArrayAccess]
n139969366899736 -> n139969366899344 n140343105185720 -> n140343105185328
n139969366925776 [label="*"] n140343105187120 [label="*"]
n139969366899736 -> n139969366925776 n140343105185720 -> n140343105187120
n139969366927624 [label="+"] n140343105225896 [label="+"]
n139969366899736 -> n139969366927624 n140343105185720 -> n140343105225896
n139969366958152 [label="+"] n140343105227688 [label="+"]
n139969366899736 -> n139969366958152 n140343105185720 -> n140343105227688
n139969366899344 [label=ArrayAccess] n140343105185328 [label=ArrayAccess]
n139969367647008 [label=neighborlists] n140343105891408 [label=neighborlists]
n139969366899344 -> n139969367647008 n140343105185328 -> n140343105891408
n139969366899512 [label="+"] n140343105185496 [label="+"]
n139969366899344 -> n139969366899512 n140343105185328 -> n140343105185496
n139969367647008 [label=neighborlists] n140343105891408 [label=neighborlists]
n139969366925776 [label="*"] n140343105187120 [label="*"]
n139969366899344 [label=ArrayAccess] n140343105185328 [label=ArrayAccess]
n139969366925776 -> n139969366899344 n140343105187120 -> n140343105185328
n139969366925832 [label=3] n140343105187176 [label=3]
n139969366925776 -> n139969366925832 n140343105187120 -> n140343105187176
n139969366925832 [label=3] n140343105187176 [label=3]
n139969366927624 [label="+"] n140343105225896 [label="+"]
n139969366927456 [label="*"] n140343105225728 [label="*"]
n139969366927624 -> n139969366927456 n140343105225896 -> n140343105225728
n139969366927680 [label=1] n140343105225952 [label=1]
n139969366927624 -> n139969366927680 n140343105225896 -> n140343105225952
n139969366927456 [label="*"] n140343105225728 [label="*"]
n139969366899344 [label=ArrayAccess] n140343105185328 [label=ArrayAccess]
n139969366927456 -> n139969366899344 n140343105225728 -> n140343105185328
n139969366927512 [label=3] n140343105225784 [label=3]
n139969366927456 -> n139969366927512 n140343105225728 -> n140343105225784
n139969366927512 [label=3] n140343105225784 [label=3]
n139969366927680 [label=1] n140343105225952 [label=1]
n139969366958152 [label="+"] n140343105227688 [label="+"]
n139969366929248 [label="*"] n140343105227520 [label="*"]
n139969366958152 -> n139969366929248 n140343105227688 -> n140343105227520
n139969366958208 [label=2] n140343105227744 [label=2]
n139969366958152 -> n139969366958208 n140343105227688 -> n140343105227744
n139969366929248 [label="*"] n140343105227520 [label="*"]
n139969366899344 [label=ArrayAccess] n140343105185328 [label=ArrayAccess]
n139969366929248 -> n139969366899344 n140343105227520 -> n140343105185328
n139969366929304 [label=3] n140343105227576 [label=3]
n139969366929248 -> n139969366929304 n140343105227520 -> n140343105227576
n139969366929304 [label=3] n140343105227576 [label=3]
n139969366958208 [label=2] n140343105227744 [label=2]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969366899624 [label=PropertyAccess] n140343105185608 [label=PropertyAccess]
n139969366899848 -> n139969366899624 n140343105185832 -> n140343105185608
n139969366899736 [label=PropertyAccess] n140343105185720 [label=PropertyAccess]
n139969366899848 -> n139969366899736 n140343105185832 -> n140343105185720
n139969366900352 [label="*"] n140343105186336 [label="*"]
n139969366899344 [label=ArrayAccess] n140343105185328 [label=ArrayAccess]
n139969366900352 -> n139969366899344 n140343105186336 -> n140343105185328
n139969366900408 [label=3] n140343105186392 [label=3]
n139969366900352 -> n139969366900408 n140343105186336 -> n140343105186392
n139969366900408 [label=3] n140343105186392 [label=3]
n139969366926168 [label="*"] n140343105187512 [label="*"]
n139969366900688 [label=VectorAccess] n140343105186672 [label=VectorAccess]
n139969366926168 -> n139969366900688 n140343105187512 -> n140343105186672
n139969366926112 [label=VectorAccess] n140343105187456 [label=VectorAccess]
n139969366926168 -> n139969366926112 n140343105187512 -> n140343105187456
n139969366900688 [label=VectorAccess] n140343105186672 [label=VectorAccess]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969366900688 -> n139969366899848 n140343105186672 -> n140343105185832
n139969366926112 [label=VectorAccess] n140343105187456 [label=VectorAccess]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969366926112 -> n139969366899848 n140343105187456 -> n140343105185832
n139969366926672 [label="*"] n140343105224944 [label="*"]
n139969366899344 [label=ArrayAccess] n140343105185328 [label=ArrayAccess]
n139969366926672 -> n139969366899344 n140343105224944 -> n140343105185328
n139969366926728 [label=3] n140343105225000 [label=3]
n139969366926672 -> n139969366926728 n140343105224944 -> n140343105225000
n139969366926728 [label=3] n140343105225000 [label=3]
n139969366926840 [label="+"] n140343105225112 [label="+"]
n139969366926672 [label="*"] n140343105224944 [label="*"]
n139969366926840 -> n139969366926672 n140343105225112 -> n140343105224944
n139969366926896 [label=1] n140343105225168 [label=1]
n139969366926840 -> n139969366926896 n140343105225112 -> n140343105225168
n139969366926896 [label=1] n140343105225168 [label=1]
n139969366927848 [label="*"] n140343105226120 [label="*"]
n139969366927008 [label=VectorAccess] n140343105225280 [label=VectorAccess]
n139969366927848 -> n139969366927008 n140343105226120 -> n140343105225280
n139969366927792 [label=VectorAccess] n140343105226064 [label=VectorAccess]
n139969366927848 -> n139969366927792 n140343105226120 -> n140343105226064
n139969366927008 [label=VectorAccess] n140343105225280 [label=VectorAccess]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969366927008 -> n139969366899848 n140343105225280 -> n140343105185832
n139969366927792 [label=VectorAccess] n140343105226064 [label=VectorAccess]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969366927792 -> n139969366899848 n140343105226064 -> n140343105185832
n139969366927960 [label="+"] n140343105226232 [label="+"]
n139969366926168 [label="*"] n140343105187512 [label="*"]
n139969366927960 -> n139969366926168 n140343105226232 -> n140343105187512
n139969366927848 [label="*"] n140343105226120 [label="*"]
n139969366927960 -> n139969366927848 n140343105226232 -> n140343105226120
n139969366928464 [label="*"] n140343105226736 [label="*"]
n139969366899344 [label=ArrayAccess] n140343105185328 [label=ArrayAccess]
n139969366928464 -> n139969366899344 n140343105226736 -> n140343105185328
n139969366928520 [label=3] n140343105226792 [label=3]
n139969366928464 -> n139969366928520 n140343105226736 -> n140343105226792
n139969366928520 [label=3] n140343105226792 [label=3]
n139969366928632 [label="+"] n140343105226904 [label="+"]
n139969366928464 [label="*"] n140343105226736 [label="*"]
n139969366928632 -> n139969366928464 n140343105226904 -> n140343105226736
n139969366928688 [label=2] n140343105226960 [label=2]
n139969366928632 -> n139969366928688 n140343105226904 -> n140343105226960
n139969366928688 [label=2] n140343105226960 [label=2]
n139969366958376 [label="*"] n140343105227912 [label="*"]
n139969366928800 [label=VectorAccess] n140343105227072 [label=VectorAccess]
n139969366958376 -> n139969366928800 n140343105227912 -> n140343105227072
n139969366958320 [label=VectorAccess] n140343105227856 [label=VectorAccess]
n139969366958376 -> n139969366958320 n140343105227912 -> n140343105227856
n139969366928800 [label=VectorAccess] n140343105227072 [label=VectorAccess]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969366928800 -> n139969366899848 n140343105227072 -> n140343105185832
n139969366958320 [label=VectorAccess] n140343105227856 [label=VectorAccess]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969366958320 -> n139969366899848 n140343105227856 -> n140343105185832
n139969366958488 [label="+"] n140343105228024 [label="+"]
n139969366927960 [label="+"] n140343105226232 [label="+"]
n139969366958488 -> n139969366927960 n140343105228024 -> n140343105226232
n139969366958376 [label="*"] n140343105227912 [label="*"]
n139969366958488 -> n139969366958376 n140343105228024 -> n140343105227912
n139969366958600 [label="<"] n140343105228136 [label="<"]
n139969366958488 [label="+"] n140343105228024 [label="+"]
n139969366958600 -> n139969366958488 n140343105228136 -> n140343105228024
n139969366958656 [label=2.5] n140343105228192 [label=2.5]
n139969366958600 -> n139969366958656 n140343105228136 -> n140343105228192
n139969366958656 [label=2.5] n140343105228192 [label=2.5]
n139969366958768 [label=Filter] n140343105228304 [label=Filter]
n139969366958600 [label="<"] n140343105228136 [label="<"]
n139969366958768 -> n139969366958600 n140343105228304 -> n140343105228136
n139969367650088 [label=Block] n140343105956048 [label=Block]
n139969366958768 -> n139969367650088 n140343105228304 -> n140343105956048
n139969367650088 [label=Block] n140343105956048 [label=Block]
n139969367693296 [label=Assign] n140343105891968 [label=Assign]
n139969367650088 -> n139969367693296 n140343105956048 -> n140343105891968
n139969367694976 [label="/"] n140343105956384 [label="/"]
n139969367694864 [label=1.0] n140343105956440 [label=1.0]
n139969367694976 -> n139969367694864 n140343105956384 -> n140343105956440
n139969366958488 [label="+"] n140343105228024 [label="+"]
n139969367694976 -> n139969366958488 n140343105956384 -> n140343105228024
n139969367694864 [label=1.0] n140343105956440 [label=1.0]
n139969367694696 [label="*"] n140343105956552 [label="*"]
n139969367694976 [label="/"] n140343105956384 [label="/"]
n139969367694696 -> n139969367694976 n140343105956552 -> n140343105956384
n139969367694976 [label="/"] n140343105956384 [label="/"]
n139969367694696 -> n139969367694976 n140343105956552 -> n140343105956384
n139969367694472 [label="*"] n140343105956664 [label="*"]
n139969367694696 [label="*"] n140343105956552 [label="*"]
n139969367694472 -> n139969367694696 n140343105956664 -> n140343105956552
n139969367694976 [label="/"] n140343105956384 [label="/"]
n139969367694472 -> n139969367694976 n140343105956664 -> n140343105956384
n139969367694920 [label=PropertyAccess] n140343105956328 [label=PropertyAccess]
n139969368120624 [label=force] n140343105889952 [label=force]
n139969367694920 -> n139969368120624 n140343105956328 -> n140343105889952
n139969366898784 [label="Iter(14)"] n140343105184768 [label="Iter(14)"]
n139969367694920 -> n139969366898784 n140343105956328 -> n140343105184768
n139969367691616 [label="*"] n140343106085328 [label="*"]
n139969367694920 -> n139969367691616 n140343105956328 -> n140343106085328
n139969367694024 [label="+"] n140343106086392 [label="+"]
n139969367694920 -> n139969367694024 n140343105956328 -> n140343106086392
n139969367826560 [label="+"] n140343106087288 [label="+"]
n139969367694920 -> n139969367826560 n140343105956328 -> n140343106087288
n139969368120624 [label=force] n140343105889952 [label=force]
n139969367693856 [label="*"] n140343105957000 [label="*"]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969367693856 -> n139969366899848 n140343105957000 -> n140343105185832
n139969367693744 [label=48.0] n140343105957056 [label=48.0]
n139969367693856 -> n139969367693744 n140343105957000 -> n140343105957056
n139969367693744 [label=48.0] n140343105957056 [label=48.0]
n139969367693632 [label="*"] n140343105957336 [label="*"]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969367693632 -> n139969366899848 n140343105957336 -> n140343105185832
n139969367370328 [label="*"] n140343105601432 [label="*"]
n139969367693632 -> n139969367370328 n140343105957336 -> n140343105601432
n139969367370328 [label="*"] n140343105601432 [label="*"]
n139969367693744 [label=48.0] n140343105957056 [label=48.0]
n139969367370328 -> n139969367693744 n140343105601432 -> n140343105957056
n139969367694472 [label="*"] n140343105956664 [label="*"]
n139969367370328 -> n139969367694472 n140343105601432 -> n140343105956664
n139969367693464 [label="-"] n140343105957448 [label="-"]
n139969367694472 [label="*"] n140343105956664 [label="*"]
n139969367693464 -> n139969367694472 n140343105957448 -> n140343105956664
n139969367693520 [label=0.5] n140343105957504 [label=0.5]
n139969367693464 -> n139969367693520 n140343105957448 -> n140343105957504
n139969367693520 [label=0.5] n140343105957504 [label=0.5]
n139969367693352 [label="*"] n140343105957616 [label="*"]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969367693352 -> n139969366899848 n140343105957616 -> n140343105185832
n139969367370440 [label="*"] n140343105597904 [label="*"]
n139969367693352 -> n139969367370440 n140343105957616 -> n140343105597904
n139969367370440 [label="*"] n140343105597904 [label="*"]
n139969367370328 [label="*"] n140343105601432 [label="*"]
n139969367370440 -> n139969367370328 n140343105597904 -> n140343105601432
n139969367693464 [label="-"] n140343105957448 [label="-"]
n139969367370440 -> n139969367693464 n140343105597904 -> n140343105957448
n139969367692904 [label="*"] n140343105892024 [label="*"]
n139969366899848 [label="-"] n140343105185832 [label="-"]
n139969367692904 -> n139969366899848 n140343105892024 -> n140343105185832
n139969366959328 [label="*"] n140343105597624 [label="*"]
n139969367692904 -> n139969366959328 n140343105892024 -> n140343105597624
n139969366959328 [label="*"] n140343105597624 [label="*"]
n139969367370440 [label="*"] n140343105597904 [label="*"]
n139969366959328 -> n139969367370440 n140343105597624 -> n140343105597904
n139969367694976 [label="/"] n140343105956384 [label="/"]
n139969366959328 -> n139969367694976 n140343105597624 -> n140343105956384
n139969367693016 [label="*"] n140343105892304 [label="+"]
n139969366899848 [label="-"] n140343105956328 [label=PropertyAccess]
n139969367693016 -> n139969366899848 n140343105892304 -> n140343105956328
n139969366959328 [label="*"] n140343105892024 [label="*"]
n139969367693016 -> n139969366959328 n140343105892304 -> n140343105892024
n139969367693240 [label="+"] n140343105891968 [label=Assign]
n139969367694920 [label=PropertyAccess] n140343106085720 [label=VectorAccess]
n139969367693240 -> n139969367694920 n140343105891968 -> n140343106085720
n139969367693016 [label="*"] n140343106085272 [label=VectorAccess]
n139969367693240 -> n139969367693016 n140343105891968 -> n140343106085272
n139969367693296 [label=Assign] n140343106086616 [label=VectorAccess]
n139969367692008 [label=VectorAccess] n140343105891968 -> n140343106086616
n139969367693296 -> n139969367692008 n140343106086168 [label=VectorAccess]
n139969367691560 [label=VectorAccess] n140343105891968 -> n140343106086168
n139969367693296 -> n139969367691560 n140343106087512 [label=VectorAccess]
n139969367694192 [label=VectorAccess] n140343105891968 -> n140343106087512
n139969367693296 -> n139969367694192 n140343106087064 [label=VectorAccess]
n139969367692568 [label=VectorAccess] n140343105891968 -> n140343106087064
n139969367693296 -> n139969367692568 n140343106085720 [label=VectorAccess]
n139969367826784 [label=VectorAccess] n140343105956328 [label=PropertyAccess]
n139969367693296 -> n139969367826784 n140343106085720 -> n140343105956328
n139969367695200 [label=VectorAccess] n140343106085272 [label=VectorAccess]
n139969367693296 -> n139969367695200 n140343105892304 [label="+"]
n139969367692008 [label=VectorAccess] n140343106085272 -> n140343105892304
n139969367694920 [label=PropertyAccess] n140343106086616 [label=VectorAccess]
n139969367692008 -> n139969367694920 n140343105956328 [label=PropertyAccess]
n139969367691560 [label=VectorAccess] n140343106086616 -> n140343105956328
n139969367693240 [label="+"] n140343106086168 [label=VectorAccess]
n139969367691560 -> n139969367693240 n140343105892304 [label="+"]
n139969367694192 [label=VectorAccess] n140343106086168 -> n140343105892304
n139969367694920 [label=PropertyAccess] n140343106087512 [label=VectorAccess]
n139969367694192 -> n139969367694920 n140343105956328 [label=PropertyAccess]
n139969367692568 [label=VectorAccess] n140343106087512 -> n140343105956328
n139969367693240 [label="+"] n140343106087064 [label=VectorAccess]
n139969367692568 -> n139969367693240 n140343105892304 [label="+"]
n139969367826784 [label=VectorAccess] n140343106087064 -> n140343105892304
n139969367694920 [label=PropertyAccess] n140343105185216 [label=0]
n139969367826784 -> n139969367694920 n140343105185048 [label=ArrayAccess]
n139969367695200 [label=VectorAccess] n140343105891464 [label=numneighs]
n139969367693240 [label="+"] n140343105185048 -> n140343105891464
n139969367695200 -> n139969367693240 n140343105184768 [label="Iter(14)"]
n139969366899232 [label=0] n140343105185048 -> n140343105184768
n139969366899064 [label=ArrayAccess] n140343105891464 [label=numneighs]
n139969367647064 [label=numneighs] n140343108419712 [label=nlocal]
n139969366899064 -> n139969367647064 n140343105956216 [label=Module]
n139969366898784 [label="Iter(14)"] n140343105954368 [label=Block]
n139969366899064 -> n139969366898784 n140343105956216 -> n140343105954368
n139969367647064 [label=numneighs] n140343105954368 [label=Block]
n139969370135744 [label=nlocal] n140343105955768 [label=ParticleFor]
n139969367650256 [label=Module] n140343105954368 -> n140343105955768
n139969367647512 [label=Block] n140343105955768 [label=ParticleFor]
n139969367650256 -> n139969367647512 n140343105957280 [label=Block]
n139969367647512 [label=Block] n140343105955768 -> n140343105957280
n139969367649808 [label=ParticleFor] n140343108419712 [label=nlocal]
n139969367647512 -> n139969367649808 n140343105955768 -> n140343108419712
n139969367649808 [label=ParticleFor] n140343105957280 [label=Block]
n139969367647736 [label=Block] n140343106088352 [label=Assign]
n139969367649808 -> n139969367647736 n140343105957280 -> n140343106088352
n139969370135744 [label=nlocal] n140343105601152 [label=Assign]
n139969367649808 -> n139969370135744 n140343105957280 -> n140343105601152
n139969367647736 [label=Block] n140343106087624 [label=PropertyAccess]
n139969367827568 [label=Assign] n140343105889896 [label=velocity]
n139969367647736 -> n139969367827568 n140343106087624 -> n140343105889896
n139969367344464 [label=Assign] n140343105954872 [label="Iter(0)"]
n139969367647736 -> n139969367344464 n140343106087624 -> n140343105954872
n139969367826896 [label=PropertyAccess] n140343106088856 [label="*"]
n139969368120568 [label=velocity] n140343106087624 -> n140343106088856
n139969367826896 -> n139969368120568 n140343105599136 [label="+"]
n139969367648800 [label="Iter(0)"] n140343106087624 -> n140343105599136
n139969367826896 -> n139969367648800 n140343105600368 [label="+"]
n139969367828072 [label="*"] n140343106087624 -> n140343105600368
n139969367826896 -> n139969367828072 n140343105889896 [label=velocity]
n139969367829808 [label="+"] n140343105954872 [label="Iter(0)"]
n139969367826896 -> n139969367829808 n140343106088856 [label="*"]
n139969367343680 [label="+"] n140343105954872 [label="Iter(0)"]
n139969367826896 -> n139969367343680 n140343106088856 -> n140343105954872
n139969368120568 [label=velocity] n140343105597792 [label=3]
n139969367648800 [label="Iter(0)"] n140343106088856 -> n140343105597792
n139969367828072 [label="*"] n140343105597792 [label=3]
n139969367648800 [label="Iter(0)"] n140343105599136 [label="+"]
n139969367828072 -> n139969367648800 n140343105598632 [label="*"]
n139969367828464 [label=3] n140343105599136 -> n140343105598632
n139969367828072 -> n139969367828464 n140343105599192 [label=1]
n139969367828464 [label=3] n140343105599136 -> n140343105599192
n139969367829808 [label="+"] n140343105598632 [label="*"]
n139969367829304 [label="*"] n140343105954872 [label="Iter(0)"]
n139969367829808 -> n139969367829304 n140343105598632 -> n140343105954872
n139969367829864 [label=1] n140343105599024 [label=3]
n139969367829808 -> n139969367829864 n140343105598632 -> n140343105599024
n139969367829304 [label="*"] n140343105599024 [label=3]
n139969367648800 [label="Iter(0)"] n140343105599192 [label=1]
n139969367829304 -> n139969367648800 n140343105600368 [label="+"]
n139969367829696 [label=3] n140343105599864 [label="*"]
n139969367829304 -> n139969367829696 n140343105600368 -> n140343105599864
n139969367829696 [label=3] n140343105600424 [label=2]
n139969367829864 [label=1] n140343105600368 -> n140343105600424
n139969367343680 [label="+"] n140343105599864 [label="*"]
n139969367343176 [label="*"] n140343105954872 [label="Iter(0)"]
n139969367343680 -> n139969367343176 n140343105599864 -> n140343105954872
n139969367343736 [label=2] n140343105600256 [label=3]
n139969367343680 -> n139969367343736 n140343105599864 -> n140343105600256
n139969367343176 [label="*"] n140343105600256 [label=3]
n139969367648800 [label="Iter(0)"] n140343105600424 [label=2]
n139969367343176 -> n139969367648800 n140343106087736 [label=PropertyAccess]
n139969367343568 [label=3] n140343105889952 [label=force]
n139969367343176 -> n139969367343568 n140343106087736 -> n140343105889952
n139969367343568 [label=3] n140343105954872 [label="Iter(0)"]
n139969367343736 [label=2] n140343106087736 -> n140343105954872
n139969367827008 [label=PropertyAccess] n140343106088912 [label="*"]
n139969368120624 [label=force] n140343106087736 -> n140343106088912
n139969367827008 -> n139969368120624 n140343105598856 [label="+"]
n139969367648800 [label="Iter(0)"] n140343106087736 -> n140343105598856
n139969367827008 -> n139969367648800 n140343105600088 [label="+"]
n139969367828128 [label="*"] n140343106087736 -> n140343105600088
n139969367827008 -> n139969367828128 n140343106088912 [label="*"]
n139969367829528 [label="+"] n140343105954872 [label="Iter(0)"]
n139969367827008 -> n139969367829528 n140343106088912 -> n140343105954872
n139969367343400 [label="+"] n140343105597512 [label=3]
n139969367827008 -> n139969367343400 n140343106088912 -> n140343105597512
n139969367828128 [label="*"] n140343105597512 [label=3]
n139969367648800 [label="Iter(0)"] n140343105598856 [label="+"]
n139969367828128 -> n139969367648800 n140343105598688 [label="*"]
n139969367828184 [label=3] n140343105598856 -> n140343105598688
n139969367828128 -> n139969367828184 n140343105598912 [label=1]
n139969367828184 [label=3] n140343105598856 -> n140343105598912
n139969367829528 [label="+"] n140343105598688 [label="*"]
n139969367829360 [label="*"] n140343105954872 [label="Iter(0)"]
n139969367829528 -> n139969367829360 n140343105598688 -> n140343105954872
n139969367829584 [label=1] n140343105598744 [label=3]
n139969367829528 -> n139969367829584 n140343105598688 -> n140343105598744
n139969367829360 [label="*"] n140343105598744 [label=3]
n139969367648800 [label="Iter(0)"] n140343105598912 [label=1]
n139969367829360 -> n139969367648800 n140343105600088 [label="+"]
n139969367829416 [label=3] n140343105599920 [label="*"]
n139969367829360 -> n139969367829416 n140343105600088 -> n140343105599920
n139969367829416 [label=3] n140343105600144 [label=2]
n139969367829584 [label=1] n140343105600088 -> n140343105600144
n139969367343400 [label="+"] n140343105599920 [label="*"]
n139969367343232 [label="*"] n140343105954872 [label="Iter(0)"]
n139969367343400 -> n139969367343232 n140343105599920 -> n140343105954872
n139969367343456 [label=2] n140343105599976 [label=3]
n139969367343400 -> n139969367343456 n140343105599920 -> n140343105599976
n139969367343232 [label="*"] n140343105599976 [label=3]
n139969367648800 [label="Iter(0)"] n140343105600144 [label=2]
n139969367343232 -> n139969367648800 n140343106087848 [label="*"]
n139969367343288 [label=3] n140343106087904 [label=0.005]
n139969367343232 -> n139969367343288 n140343106087848 -> n140343106087904
n139969367343288 [label=3] n140343106087736 [label=PropertyAccess]
n139969367343456 [label=2] n140343106087848 -> n140343106087736
n139969367827120 [label="*"] n140343106087904 [label=0.005]
n139969367827176 [label=0.005] n140343106088016 [label=PropertyAccess]
n139969367827120 -> n139969367827176 n140343105889784 [label=mass]
n139969367827008 [label=PropertyAccess] n140343106088016 -> n140343105889784
n139969367827120 -> n139969367827008 n140343105954872 [label="Iter(0)"]
n139969367827176 [label=0.005] n140343106088016 -> n140343105954872
n139969367827288 [label=PropertyAccess] n140343105889784 [label=mass]
n139969368120456 [label=mass] n140343106088128 [label="/"]
n139969367827288 -> n139969368120456 n140343106087848 [label="*"]
n139969367648800 [label="Iter(0)"] n140343106088128 -> n140343106087848
n139969367827288 -> n139969367648800 n140343106088016 [label=PropertyAccess]
n139969368120456 [label=mass] n140343106088128 -> n140343106088016
n139969367827344 [label="/"] n140343106088240 [label="+"]
n139969367827120 [label="*"] n140343106087624 [label=PropertyAccess]
n139969367827344 -> n139969367827120 n140343106088240 -> n140343106087624
n139969367827288 [label=PropertyAccess] n140343106088128 [label="/"]
n139969367827344 -> n139969367827288 n140343106088240 -> n140343106088128
n139969367827456 [label="+"] n140343106088464 [label="*"]
n139969367826896 [label=PropertyAccess] n140343105954872 [label="Iter(0)"]
n139969367827456 -> n139969367826896 n140343106088464 -> n140343105954872
n139969367827344 [label="/"] n140343106088520 [label=3]
n139969367827456 -> n139969367827344 n140343106088464 -> n140343106088520
n139969367827680 [label="*"] n140343106088520 [label=3]
n139969367648800 [label="Iter(0)"] n140343105598240 [label="*"]
n139969367827680 -> n139969367648800 n140343105954872 [label="Iter(0)"]
n139969367827736 [label=3] n140343105598240 -> n140343105954872
n139969367827680 -> n139969367827736 n140343105598296 [label=3]
n139969367827736 [label=3] n140343105598240 -> n140343105598296
n139969367828912 [label="*"] n140343105598296 [label=3]
n139969367648800 [label="Iter(0)"] n140343105598408 [label="+"]
n139969367828912 -> n139969367648800 n140343105598240 [label="*"]
n139969367828968 [label=3] n140343105598408 -> n140343105598240
n139969367828912 -> n139969367828968 n140343105598464 [label=1]
n139969367828968 [label=3] n140343105598408 -> n140343105598464
n139969367829080 [label="+"] n140343105598464 [label=1]
n139969367828912 [label="*"] n140343105599472 [label="*"]
n139969367829080 -> n139969367828912 n140343105954872 [label="Iter(0)"]
n139969367829136 [label=1] n140343105599472 -> n140343105954872
n139969367829080 -> n139969367829136 n140343105599528 [label=3]
n139969367829136 [label=1] n140343105599472 -> n140343105599528
n139969367830144 [label="*"] n140343105599528 [label=3]
n139969367648800 [label="Iter(0)"] n140343105599640 [label="+"]
n139969367830144 -> n139969367648800 n140343105599472 [label="*"]
n139969367830200 [label=3] n140343105599640 -> n140343105599472
n139969367830144 -> n139969367830200 n140343105599696 [label=2]
n139969367830200 [label=3] n140343105599640 -> n140343105599696
n139969367830312 [label="+"] n140343105599696 [label=2]
n139969367830144 [label="*"] n140343106088352 [label=Assign]
n139969367830312 -> n139969367830144 n140343105598128 [label=VectorAccess]
n139969367830368 [label=2] n140343106088352 -> n140343105598128
n139969367830312 -> n139969367830368 n140343106088800 [label=VectorAccess]
n139969367830368 [label=2] n140343106088352 -> n140343106088800
n139969367827568 [label=Assign] n140343105599360 [label=VectorAccess]
n139969367828800 [label=VectorAccess] n140343106088352 -> n140343105599360
n139969367827568 -> n139969367828800 n140343105598576 [label=VectorAccess]
n139969367828016 [label=VectorAccess] n140343106088352 -> n140343105598576
n139969367827568 -> n139969367828016 n140343105600592 [label=VectorAccess]
n139969367830032 [label=VectorAccess] n140343106088352 -> n140343105600592
n139969367827568 -> n139969367830032 n140343105599808 [label=VectorAccess]
n139969367829248 [label=VectorAccess] n140343106088352 -> n140343105599808
n139969367827568 -> n139969367829248 n140343105598128 [label=VectorAccess]
n139969367343904 [label=VectorAccess] n140343106087624 [label=PropertyAccess]
n139969367827568 -> n139969367343904 n140343105598128 -> n140343106087624
n139969367830480 [label=VectorAccess] n140343106088800 [label=VectorAccess]
n139969367827568 -> n139969367830480 n140343106088240 [label="+"]
n139969367828800 [label=VectorAccess] n140343106088800 -> n140343106088240
n139969367826896 [label=PropertyAccess] n140343105599360 [label=VectorAccess]
n139969367828800 -> n139969367826896 n140343106087624 [label=PropertyAccess]
n139969367828016 [label=VectorAccess] n140343105599360 -> n140343106087624
n139969367827456 [label="+"] n140343105598576 [label=VectorAccess]
n139969367828016 -> n139969367827456 n140343106088240 [label="+"]
n139969367830032 [label=VectorAccess] n140343105598576 -> n140343106088240
n139969367826896 [label=PropertyAccess] n140343105600592 [label=VectorAccess]
n139969367830032 -> n139969367826896 n140343106087624 [label=PropertyAccess]
n139969367829248 [label=VectorAccess] n140343105600592 -> n140343106087624
n139969367827456 [label="+"] n140343105599808 [label=VectorAccess]
n139969367829248 -> n139969367827456 n140343106088240 [label="+"]
n139969367343904 [label=VectorAccess] n140343105599808 -> n140343106088240
n139969367826896 [label=PropertyAccess] n140343105600648 [label=PropertyAccess]
n139969367343904 -> n139969367826896 n140343105889840 [label=position]
n139969367830480 [label=VectorAccess] n140343105600648 -> n140343105889840
n139969367827456 [label="+"] n140343105954872 [label="Iter(0)"]
n139969367830480 -> n139969367827456 n140343105600648 -> n140343105954872
n139969367343960 [label=PropertyAccess] n140343105630728 [label="*"]
n139969368120512 [label=position] n140343105600648 -> n140343105630728
n139969367343960 -> n139969368120512 n140343105632128 [label="+"]
n139969367648800 [label="Iter(0)"] n140343105600648 -> n140343105632128
n139969367343960 -> n139969367648800 n140343105633360 [label="+"]
n139969367345304 [label="*"] n140343105600648 -> n140343105633360
n139969367343960 -> n139969367345304 n140343105630728 [label="*"]
n139969367346704 [label="+"] n140343105954872 [label="Iter(0)"]
n139969367343960 -> n139969367346704 n140343105630728 -> n140343105954872
n139969367368480 [label="+"] n140343105630784 [label=3]
n139969367343960 -> n139969367368480 n140343105630728 -> n140343105630784
n139969367345304 [label="*"] n140343105630784 [label=3]
n139969367648800 [label="Iter(0)"] n140343105632128 [label="+"]
n139969367345304 -> n139969367648800 n140343105631960 [label="*"]
n139969367345360 [label=3] n140343105632128 -> n140343105631960
n139969367345304 -> n139969367345360 n140343105632184 [label=1]
n139969367345360 [label=3] n140343105632128 -> n140343105632184
n139969367346704 [label="+"] n140343105631960 [label="*"]
n139969367346536 [label="*"] n140343105954872 [label="Iter(0)"]
n139969367346704 -> n139969367346536 n140343105631960 -> n140343105954872
n139969367346760 [label=1] n140343105632016 [label=3]
n139969367346704 -> n139969367346760 n140343105631960 -> n140343105632016
n139969367346536 [label="*"] n140343105632016 [label=3]
n139969367648800 [label="Iter(0)"] n140343105632184 [label=1]
n139969367346536 -> n139969367648800 n140343105633360 [label="+"]
n139969367346592 [label=3] n140343105633192 [label="*"]
n139969367346536 -> n139969367346592 n140343105633360 -> n140343105633192
n139969367346592 [label=3] n140343105633416 [label=2]
n139969367346760 [label=1] n140343105633360 -> n140343105633416
n139969367368480 [label="+"] n140343105633192 [label="*"]
n139969367368312 [label="*"] n140343105954872 [label="Iter(0)"]
n139969367368480 -> n139969367368312 n140343105633192 -> n140343105954872
n139969367368536 [label=2] n140343105633248 [label=3]
n139969367368480 -> n139969367368536 n140343105633192 -> n140343105633248
n139969367368312 [label="*"] n140343105633248 [label=3]
n139969367648800 [label="Iter(0)"] n140343105633416 [label=2]
n139969367368312 -> n139969367648800 n140343105600760 [label=PropertyAccess]
n139969367368368 [label=3] n140343105889896 [label=velocity]
n139969367368312 -> n139969367368368 n140343105600760 -> n140343105889896
n139969367368368 [label=3] n140343105954872 [label="Iter(0)"]
n139969367368536 [label=2] n140343105600760 -> n140343105954872
n139969367344072 [label=PropertyAccess] n140343105630392 [label="*"]
n139969368120568 [label=velocity] n140343105600760 -> n140343105630392
n139969367344072 -> n139969368120568 n140343105631792 [label="+"]
n139969367648800 [label="Iter(0)"] n140343105600760 -> n140343105631792
n139969367344072 -> n139969367648800 n140343105633024 [label="+"]
n139969367344968 [label="*"] n140343105600760 -> n140343105633024
n139969367344072 -> n139969367344968 n140343105630392 [label="*"]
n139969367346368 [label="+"] n140343105954872 [label="Iter(0)"]
n139969367344072 -> n139969367346368 n140343105630392 -> n140343105954872
n139969367368144 [label="+"] n140343105630448 [label=3]
n139969367344072 -> n139969367368144 n140343105630392 -> n140343105630448
n139969367344968 [label="*"] n140343105630448 [label=3]
n139969367648800 [label="Iter(0)"] n140343105631792 [label="+"]
n139969367344968 -> n139969367648800 n140343105631624 [label="*"]
n139969367345024 [label=3] n140343105631792 -> n140343105631624
n139969367344968 -> n139969367345024 n140343105631848 [label=1]
n139969367345024 [label=3] n140343105631792 -> n140343105631848
n139969367346368 [label="+"] n140343105631624 [label="*"]
n139969367346200 [label="*"] n140343105954872 [label="Iter(0)"]
n139969367346368 -> n139969367346200 n140343105631624 -> n140343105954872
n139969367346424 [label=1] n140343105631680 [label=3]
n139969367346368 -> n139969367346424 n140343105631624 -> n140343105631680
n139969367346200 [label="*"] n140343105631680 [label=3]
n139969367648800 [label="Iter(0)"] n140343105631848 [label=1]
n139969367346200 -> n139969367648800 n140343105633024 [label="+"]
n139969367346256 [label=3] n140343105632856 [label="*"]
n139969367346200 -> n139969367346256 n140343105633024 -> n140343105632856
n139969367346256 [label=3] n140343105633080 [label=2]
n139969367346424 [label=1] n140343105633024 -> n140343105633080
n139969367368144 [label="+"] n140343105632856 [label="*"]
n139969367367976 [label="*"] n140343105954872 [label="Iter(0)"]
n139969367368144 -> n139969367367976 n140343105632856 -> n140343105954872
n139969367368200 [label=2] n140343105632912 [label=3]
n139969367368144 -> n139969367368200 n140343105632856 -> n140343105632912
n139969367367976 [label="*"] n140343105632912 [label=3]
n139969367648800 [label="Iter(0)"] n140343105633080 [label=2]
n139969367367976 -> n139969367648800 n140343105600872 [label="*"]
n139969367368032 [label=3] n140343105600928 [label=0.005]
n139969367367976 -> n139969367368032 n140343105600872 -> n140343105600928
n139969367368032 [label=3] n140343105600760 [label=PropertyAccess]
n139969367368200 [label=2] n140343105600872 -> n140343105600760
n139969367344184 [label="*"] n140343105600928 [label=0.005]
n139969367344240 [label=0.005] n140343105601040 [label="+"]
n139969367344184 -> n139969367344240 n140343105600648 [label=PropertyAccess]
n139969367344072 [label=PropertyAccess] n140343105601040 -> n140343105600648
n139969367344184 -> n139969367344072 n140343105600872 [label="*"]
n139969367344240 [label=0.005] n140343105601040 -> n140343105600872
n139969367344352 [label="+"] n140343105601264 [label="*"]
n139969367343960 [label=PropertyAccess] n140343105954872 [label="Iter(0)"]
n139969367344352 -> n139969367343960 n140343105601264 -> n140343105954872
n139969367344184 [label="*"] n140343105601320 [label=3]
n139969367344352 -> n139969367344184 n140343105601264 -> n140343105601320
n139969367344576 [label="*"] n140343105601320 [label=3]
n139969367648800 [label="Iter(0)"] n140343105631232 [label="*"]
n139969367344576 -> n139969367648800 n140343105954872 [label="Iter(0)"]
n139969367344632 [label=3] n140343105631232 -> n140343105954872
n139969367344576 -> n139969367344632 n140343105631288 [label=3]
n139969367344632 [label=3] n140343105631232 -> n140343105631288
n139969367345808 [label="*"] n140343105631288 [label=3]
n139969367648800 [label="Iter(0)"] n140343105631400 [label="+"]
n139969367345808 -> n139969367648800 n140343105631232 [label="*"]
n139969367345864 [label=3] n140343105631400 -> n140343105631232
n139969367345808 -> n139969367345864 n140343105631456 [label=1]
n139969367345864 [label=3] n140343105631400 -> n140343105631456
n139969367345976 [label="+"] n140343105631456 [label=1]
n139969367345808 [label="*"] n140343105632464 [label="*"]
n139969367345976 -> n139969367345808 n140343105954872 [label="Iter(0)"]
n139969367346032 [label=1] n140343105632464 -> n140343105954872
n139969367345976 -> n139969367346032 n140343105632520 [label=3]
n139969367346032 [label=1] n140343105632464 -> n140343105632520
n139969367347040 [label="*"] n140343105632520 [label=3]
n139969367648800 [label="Iter(0)"] n140343105632632 [label="+"]
n139969367347040 -> n139969367648800 n140343105632464 [label="*"]
n139969367347096 [label=3] n140343105632632 -> n140343105632464
n139969367347040 -> n139969367347096 n140343105632688 [label=2]
n139969367347096 [label=3] n140343105632632 -> n140343105632688
n139969367367752 [label="+"] n140343105632688 [label=2]
n139969367347040 [label="*"] n140343105601152 [label=Assign]
n139969367367752 -> n139969367347040 n140343105631120 [label=VectorAccess]
n139969367367808 [label=2] n140343105601152 -> n140343105631120
n139969367367752 -> n139969367367808 n140343105630336 [label=VectorAccess]
n139969367367808 [label=2] n140343105601152 -> n140343105630336
n139969367344464 [label=Assign] n140343105632352 [label=VectorAccess]
n139969367345696 [label=VectorAccess] n140343105601152 -> n140343105632352
n139969367344464 -> n139969367345696 n140343105631568 [label=VectorAccess]
n139969367344912 [label=VectorAccess] n140343105601152 -> n140343105631568
n139969367344464 -> n139969367344912 n140343105633584 [label=VectorAccess]
n139969367346928 [label=VectorAccess] n140343105601152 -> n140343105633584
n139969367344464 -> n139969367346928 n140343105632800 [label=VectorAccess]
n139969367346144 [label=VectorAccess] n140343105601152 -> n140343105632800
n139969367344464 -> n139969367346144 n140343105631120 [label=VectorAccess]
n139969367368704 [label=VectorAccess] n140343105600648 [label=PropertyAccess]
n139969367344464 -> n139969367368704 n140343105631120 -> n140343105600648
n139969367367920 [label=VectorAccess] n140343105630336 [label=VectorAccess]
n139969367344464 -> n139969367367920 n140343105601040 [label="+"]
n139969367345696 [label=VectorAccess] n140343105630336 -> n140343105601040
n139969367343960 [label=PropertyAccess] n140343105632352 [label=VectorAccess]
n139969367345696 -> n139969367343960 n140343105600648 [label=PropertyAccess]
n139969367344912 [label=VectorAccess] n140343105632352 -> n140343105600648
n139969367344352 [label="+"] n140343105631568 [label=VectorAccess]
n139969367344912 -> n139969367344352 n140343105601040 [label="+"]
n139969367346928 [label=VectorAccess] n140343105631568 -> n140343105601040
n139969367343960 [label=PropertyAccess] n140343105633584 [label=VectorAccess]
n139969367346928 -> n139969367343960 n140343105600648 [label=PropertyAccess]
n139969367346144 [label=VectorAccess] n140343105633584 -> n140343105600648
n139969367344352 [label="+"] n140343105632800 [label=VectorAccess]
n139969367346144 -> n139969367344352 n140343105601040 [label="+"]
n139969367368704 [label=VectorAccess] n140343105632800 -> n140343105601040
n139969367343960 [label=PropertyAccess]
n139969367368704 -> n139969367343960
n139969367367920 [label=VectorAccess]
n139969367344352 [label="+"]
n139969367367920 -> n139969367344352
} }
No preview for this file type
...@@ -31,5 +31,6 @@ psim.periodic(2.8) ...@@ -31,5 +31,6 @@ psim.periodic(2.8)
psim.vtk_output("output/test") psim.vtk_output("output/test")
psim.compute(lj, cutoff_radius, {'sigma6': sigma6, 'epsilon': epsilon}) psim.compute(lj, cutoff_radius, {'sigma6': sigma6, 'epsilon': epsilon})
psim.compute(euler, symbols={'dt': dt}) psim.compute(euler, symbols={'dt': dt})
psim.target(pairs.target_gpu()) psim.target(pairs.target_cpu())
#psim.target(pairs.target_gpu())
psim.generate() psim.generate()
...@@ -671,8 +671,8 @@ int main() { ...@@ -671,8 +671,8 @@ int main() {
int *numneighs = (int *) malloc((sizeof(int) * particle_capacity)); int *numneighs = (int *) malloc((sizeof(int) * particle_capacity));
int *pbc_map = (int *) malloc((sizeof(int) * pbc_capacity)); int *pbc_map = (int *) malloc((sizeof(int) * pbc_capacity));
int *pbc_mult = (int *) malloc((sizeof(int) * (pbc_capacity * 3))); int *pbc_mult = (int *) malloc((sizeof(int) * (pbc_capacity * 3)));
unsigned long long int prop_hflags[1] = {18446744073709551615}; unsigned long long int prop_hflags[1] = {18446744073709551615ULL};
unsigned long long int prop_dflags[1] = {0}; unsigned long long int prop_dflags[1] = {0ULL};
double *mass = (double *) malloc((sizeof(double) * (particle_capacity + pbc_capacity))); double *mass = (double *) malloc((sizeof(double) * (particle_capacity + pbc_capacity)));
ps->addProperty(Property(0, "mass", mass, Prop_Float)); ps->addProperty(Property(0, "mass", mass, Prop_Float));
double *position = (double *) malloc((sizeof(double) * ((particle_capacity + pbc_capacity) * 3))); double *position = (double *) malloc((sizeof(double) * ((particle_capacity + pbc_capacity) * 3)));
...@@ -871,28 +871,28 @@ int main() { ...@@ -871,28 +871,28 @@ int main() {
prop_hflags[0] = e531; prop_hflags[0] = e531;
module_0(neighborlist_capacity, nlocal, neighborlists, numneighs, position, force); module_0(neighborlist_capacity, nlocal, neighborlists, numneighs, position, force);
const unsigned long long int a131 = prop_dflags[0]; const unsigned long long int a131 = prop_dflags[0];
const unsigned long long int e532 = a131 & 1; const unsigned long long int e532 = a131 & 8;
const bool e533 = e532 == 0; const bool e533 = e532 == 0;
if(e533) { if(e533) {
pairs::copy_to_device(mass) pairs::copy_to_device(force)
} }
const unsigned long long int a132 = prop_dflags[0]; const unsigned long long int a132 = prop_dflags[0];
const unsigned long long int e534 = a132 & 8; const unsigned long long int e534 = a132 & 2;
const bool e535 = e534 == 0; const bool e535 = e534 == 0;
if(e535) { if(e535) {
pairs::copy_to_device(force) pairs::copy_to_device(position)
} }
const unsigned long long int a133 = prop_dflags[0]; const unsigned long long int a133 = prop_dflags[0];
const unsigned long long int e536 = a133 & 2; const unsigned long long int e536 = a133 & 4;
const bool e537 = e536 == 0; const bool e537 = e536 == 0;
if(e537) { if(e537) {
pairs::copy_to_device(position) pairs::copy_to_device(velocity)
} }
const unsigned long long int a134 = prop_dflags[0]; const unsigned long long int a134 = prop_dflags[0];
const unsigned long long int e538 = a134 & 4; const unsigned long long int e538 = a134 & 1;
const bool e539 = e538 == 0; const bool e539 = e538 == 0;
if(e539) { if(e539) {
pairs::copy_to_device(velocity) pairs::copy_to_device(mass)
} }
const unsigned long long int a136 = prop_dflags[0]; const unsigned long long int a136 = prop_dflags[0];
const unsigned long long int e540 = a136 | 15; const unsigned long long int e540 = a136 | 15;
......
...@@ -7,6 +7,7 @@ def readme(): ...@@ -7,6 +7,7 @@ def readme():
modules = [ modules = [
'analysis',
'code_gen', 'code_gen',
'coupling', 'coupling',
'graph', 'graph',
......
from pairs.analysis.bin_ops import SetBinOpTerminals, SetUsedBinOps
from pairs.analysis.blocks import SetBlockVariants, SetParentBlock
from pairs.analysis.modules import FetchModulesReferences
class Analysis:
def __init__(self, ast):
self._ast = ast
self._set_used_bin_ops = SetUsedBinOps(ast)
self._set_bin_op_terminals = SetBinOpTerminals(ast)
self._set_block_variants = SetBlockVariants(ast)
self._set_parent_block = SetParentBlock(ast)
self._fetch_modules_references = FetchModulesReferences(ast)
def set_used_bin_ops(self):
self._set_used_bin_ops.visit()
def set_bin_op_terminals(self):
self._set_bin_op_terminals.visit()
def set_block_variants(self):
self._set_block_variants.mutate()
def set_parent_block(self):
self._set_parent_block.visit()
def fetch_modules_references(self):
self._fetch_modules_references.visit()
from pairs.ir.visitor import Visitor from pairs.ir.visitor import Visitor
class SetBinOpTerminals(Visitor):
def __init__(self, ast):
super().__init__(ast)
self.elems = []
def push_terminal(self, ast_node):
for e in self.elems:
e.add_terminal(ast_node.name())
def visit_BinOp(self, ast_node):
self.elems.append(ast_node)
self.visit_children(ast_node)
self.elems.pop()
def visit_PropertyAccess(self, ast_node):
self.elems.append(ast_node)
self.visit_children(ast_node)
self.elems.pop()
def visit_Array(self, ast_node):
self.push_terminal(ast_node)
# TODO: Array should be enough
def visit_ArrayND(self, ast_node):
self.push_terminal(ast_node)
def visit_Iter(self, ast_node):
self.push_terminal(ast_node)
def visit_Property(self, ast_node):
self.push_terminal(ast_node)
def visit_Var(self, ast_node):
self.push_terminal(ast_node)
class SetUsedBinOps(Visitor): class SetUsedBinOps(Visitor):
def __init__(self, ast): def __init__(self, ast):
super().__init__(ast) super().__init__(ast)
...@@ -16,7 +52,3 @@ class SetUsedBinOps(Visitor): ...@@ -16,7 +52,3 @@ class SetUsedBinOps(Visitor):
def visit_PropertyAccess(self, ast_node): def visit_PropertyAccess(self, ast_node):
ast_node.decl.used = True ast_node.decl.used = True
self.visit_children(ast_node) self.visit_children(ast_node)
def set_used_bin_ops(ast):
set_used_binops = SetUsedBinOps(ast)
set_used_binops.visit()
from pairs.ir.bin_op import BinOp
from pairs.ir.loops import For, While from pairs.ir.loops import For, While
from pairs.ir.mutator import Mutator from pairs.ir.mutator import Mutator
from pairs.ir.properties import PropertyAccess
from pairs.ir.visitor import Visitor from pairs.ir.visitor import Visitor
...@@ -121,99 +119,3 @@ class SetParentBlock(Visitor): ...@@ -121,99 +119,3 @@ class SetParentBlock(Visitor):
assert isinstance(ast_node, (For, While)), "Node must be a loop!" assert isinstance(ast_node, (For, While)), "Node must be a loop!"
loop_id = id(ast_node) loop_id = id(ast_node)
return self.parents[loop_id] if loop_id in self.parents else None return self.parents[loop_id] if loop_id in self.parents else None
class SetBinOpTerminals(Visitor):
def __init__(self, ast):
super().__init__(ast)
self.elems = []
def push_terminal(self, ast_node):
for e in self.elems:
e.add_terminal(ast_node.name())
def visit_BinOp(self, ast_node):
self.elems.append(ast_node)
self.visit_children(ast_node)
self.elems.pop()
def visit_PropertyAccess(self, ast_node):
self.elems.append(ast_node)
self.visit_children(ast_node)
self.elems.pop()
def visit_Array(self, ast_node):
self.push_terminal(ast_node)
# TODO: Array should be enough
def visit_ArrayND(self, ast_node):
self.push_terminal(ast_node)
def visit_Iter(self, ast_node):
self.push_terminal(ast_node)
def visit_Property(self, ast_node):
self.push_terminal(ast_node)
def visit_Var(self, ast_node):
self.push_terminal(ast_node)
class LICM(Mutator):
def __init__(self, ast):
super().__init__(ast)
self.lifts = {}
self.loops = []
def mutate_For(self, ast_node):
self.lifts[id(ast_node)] = []
self.loops.append(ast_node)
ast_node.iterator = self.mutate(ast_node.iterator)
ast_node.block = self.mutate(ast_node.block)
self.loops.pop()
return ast_node
def mutate_While(self, ast_node):
self.lifts[id(ast_node)] = []
self.loops.append(ast_node)
ast_node.cond = self.mutate(ast_node.cond)
ast_node.block = self.mutate(ast_node.block)
self.loops.pop()
return ast_node
def mutate_Decl(self, ast_node):
if self.loops and isinstance(ast_node.elem, (BinOp, PropertyAccess)):
last_loop = self.loops[-1]
#print(f"variants = {last_loop.block.variants}, terminals = {ast_node.elem.terminals}")
if not last_loop.block.variants.intersection(ast_node.elem.terminals):
#print(f'lifting {ast_node.elem.id()}')
self.lifts[id(last_loop)].append(ast_node)
return None
return ast_node
def mutate_Block(self, ast_node):
new_stmts = []
stmts = [self.mutate(s) for s in ast_node.stmts]
for s in stmts:
if s is not None:
s_id = id(s)
if isinstance(s, (For, While)) and s_id in self.lifts:
new_stmts = new_stmts + self.lifts[s_id]
new_stmts.append(s)
ast_node.stmts = new_stmts
return ast_node
def move_loop_invariant_code(ast):
set_parent_block = SetParentBlock(ast)
set_parent_block.visit()
set_block_variants = SetBlockVariants(ast)
set_block_variants.mutate()
set_bin_op_terminals = SetBinOpTerminals(ast)
set_bin_op_terminals.visit()
licm = LICM(ast)
licm.mutate()
from pairs.ir.visitor import Visitor
class FetchModulesReferences(Visitor):
def __init__(self, ast):
super().__init__(ast)
self.module_stack = []
self.writing = False
def visit_Assign(self, ast_node):
self.writing = True
for c in ast_node.destinations():
self.visit(c)
self.writing = False
for c in ast_node.sources():
self.visit(c)
def visit_Module(self, ast_node):
self.module_stack.append(ast_node)
self.visit_children(ast_node)
self.module_stack.pop()
def visit_Array(self, ast_node):
for m in self.module_stack:
m.add_array(ast_node, self.writing)
def visit_Property(self, ast_node):
for m in self.module_stack:
m.add_property(ast_node, self.writing)
def visit_Var(self, ast_node):
for m in self.module_stack:
m.add_variable(ast_node, self.writing)
...@@ -20,15 +20,7 @@ from pairs.sim.read_from_file import ReadFromFile ...@@ -20,15 +20,7 @@ from pairs.sim.read_from_file import ReadFromFile
from pairs.sim.timestep import Timestep from pairs.sim.timestep import Timestep
from pairs.sim.variables import VariablesDecl from pairs.sim.variables import VariablesDecl
from pairs.sim.vtk import VTKWrite from pairs.sim.vtk import VTKWrite
from pairs.transformations.add_device_copies import AddDeviceCopies from pairs.transformations import Transformations
from pairs.transformations.prioritize_scalar_ops import prioritize_scalar_ops
from pairs.transformations.set_used_bin_ops import set_used_bin_ops
from pairs.transformations.simplify import simplify_expressions
from pairs.transformations.LICM import move_loop_invariant_code
from pairs.transformations.lower import lower_everything
from pairs.transformations.merge_adjacent_blocks import merge_adjacent_blocks
from pairs.transformations.modules import modularize
from pairs.transformations.replace_symbols import replace_symbols
class Simulation: class Simulation:
...@@ -248,22 +240,10 @@ class Simulation: ...@@ -248,22 +240,10 @@ class Simulation:
]) ])
program = Module(self, name='main', block=Block.merge_blocks(decls, body)) program = Module(self, name='main', block=Block.merge_blocks(decls, body))
if self._target.is_gpu():
add_copies = AddDeviceCopies(program) # Apply transformations
transformations = Transformations(program, self._target)
# Transformations transformations.apply_all()
lower_everything(program)
replace_symbols(program)
merge_adjacent_blocks(program)
prioritize_scalar_ops(program)
simplify_expressions(program)
move_loop_invariant_code(program)
set_used_bin_ops(program)
modularize(program)
merge_adjacent_blocks(program)
if self._target.is_gpu():
add_copies.mutate()
# For this part on, all bin ops are generated without usage verification # For this part on, all bin ops are generated without usage verification
self.check_decl_usage = False self.check_decl_usage = False
......
from pairs.analysis import Analysis
from pairs.transformations.blocks import MergeAdjacentBlocks
from pairs.transformations.devices import AddDeviceCopies
from pairs.transformations.expressions import ReplaceSymbols, SimplifyExpressions, PrioritizeScalarOps
from pairs.transformations.loops import LICM
from pairs.transformations.lower import Lower
from pairs.transformations.modules import DereferenceWriteVariables, AddResizeLogic, ReplaceModulesByCalls
class Transformations:
def __init__(self, ast, target):
self._ast = ast
self._target = target
self._analysis = Analysis(ast)
self._merge_adjacent_blocks = MergeAdjacentBlocks(ast)
self._replace_symbols = ReplaceSymbols(ast)
self._simplify_expressions = SimplifyExpressions(ast)
self._prioritize_scalar_ops = PrioritizeScalarOps(ast)
self._licm = LICM(ast)
self._dereference_write_variables = DereferenceWriteVariables(ast)
self._add_resize_logic = AddResizeLogic(ast)
self._replace_modules_by_calls = ReplaceModulesByCalls(ast)
if target.is_gpu():
self._add_device_copies = AddDeviceCopies(ast)
def lower_everything(self):
nlowered = 1
while nlowered > 0:
lower = Lower(self._ast)
lower.mutate()
nlowered = lower.lowered_nodes
self._merge_adjacent_blocks.mutate()
def optimize_expressions(self):
self._replace_symbols.mutate()
self._simplify_expressions.mutate()
self._prioritize_scalar_ops.mutate()
self._simplify_expressions.mutate()
self._analysis.set_used_bin_ops()
def licm(self):
self._analysis.set_parent_block()
self._analysis.set_block_variants()
self._analysis.set_bin_op_terminals()
self._licm.mutate()
def modularize(self):
self._add_resize_logic.mutate()
self._analysis.fetch_modules_references()
self._dereference_write_variables.mutate()
self._replace_modules_by_calls.set_module_resizes(self._add_resize_logic.module_resizes)
self._replace_modules_by_calls.mutate()
self._merge_adjacent_blocks.mutate()
def add_device_copies(self):
if self._target.is_gpu():
self._add_device_copies.mutate()
def apply_all(self):
self.lower_everything()
self.optimize_expressions()
self.licm()
self.modularize()
self.add_device_copies()
...@@ -18,8 +18,3 @@ class MergeAdjacentBlocks(Mutator): ...@@ -18,8 +18,3 @@ class MergeAdjacentBlocks(Mutator):
ast_node.stmts = new_stmts ast_node.stmts = new_stmts
return ast_node return ast_node
def merge_adjacent_blocks(ast):
merge = MergeAdjacentBlocks(ast)
merge.mutate()
from pairs.ir.bin_op import BinOp from pairs.ir.bin_op import BinOp
from pairs.ir.lit import Lit
from pairs.ir.mutator import Mutator from pairs.ir.mutator import Mutator
from pairs.ir.types import Types from pairs.ir.types import Types
class ReplaceSymbols(Mutator):
def __init__(self, ast):
super().__init__(ast)
def mutate_Symbol(self, ast_node):
return ast_node.assign_to
class SimplifyExpressions(Mutator):
def __init__(self, ast):
super().__init__(ast)
def mutate_BinOp(self, ast_node):
sim = ast_node.lhs.sim
ast_node.lhs = self.mutate(ast_node.lhs)
ast_node.rhs = self.mutate(ast_node.rhs)
ast_node.expressions = {i: self.mutate(e) for i, e in ast_node.expressions.items()}
if ast_node.op in ['+', '-'] and ast_node.rhs == 0:
return ast_node.lhs
if ast_node.op in ['+'] and ast_node.lhs == 0:
return ast_node.rhs
if ast_node.op in ['*', '/'] and ast_node.rhs == 1:
return ast_node.lhs
if ast_node.op == '*' and ast_node.lhs == 1:
return ast_node.rhs
if ast_node.op == '*' and ast_node.lhs == 0:
return Lit(sim, 0 if Types.is_integer(ast_node.type()) else 0.0)
return ast_node
class PrioritizeScalarOps(Mutator): class PrioritizeScalarOps(Mutator):
def __init__(self, ast): def __init__(self, ast):
super().__init__(ast) super().__init__(ast)
...@@ -43,8 +80,3 @@ class PrioritizeScalarOps(Mutator): ...@@ -43,8 +80,3 @@ class PrioritizeScalarOps(Mutator):
#return BinOp(sim, rhs.rhs, BinOp(sim, rhs.lhs, lhs, op), op) #return BinOp(sim, rhs.rhs, BinOp(sim, rhs.lhs, lhs, op), op)
return ast_node return ast_node
def prioritize_scalar_ops(ast_node):
prioritize = PrioritizeScalarOps(ast_node)
prioritize.mutate()
from pairs.ir.bin_op import BinOp
from pairs.ir.loops import For, While
from pairs.ir.mutator import Mutator
from pairs.ir.properties import PropertyAccess
class LICM(Mutator):
def __init__(self, ast):
super().__init__(ast)
self.lifts = {}
self.loops = []
def mutate_For(self, ast_node):
self.lifts[id(ast_node)] = []
self.loops.append(ast_node)
ast_node.iterator = self.mutate(ast_node.iterator)
ast_node.block = self.mutate(ast_node.block)
self.loops.pop()
return ast_node
def mutate_While(self, ast_node):
self.lifts[id(ast_node)] = []
self.loops.append(ast_node)
ast_node.cond = self.mutate(ast_node.cond)
ast_node.block = self.mutate(ast_node.block)
self.loops.pop()
return ast_node
def mutate_Decl(self, ast_node):
if self.loops and isinstance(ast_node.elem, (BinOp, PropertyAccess)):
last_loop = self.loops[-1]
#print(f"variants = {last_loop.block.variants}, terminals = {ast_node.elem.terminals}")
if not last_loop.block.variants.intersection(ast_node.elem.terminals):
#print(f'lifting {ast_node.elem.id()}')
self.lifts[id(last_loop)].append(ast_node)
return None
return ast_node
def mutate_Block(self, ast_node):
new_stmts = []
stmts = [self.mutate(s) for s in ast_node.stmts]
for s in stmts:
if s is not None:
s_id = id(s)
if isinstance(s, (For, While)) and s_id in self.lifts:
new_stmts = new_stmts + self.lifts[s_id]
new_stmts.append(s)
ast_node.stmts = new_stmts
return ast_node
...@@ -13,11 +13,3 @@ class Lower(Mutator): ...@@ -13,11 +13,3 @@ class Lower(Mutator):
return ast_node.lower() return ast_node.lower()
return ast_node return ast_node
def lower_everything(ast):
nlowered = 1
while nlowered > 0:
lower = Lower(ast)
lower.mutate()
nlowered = lower.lowered_nodes
...@@ -11,45 +11,11 @@ from pairs.ir.mutator import Mutator ...@@ -11,45 +11,11 @@ from pairs.ir.mutator import Mutator
from pairs.ir.properties import UpdateProperty from pairs.ir.properties import UpdateProperty
from pairs.ir.types import Types from pairs.ir.types import Types
from pairs.ir.variables import Var, Deref from pairs.ir.variables import Var, Deref
from pairs.ir.visitor import Visitor
from functools import reduce from functools import reduce
import operator import operator
class FetchModulesReferences(Visitor): class DereferenceWriteVariables(Mutator):
def __init__(self, ast):
super().__init__(ast)
self.module_stack = []
self.writing = False
def visit_Assign(self, ast_node):
self.writing = True
for c in ast_node.destinations():
self.visit(c)
self.writing = False
for c in ast_node.sources():
self.visit(c)
def visit_Module(self, ast_node):
self.module_stack.append(ast_node)
self.visit_children(ast_node)
self.module_stack.pop()
def visit_Array(self, ast_node):
for m in self.module_stack:
m.add_array(ast_node, self.writing)
def visit_Property(self, ast_node):
for m in self.module_stack:
m.add_property(ast_node, self.writing)
def visit_Var(self, ast_node):
for m in self.module_stack:
m.add_variable(ast_node, self.writing)
class AddDereferencesToWriteVariables(Mutator):
def __init__(self, ast): def __init__(self, ast):
super().__init__(ast) super().__init__(ast)
self.module_stack = [] self.module_stack = []
...@@ -153,11 +119,14 @@ class AddResizeLogic(Mutator): ...@@ -153,11 +119,14 @@ class AddResizeLogic(Mutator):
class ReplaceModulesByCalls(Mutator): class ReplaceModulesByCalls(Mutator):
def __init__(self, ast, module_resizes, grow_fn=None): def __init__(self, ast, grow_fn=None):
super().__init__(ast) super().__init__(ast)
self.module_resizes = module_resizes self.module_resizes = None
self.grow_fn = grow_fn if grow_fn is not None else (lambda x: x * 2) self.grow_fn = grow_fn if grow_fn is not None else (lambda x: x * 2)
def set_module_resizes(self, module_resizes):
self.module_resizes = module_resizes
def mutate_Module(self, ast_node): def mutate_Module(self, ast_node):
ast_node._block = self.mutate(ast_node._block) ast_node._block = self.mutate(ast_node._block)
if ast_node.name == 'main': if ast_node.name == 'main':
...@@ -194,14 +163,3 @@ class ReplaceModulesByCalls(Mutator): ...@@ -194,14 +163,3 @@ class ReplaceModulesByCalls(Mutator):
return Block(sim, init_stmts + [While(sim, branch_cond, Block(sim, reset_stmts + [call] + resize_stmts))]) return Block(sim, init_stmts + [While(sim, branch_cond, Block(sim, reset_stmts + [call] + resize_stmts))])
return call return call
def modularize(ast):
add_resize_logic = AddResizeLogic(ast)
add_resize_logic.mutate()
fetch_refs = FetchModulesReferences(ast)
fetch_refs.visit()
add_derefs_to_write_vars = AddDereferencesToWriteVariables(ast)
add_derefs_to_write_vars.mutate()
replace = ReplaceModulesByCalls(ast, add_resize_logic.module_resizes)
replace.mutate()
from pairs.ir.mutator import Mutator
class ReplaceSymbols(Mutator):
def __init__(self, ast):
super().__init__(ast)
def mutate_Symbol(self, ast_node):
return ast_node.assign_to
def replace_symbols(ast):
replace = ReplaceSymbols(ast)
replace.mutate()
from pairs.ir.lit import Lit
from pairs.ir.mutator import Mutator
from pairs.ir.types import Types
class SimplifyExpressions(Mutator):
def __init__(self, ast):
super().__init__(ast)
def mutate_BinOp(self, ast_node):
sim = ast_node.lhs.sim
ast_node.lhs = self.mutate(ast_node.lhs)
ast_node.rhs = self.mutate(ast_node.rhs)
ast_node.expressions = {i: self.mutate(e) for i, e in ast_node.expressions.items()}
if ast_node.op in ['+', '-'] and ast_node.rhs == 0:
return ast_node.lhs
if ast_node.op in ['+'] and ast_node.lhs == 0:
return ast_node.rhs
if ast_node.op in ['*', '/'] and ast_node.rhs == 1:
return ast_node.lhs
if ast_node.op == '*' and ast_node.lhs == 1:
return ast_node.rhs
if ast_node.op == '*' and ast_node.lhs == 0:
return Lit(sim, 0 if Types.is_integer(ast_node.type()) else 0.0)
return ast_node
def simplify_expressions(ast_node):
simplify = SimplifyExpressions(ast_node)
simplify.mutate()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment