From 0568f6f8f8c5b86e6e9e1f1a09a938cd5e3fd8cf Mon Sep 17 00:00:00 2001
From: Rafael Ravedutti <rafaelravedutti@gmail.com>
Date: Thu, 17 Feb 2022 23:16:50 +0100
Subject: [PATCH] Transformations and analysis refactoring

Signed-off-by: Rafael Ravedutti <rafaelravedutti@gmail.com>
---
 examples/kernels                              | 1537 ++++++++---------
 examples/kernels.pdf                          |  Bin 44937 -> 44739 bytes
 examples/lj_func.py                           |    3 +-
 examples/lj_ns.cpp                            |   20 +-
 setup.py                                      |    1 +
 src/pairs/analysis/__init__.py                |   28 +
 src/pairs/analysis/bin_ops.py                 |   54 +
 .../LICM.py => analysis/blocks.py}            |   98 --
 src/pairs/analysis/modules.py                 |   34 +
 src/pairs/sim/simulation.py                   |   30 +-
 src/pairs/transformations/__init__.py         |   66 +
 .../{merge_adjacent_blocks.py => blocks.py}   |    5 -
 .../{add_device_copies.py => devices.py}      |    0
 ...rioritize_scalar_ops.py => expressions.py} |   42 +-
 src/pairs/transformations/loops.py            |   53 +
 src/pairs/transformations/lower.py            |    8 -
 src/pairs/transformations/modules.py          |   54 +-
 src/pairs/transformations/replace_symbols.py  |   14 -
 src/pairs/transformations/set_used_bin_ops.py |   22 -
 src/pairs/transformations/simplify.py         |   36 -
 20 files changed, 1062 insertions(+), 1043 deletions(-)
 create mode 100644 src/pairs/analysis/__init__.py
 create mode 100644 src/pairs/analysis/bin_ops.py
 rename src/pairs/{transformations/LICM.py => analysis/blocks.py} (56%)
 create mode 100644 src/pairs/analysis/modules.py
 rename src/pairs/transformations/{merge_adjacent_blocks.py => blocks.py} (85%)
 rename src/pairs/transformations/{add_device_copies.py => devices.py} (100%)
 rename src/pairs/transformations/{prioritize_scalar_ops.py => expressions.py} (64%)
 create mode 100644 src/pairs/transformations/loops.py
 delete mode 100644 src/pairs/transformations/replace_symbols.py
 delete mode 100644 src/pairs/transformations/set_used_bin_ops.py
 delete mode 100644 src/pairs/transformations/simplify.py

diff --git a/examples/kernels b/examples/kernels
index f167b2d..3109f52 100644
--- a/examples/kernels
+++ b/examples/kernels
@@ -1,775 +1,770 @@
 digraph AST {
 	node [color=lightblue2 style=filled]
 	size="6,6"
-	n139969368120288 [label=Block]
-	n139969367650200 [label=Module]
-	n139969368120288 -> n139969367650200
-	n139969367650256 [label=Module]
-	n139969368120288 -> n139969367650256
-	n139969367650200 [label=Module]
-	n139969367650144 [label=Block]
-	n139969367650200 -> n139969367650144
-	n139969367650144 [label=Block]
-	n139969367647400 [label=ParticleFor]
-	n139969367650144 -> n139969367647400
-	n139969367647400 [label=ParticleFor]
-	n139969366898952 [label=Block]
-	n139969367647400 -> n139969366898952
-	n139969370135744 [label=nlocal]
-	n139969367647400 -> n139969370135744
-	n139969366898952 [label=Block]
-	n139969366899120 [label=For]
-	n139969366898952 -> n139969366899120
-	n139969366899400 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366899400 -> n139969366898784
-	n139969367646952 [label=neighborlist_capacity]
-	n139969366899400 -> n139969367646952
-	n139969366898784 [label="Iter(14)"]
-	n139969367646952 [label=neighborlist_capacity]
-	n139969366899624 [label=PropertyAccess]
-	n139969368120512 [label=position]
-	n139969366899624 -> n139969368120512
-	n139969366898784 [label="Iter(14)"]
-	n139969366899624 -> n139969366898784
-	n139969366925440 [label="*"]
-	n139969366899624 -> n139969366925440
-	n139969366927288 [label="+"]
-	n139969366899624 -> n139969366927288
-	n139969366929080 [label="+"]
-	n139969366899624 -> n139969366929080
-	n139969368120512 [label=position]
-	n139969366925440 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366925440 -> n139969366898784
-	n139969366925496 [label=3]
-	n139969366925440 -> n139969366925496
-	n139969366925496 [label=3]
-	n139969366927288 [label="+"]
-	n139969366927120 [label="*"]
-	n139969366927288 -> n139969366927120
-	n139969366927344 [label=1]
-	n139969366927288 -> n139969366927344
-	n139969366927120 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366927120 -> n139969366898784
-	n139969366927176 [label=3]
-	n139969366927120 -> n139969366927176
-	n139969366927176 [label=3]
-	n139969366927344 [label=1]
-	n139969366929080 [label="+"]
-	n139969366928912 [label="*"]
-	n139969366929080 -> n139969366928912
-	n139969366929136 [label=2]
-	n139969366929080 -> n139969366929136
-	n139969366928912 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366928912 -> n139969366898784
-	n139969366928968 [label=3]
-	n139969366928912 -> n139969366928968
-	n139969366928968 [label=3]
-	n139969366929136 [label=2]
-	n139969366900016 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366900016 -> n139969366898784
-	n139969366900072 [label=3]
-	n139969366900016 -> n139969366900072
-	n139969366900072 [label=3]
-	n139969366926336 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366926336 -> n139969366898784
-	n139969366926392 [label=3]
-	n139969366926336 -> n139969366926392
-	n139969366926392 [label=3]
-	n139969366926504 [label="+"]
-	n139969366926336 [label="*"]
-	n139969366926504 -> n139969366926336
-	n139969366926560 [label=1]
-	n139969366926504 -> n139969366926560
-	n139969366926560 [label=1]
-	n139969366928128 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969366928128 -> n139969366898784
-	n139969366928184 [label=3]
-	n139969366928128 -> n139969366928184
-	n139969366928184 [label=3]
-	n139969366928296 [label="+"]
-	n139969366928128 [label="*"]
-	n139969366928296 -> n139969366928128
-	n139969366928352 [label=2]
-	n139969366928296 -> n139969366928352
-	n139969366928352 [label=2]
-	n139969367692344 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367692344 -> n139969366898784
-	n139969367692288 [label=3]
-	n139969367692344 -> n139969367692288
-	n139969367692288 [label=3]
-	n139969367691616 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367691616 -> n139969366898784
-	n139969367691672 [label=3]
-	n139969367691616 -> n139969367691672
-	n139969367691672 [label=3]
-	n139969367692120 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367692120 -> n139969366898784
-	n139969367692176 [label=3]
-	n139969367692120 -> n139969367692176
-	n139969367692176 [label=3]
-	n139969367692456 [label="+"]
-	n139969367692120 [label="*"]
-	n139969367692456 -> n139969367692120
-	n139969367692512 [label=1]
-	n139969367692456 -> n139969367692512
-	n139969367692512 [label=1]
-	n139969367692624 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367692624 -> n139969366898784
-	n139969367692680 [label=3]
-	n139969367692624 -> n139969367692680
-	n139969367692680 [label=3]
-	n139969367694024 [label="+"]
-	n139969367692624 [label="*"]
-	n139969367694024 -> n139969367692624
-	n139969367692792 [label=1]
-	n139969367694024 -> n139969367692792
-	n139969367692792 [label=1]
-	n139969367694248 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367694248 -> n139969366898784
-	n139969367694640 [label=3]
-	n139969367694248 -> n139969367694640
-	n139969367694640 [label=3]
-	n139969367694808 [label="+"]
-	n139969367694248 [label="*"]
-	n139969367694808 -> n139969367694248
-	n139969367695088 [label=2]
-	n139969367694808 -> n139969367695088
-	n139969367695088 [label=2]
-	n139969367695256 [label="*"]
-	n139969366898784 [label="Iter(14)"]
-	n139969367695256 -> n139969366898784
-	n139969367695312 [label=3]
-	n139969367695256 -> n139969367695312
-	n139969367695312 [label=3]
-	n139969367826560 [label="+"]
-	n139969367695256 [label="*"]
-	n139969367826560 -> n139969367695256
-	n139969367826616 [label=2]
-	n139969367826560 -> n139969367826616
-	n139969367826616 [label=2]
-	n139969366899120 [label=For]
-	n139969366899176 [label="Iter(15)"]
-	n139969366899120 -> n139969366899176
-	n139969366899288 [label=Block]
-	n139969366899120 -> n139969366899288
-	n139969366899232 [label=0]
-	n139969366899120 -> n139969366899232
-	n139969366899064 [label=ArrayAccess]
-	n139969366899120 -> n139969366899064
-	n139969366899176 [label="Iter(15)"]
-	n139969366899288 [label=Block]
-	n139969366958768 [label=Filter]
-	n139969366899288 -> n139969366958768
-	n139969366899512 [label="+"]
-	n139969366899400 [label="*"]
-	n139969366899512 -> n139969366899400
-	n139969366899176 [label="Iter(15)"]
-	n139969366899512 -> n139969366899176
-	n139969366899736 [label=PropertyAccess]
-	n139969368120512 [label=position]
-	n139969366899736 -> n139969368120512
-	n139969366899344 [label=ArrayAccess]
-	n139969366899736 -> n139969366899344
-	n139969366925776 [label="*"]
-	n139969366899736 -> n139969366925776
-	n139969366927624 [label="+"]
-	n139969366899736 -> n139969366927624
-	n139969366958152 [label="+"]
-	n139969366899736 -> n139969366958152
-	n139969366899344 [label=ArrayAccess]
-	n139969367647008 [label=neighborlists]
-	n139969366899344 -> n139969367647008
-	n139969366899512 [label="+"]
-	n139969366899344 -> n139969366899512
-	n139969367647008 [label=neighborlists]
-	n139969366925776 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366925776 -> n139969366899344
-	n139969366925832 [label=3]
-	n139969366925776 -> n139969366925832
-	n139969366925832 [label=3]
-	n139969366927624 [label="+"]
-	n139969366927456 [label="*"]
-	n139969366927624 -> n139969366927456
-	n139969366927680 [label=1]
-	n139969366927624 -> n139969366927680
-	n139969366927456 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366927456 -> n139969366899344
-	n139969366927512 [label=3]
-	n139969366927456 -> n139969366927512
-	n139969366927512 [label=3]
-	n139969366927680 [label=1]
-	n139969366958152 [label="+"]
-	n139969366929248 [label="*"]
-	n139969366958152 -> n139969366929248
-	n139969366958208 [label=2]
-	n139969366958152 -> n139969366958208
-	n139969366929248 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366929248 -> n139969366899344
-	n139969366929304 [label=3]
-	n139969366929248 -> n139969366929304
-	n139969366929304 [label=3]
-	n139969366958208 [label=2]
-	n139969366899848 [label="-"]
-	n139969366899624 [label=PropertyAccess]
-	n139969366899848 -> n139969366899624
-	n139969366899736 [label=PropertyAccess]
-	n139969366899848 -> n139969366899736
-	n139969366900352 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366900352 -> n139969366899344
-	n139969366900408 [label=3]
-	n139969366900352 -> n139969366900408
-	n139969366900408 [label=3]
-	n139969366926168 [label="*"]
-	n139969366900688 [label=VectorAccess]
-	n139969366926168 -> n139969366900688
-	n139969366926112 [label=VectorAccess]
-	n139969366926168 -> n139969366926112
-	n139969366900688 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366900688 -> n139969366899848
-	n139969366926112 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366926112 -> n139969366899848
-	n139969366926672 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366926672 -> n139969366899344
-	n139969366926728 [label=3]
-	n139969366926672 -> n139969366926728
-	n139969366926728 [label=3]
-	n139969366926840 [label="+"]
-	n139969366926672 [label="*"]
-	n139969366926840 -> n139969366926672
-	n139969366926896 [label=1]
-	n139969366926840 -> n139969366926896
-	n139969366926896 [label=1]
-	n139969366927848 [label="*"]
-	n139969366927008 [label=VectorAccess]
-	n139969366927848 -> n139969366927008
-	n139969366927792 [label=VectorAccess]
-	n139969366927848 -> n139969366927792
-	n139969366927008 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366927008 -> n139969366899848
-	n139969366927792 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366927792 -> n139969366899848
-	n139969366927960 [label="+"]
-	n139969366926168 [label="*"]
-	n139969366927960 -> n139969366926168
-	n139969366927848 [label="*"]
-	n139969366927960 -> n139969366927848
-	n139969366928464 [label="*"]
-	n139969366899344 [label=ArrayAccess]
-	n139969366928464 -> n139969366899344
-	n139969366928520 [label=3]
-	n139969366928464 -> n139969366928520
-	n139969366928520 [label=3]
-	n139969366928632 [label="+"]
-	n139969366928464 [label="*"]
-	n139969366928632 -> n139969366928464
-	n139969366928688 [label=2]
-	n139969366928632 -> n139969366928688
-	n139969366928688 [label=2]
-	n139969366958376 [label="*"]
-	n139969366928800 [label=VectorAccess]
-	n139969366958376 -> n139969366928800
-	n139969366958320 [label=VectorAccess]
-	n139969366958376 -> n139969366958320
-	n139969366928800 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366928800 -> n139969366899848
-	n139969366958320 [label=VectorAccess]
-	n139969366899848 [label="-"]
-	n139969366958320 -> n139969366899848
-	n139969366958488 [label="+"]
-	n139969366927960 [label="+"]
-	n139969366958488 -> n139969366927960
-	n139969366958376 [label="*"]
-	n139969366958488 -> n139969366958376
-	n139969366958600 [label="<"]
-	n139969366958488 [label="+"]
-	n139969366958600 -> n139969366958488
-	n139969366958656 [label=2.5]
-	n139969366958600 -> n139969366958656
-	n139969366958656 [label=2.5]
-	n139969366958768 [label=Filter]
-	n139969366958600 [label="<"]
-	n139969366958768 -> n139969366958600
-	n139969367650088 [label=Block]
-	n139969366958768 -> n139969367650088
-	n139969367650088 [label=Block]
-	n139969367693296 [label=Assign]
-	n139969367650088 -> n139969367693296
-	n139969367694976 [label="/"]
-	n139969367694864 [label=1.0]
-	n139969367694976 -> n139969367694864
-	n139969366958488 [label="+"]
-	n139969367694976 -> n139969366958488
-	n139969367694864 [label=1.0]
-	n139969367694696 [label="*"]
-	n139969367694976 [label="/"]
-	n139969367694696 -> n139969367694976
-	n139969367694976 [label="/"]
-	n139969367694696 -> n139969367694976
-	n139969367694472 [label="*"]
-	n139969367694696 [label="*"]
-	n139969367694472 -> n139969367694696
-	n139969367694976 [label="/"]
-	n139969367694472 -> n139969367694976
-	n139969367694920 [label=PropertyAccess]
-	n139969368120624 [label=force]
-	n139969367694920 -> n139969368120624
-	n139969366898784 [label="Iter(14)"]
-	n139969367694920 -> n139969366898784
-	n139969367691616 [label="*"]
-	n139969367694920 -> n139969367691616
-	n139969367694024 [label="+"]
-	n139969367694920 -> n139969367694024
-	n139969367826560 [label="+"]
-	n139969367694920 -> n139969367826560
-	n139969368120624 [label=force]
-	n139969367693856 [label="*"]
-	n139969366899848 [label="-"]
-	n139969367693856 -> n139969366899848
-	n139969367693744 [label=48.0]
-	n139969367693856 -> n139969367693744
-	n139969367693744 [label=48.0]
-	n139969367693632 [label="*"]
-	n139969366899848 [label="-"]
-	n139969367693632 -> n139969366899848
-	n139969367370328 [label="*"]
-	n139969367693632 -> n139969367370328
-	n139969367370328 [label="*"]
-	n139969367693744 [label=48.0]
-	n139969367370328 -> n139969367693744
-	n139969367694472 [label="*"]
-	n139969367370328 -> n139969367694472
-	n139969367693464 [label="-"]
-	n139969367694472 [label="*"]
-	n139969367693464 -> n139969367694472
-	n139969367693520 [label=0.5]
-	n139969367693464 -> n139969367693520
-	n139969367693520 [label=0.5]
-	n139969367693352 [label="*"]
-	n139969366899848 [label="-"]
-	n139969367693352 -> n139969366899848
-	n139969367370440 [label="*"]
-	n139969367693352 -> n139969367370440
-	n139969367370440 [label="*"]
-	n139969367370328 [label="*"]
-	n139969367370440 -> n139969367370328
-	n139969367693464 [label="-"]
-	n139969367370440 -> n139969367693464
-	n139969367692904 [label="*"]
-	n139969366899848 [label="-"]
-	n139969367692904 -> n139969366899848
-	n139969366959328 [label="*"]
-	n139969367692904 -> n139969366959328
-	n139969366959328 [label="*"]
-	n139969367370440 [label="*"]
-	n139969366959328 -> n139969367370440
-	n139969367694976 [label="/"]
-	n139969366959328 -> n139969367694976
-	n139969367693016 [label="*"]
-	n139969366899848 [label="-"]
-	n139969367693016 -> n139969366899848
-	n139969366959328 [label="*"]
-	n139969367693016 -> n139969366959328
-	n139969367693240 [label="+"]
-	n139969367694920 [label=PropertyAccess]
-	n139969367693240 -> n139969367694920
-	n139969367693016 [label="*"]
-	n139969367693240 -> n139969367693016
-	n139969367693296 [label=Assign]
-	n139969367692008 [label=VectorAccess]
-	n139969367693296 -> n139969367692008
-	n139969367691560 [label=VectorAccess]
-	n139969367693296 -> n139969367691560
-	n139969367694192 [label=VectorAccess]
-	n139969367693296 -> n139969367694192
-	n139969367692568 [label=VectorAccess]
-	n139969367693296 -> n139969367692568
-	n139969367826784 [label=VectorAccess]
-	n139969367693296 -> n139969367826784
-	n139969367695200 [label=VectorAccess]
-	n139969367693296 -> n139969367695200
-	n139969367692008 [label=VectorAccess]
-	n139969367694920 [label=PropertyAccess]
-	n139969367692008 -> n139969367694920
-	n139969367691560 [label=VectorAccess]
-	n139969367693240 [label="+"]
-	n139969367691560 -> n139969367693240
-	n139969367694192 [label=VectorAccess]
-	n139969367694920 [label=PropertyAccess]
-	n139969367694192 -> n139969367694920
-	n139969367692568 [label=VectorAccess]
-	n139969367693240 [label="+"]
-	n139969367692568 -> n139969367693240
-	n139969367826784 [label=VectorAccess]
-	n139969367694920 [label=PropertyAccess]
-	n139969367826784 -> n139969367694920
-	n139969367695200 [label=VectorAccess]
-	n139969367693240 [label="+"]
-	n139969367695200 -> n139969367693240
-	n139969366899232 [label=0]
-	n139969366899064 [label=ArrayAccess]
-	n139969367647064 [label=numneighs]
-	n139969366899064 -> n139969367647064
-	n139969366898784 [label="Iter(14)"]
-	n139969366899064 -> n139969366898784
-	n139969367647064 [label=numneighs]
-	n139969370135744 [label=nlocal]
-	n139969367650256 [label=Module]
-	n139969367647512 [label=Block]
-	n139969367650256 -> n139969367647512
-	n139969367647512 [label=Block]
-	n139969367649808 [label=ParticleFor]
-	n139969367647512 -> n139969367649808
-	n139969367649808 [label=ParticleFor]
-	n139969367647736 [label=Block]
-	n139969367649808 -> n139969367647736
-	n139969370135744 [label=nlocal]
-	n139969367649808 -> n139969370135744
-	n139969367647736 [label=Block]
-	n139969367827568 [label=Assign]
-	n139969367647736 -> n139969367827568
-	n139969367344464 [label=Assign]
-	n139969367647736 -> n139969367344464
-	n139969367826896 [label=PropertyAccess]
-	n139969368120568 [label=velocity]
-	n139969367826896 -> n139969368120568
-	n139969367648800 [label="Iter(0)"]
-	n139969367826896 -> n139969367648800
-	n139969367828072 [label="*"]
-	n139969367826896 -> n139969367828072
-	n139969367829808 [label="+"]
-	n139969367826896 -> n139969367829808
-	n139969367343680 [label="+"]
-	n139969367826896 -> n139969367343680
-	n139969368120568 [label=velocity]
-	n139969367648800 [label="Iter(0)"]
-	n139969367828072 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367828072 -> n139969367648800
-	n139969367828464 [label=3]
-	n139969367828072 -> n139969367828464
-	n139969367828464 [label=3]
-	n139969367829808 [label="+"]
-	n139969367829304 [label="*"]
-	n139969367829808 -> n139969367829304
-	n139969367829864 [label=1]
-	n139969367829808 -> n139969367829864
-	n139969367829304 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367829304 -> n139969367648800
-	n139969367829696 [label=3]
-	n139969367829304 -> n139969367829696
-	n139969367829696 [label=3]
-	n139969367829864 [label=1]
-	n139969367343680 [label="+"]
-	n139969367343176 [label="*"]
-	n139969367343680 -> n139969367343176
-	n139969367343736 [label=2]
-	n139969367343680 -> n139969367343736
-	n139969367343176 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367343176 -> n139969367648800
-	n139969367343568 [label=3]
-	n139969367343176 -> n139969367343568
-	n139969367343568 [label=3]
-	n139969367343736 [label=2]
-	n139969367827008 [label=PropertyAccess]
-	n139969368120624 [label=force]
-	n139969367827008 -> n139969368120624
-	n139969367648800 [label="Iter(0)"]
-	n139969367827008 -> n139969367648800
-	n139969367828128 [label="*"]
-	n139969367827008 -> n139969367828128
-	n139969367829528 [label="+"]
-	n139969367827008 -> n139969367829528
-	n139969367343400 [label="+"]
-	n139969367827008 -> n139969367343400
-	n139969367828128 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367828128 -> n139969367648800
-	n139969367828184 [label=3]
-	n139969367828128 -> n139969367828184
-	n139969367828184 [label=3]
-	n139969367829528 [label="+"]
-	n139969367829360 [label="*"]
-	n139969367829528 -> n139969367829360
-	n139969367829584 [label=1]
-	n139969367829528 -> n139969367829584
-	n139969367829360 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367829360 -> n139969367648800
-	n139969367829416 [label=3]
-	n139969367829360 -> n139969367829416
-	n139969367829416 [label=3]
-	n139969367829584 [label=1]
-	n139969367343400 [label="+"]
-	n139969367343232 [label="*"]
-	n139969367343400 -> n139969367343232
-	n139969367343456 [label=2]
-	n139969367343400 -> n139969367343456
-	n139969367343232 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367343232 -> n139969367648800
-	n139969367343288 [label=3]
-	n139969367343232 -> n139969367343288
-	n139969367343288 [label=3]
-	n139969367343456 [label=2]
-	n139969367827120 [label="*"]
-	n139969367827176 [label=0.005]
-	n139969367827120 -> n139969367827176
-	n139969367827008 [label=PropertyAccess]
-	n139969367827120 -> n139969367827008
-	n139969367827176 [label=0.005]
-	n139969367827288 [label=PropertyAccess]
-	n139969368120456 [label=mass]
-	n139969367827288 -> n139969368120456
-	n139969367648800 [label="Iter(0)"]
-	n139969367827288 -> n139969367648800
-	n139969368120456 [label=mass]
-	n139969367827344 [label="/"]
-	n139969367827120 [label="*"]
-	n139969367827344 -> n139969367827120
-	n139969367827288 [label=PropertyAccess]
-	n139969367827344 -> n139969367827288
-	n139969367827456 [label="+"]
-	n139969367826896 [label=PropertyAccess]
-	n139969367827456 -> n139969367826896
-	n139969367827344 [label="/"]
-	n139969367827456 -> n139969367827344
-	n139969367827680 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367827680 -> n139969367648800
-	n139969367827736 [label=3]
-	n139969367827680 -> n139969367827736
-	n139969367827736 [label=3]
-	n139969367828912 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367828912 -> n139969367648800
-	n139969367828968 [label=3]
-	n139969367828912 -> n139969367828968
-	n139969367828968 [label=3]
-	n139969367829080 [label="+"]
-	n139969367828912 [label="*"]
-	n139969367829080 -> n139969367828912
-	n139969367829136 [label=1]
-	n139969367829080 -> n139969367829136
-	n139969367829136 [label=1]
-	n139969367830144 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367830144 -> n139969367648800
-	n139969367830200 [label=3]
-	n139969367830144 -> n139969367830200
-	n139969367830200 [label=3]
-	n139969367830312 [label="+"]
-	n139969367830144 [label="*"]
-	n139969367830312 -> n139969367830144
-	n139969367830368 [label=2]
-	n139969367830312 -> n139969367830368
-	n139969367830368 [label=2]
-	n139969367827568 [label=Assign]
-	n139969367828800 [label=VectorAccess]
-	n139969367827568 -> n139969367828800
-	n139969367828016 [label=VectorAccess]
-	n139969367827568 -> n139969367828016
-	n139969367830032 [label=VectorAccess]
-	n139969367827568 -> n139969367830032
-	n139969367829248 [label=VectorAccess]
-	n139969367827568 -> n139969367829248
-	n139969367343904 [label=VectorAccess]
-	n139969367827568 -> n139969367343904
-	n139969367830480 [label=VectorAccess]
-	n139969367827568 -> n139969367830480
-	n139969367828800 [label=VectorAccess]
-	n139969367826896 [label=PropertyAccess]
-	n139969367828800 -> n139969367826896
-	n139969367828016 [label=VectorAccess]
-	n139969367827456 [label="+"]
-	n139969367828016 -> n139969367827456
-	n139969367830032 [label=VectorAccess]
-	n139969367826896 [label=PropertyAccess]
-	n139969367830032 -> n139969367826896
-	n139969367829248 [label=VectorAccess]
-	n139969367827456 [label="+"]
-	n139969367829248 -> n139969367827456
-	n139969367343904 [label=VectorAccess]
-	n139969367826896 [label=PropertyAccess]
-	n139969367343904 -> n139969367826896
-	n139969367830480 [label=VectorAccess]
-	n139969367827456 [label="+"]
-	n139969367830480 -> n139969367827456
-	n139969367343960 [label=PropertyAccess]
-	n139969368120512 [label=position]
-	n139969367343960 -> n139969368120512
-	n139969367648800 [label="Iter(0)"]
-	n139969367343960 -> n139969367648800
-	n139969367345304 [label="*"]
-	n139969367343960 -> n139969367345304
-	n139969367346704 [label="+"]
-	n139969367343960 -> n139969367346704
-	n139969367368480 [label="+"]
-	n139969367343960 -> n139969367368480
-	n139969367345304 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367345304 -> n139969367648800
-	n139969367345360 [label=3]
-	n139969367345304 -> n139969367345360
-	n139969367345360 [label=3]
-	n139969367346704 [label="+"]
-	n139969367346536 [label="*"]
-	n139969367346704 -> n139969367346536
-	n139969367346760 [label=1]
-	n139969367346704 -> n139969367346760
-	n139969367346536 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367346536 -> n139969367648800
-	n139969367346592 [label=3]
-	n139969367346536 -> n139969367346592
-	n139969367346592 [label=3]
-	n139969367346760 [label=1]
-	n139969367368480 [label="+"]
-	n139969367368312 [label="*"]
-	n139969367368480 -> n139969367368312
-	n139969367368536 [label=2]
-	n139969367368480 -> n139969367368536
-	n139969367368312 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367368312 -> n139969367648800
-	n139969367368368 [label=3]
-	n139969367368312 -> n139969367368368
-	n139969367368368 [label=3]
-	n139969367368536 [label=2]
-	n139969367344072 [label=PropertyAccess]
-	n139969368120568 [label=velocity]
-	n139969367344072 -> n139969368120568
-	n139969367648800 [label="Iter(0)"]
-	n139969367344072 -> n139969367648800
-	n139969367344968 [label="*"]
-	n139969367344072 -> n139969367344968
-	n139969367346368 [label="+"]
-	n139969367344072 -> n139969367346368
-	n139969367368144 [label="+"]
-	n139969367344072 -> n139969367368144
-	n139969367344968 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367344968 -> n139969367648800
-	n139969367345024 [label=3]
-	n139969367344968 -> n139969367345024
-	n139969367345024 [label=3]
-	n139969367346368 [label="+"]
-	n139969367346200 [label="*"]
-	n139969367346368 -> n139969367346200
-	n139969367346424 [label=1]
-	n139969367346368 -> n139969367346424
-	n139969367346200 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367346200 -> n139969367648800
-	n139969367346256 [label=3]
-	n139969367346200 -> n139969367346256
-	n139969367346256 [label=3]
-	n139969367346424 [label=1]
-	n139969367368144 [label="+"]
-	n139969367367976 [label="*"]
-	n139969367368144 -> n139969367367976
-	n139969367368200 [label=2]
-	n139969367368144 -> n139969367368200
-	n139969367367976 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367367976 -> n139969367648800
-	n139969367368032 [label=3]
-	n139969367367976 -> n139969367368032
-	n139969367368032 [label=3]
-	n139969367368200 [label=2]
-	n139969367344184 [label="*"]
-	n139969367344240 [label=0.005]
-	n139969367344184 -> n139969367344240
-	n139969367344072 [label=PropertyAccess]
-	n139969367344184 -> n139969367344072
-	n139969367344240 [label=0.005]
-	n139969367344352 [label="+"]
-	n139969367343960 [label=PropertyAccess]
-	n139969367344352 -> n139969367343960
-	n139969367344184 [label="*"]
-	n139969367344352 -> n139969367344184
-	n139969367344576 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367344576 -> n139969367648800
-	n139969367344632 [label=3]
-	n139969367344576 -> n139969367344632
-	n139969367344632 [label=3]
-	n139969367345808 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367345808 -> n139969367648800
-	n139969367345864 [label=3]
-	n139969367345808 -> n139969367345864
-	n139969367345864 [label=3]
-	n139969367345976 [label="+"]
-	n139969367345808 [label="*"]
-	n139969367345976 -> n139969367345808
-	n139969367346032 [label=1]
-	n139969367345976 -> n139969367346032
-	n139969367346032 [label=1]
-	n139969367347040 [label="*"]
-	n139969367648800 [label="Iter(0)"]
-	n139969367347040 -> n139969367648800
-	n139969367347096 [label=3]
-	n139969367347040 -> n139969367347096
-	n139969367347096 [label=3]
-	n139969367367752 [label="+"]
-	n139969367347040 [label="*"]
-	n139969367367752 -> n139969367347040
-	n139969367367808 [label=2]
-	n139969367367752 -> n139969367367808
-	n139969367367808 [label=2]
-	n139969367344464 [label=Assign]
-	n139969367345696 [label=VectorAccess]
-	n139969367344464 -> n139969367345696
-	n139969367344912 [label=VectorAccess]
-	n139969367344464 -> n139969367344912
-	n139969367346928 [label=VectorAccess]
-	n139969367344464 -> n139969367346928
-	n139969367346144 [label=VectorAccess]
-	n139969367344464 -> n139969367346144
-	n139969367368704 [label=VectorAccess]
-	n139969367344464 -> n139969367368704
-	n139969367367920 [label=VectorAccess]
-	n139969367344464 -> n139969367367920
-	n139969367345696 [label=VectorAccess]
-	n139969367343960 [label=PropertyAccess]
-	n139969367345696 -> n139969367343960
-	n139969367344912 [label=VectorAccess]
-	n139969367344352 [label="+"]
-	n139969367344912 -> n139969367344352
-	n139969367346928 [label=VectorAccess]
-	n139969367343960 [label=PropertyAccess]
-	n139969367346928 -> n139969367343960
-	n139969367346144 [label=VectorAccess]
-	n139969367344352 [label="+"]
-	n139969367346144 -> n139969367344352
-	n139969367368704 [label=VectorAccess]
-	n139969367343960 [label=PropertyAccess]
-	n139969367368704 -> n139969367343960
-	n139969367367920 [label=VectorAccess]
-	n139969367344352 [label="+"]
-	n139969367367920 -> n139969367344352
+	n140343105889616 [label=Block]
+	n140343105956160 [label=Module]
+	n140343105889616 -> n140343105956160
+	n140343105956216 [label=Module]
+	n140343105889616 -> n140343105956216
+	n140343105956160 [label=Module]
+	n140343105956104 [label=Block]
+	n140343105956160 -> n140343105956104
+	n140343105956104 [label=Block]
+	n140343105954200 [label=ParticleFor]
+	n140343105956104 -> n140343105954200
+	n140343105954200 [label=ParticleFor]
+	n140343105184936 [label=Block]
+	n140343105954200 -> n140343105184936
+	n140343108419712 [label=nlocal]
+	n140343105954200 -> n140343108419712
+	n140343105184936 [label=Block]
+	n140343105185104 [label=For]
+	n140343105184936 -> n140343105185104
+	n140343105185384 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105185384 -> n140343105184768
+	n140343105891352 [label=neighborlist_capacity]
+	n140343105185384 -> n140343105891352
+	n140343105184768 [label="Iter(14)"]
+	n140343105891352 [label=neighborlist_capacity]
+	n140343105185608 [label=PropertyAccess]
+	n140343105889840 [label=position]
+	n140343105185608 -> n140343105889840
+	n140343105184768 [label="Iter(14)"]
+	n140343105185608 -> n140343105184768
+	n140343105186784 [label="*"]
+	n140343105185608 -> n140343105186784
+	n140343105225560 [label="+"]
+	n140343105185608 -> n140343105225560
+	n140343105227352 [label="+"]
+	n140343105185608 -> n140343105227352
+	n140343105889840 [label=position]
+	n140343105186784 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105186784 -> n140343105184768
+	n140343105186840 [label=3]
+	n140343105186784 -> n140343105186840
+	n140343105186840 [label=3]
+	n140343105225560 [label="+"]
+	n140343105225392 [label="*"]
+	n140343105225560 -> n140343105225392
+	n140343105225616 [label=1]
+	n140343105225560 -> n140343105225616
+	n140343105225392 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105225392 -> n140343105184768
+	n140343105225448 [label=3]
+	n140343105225392 -> n140343105225448
+	n140343105225448 [label=3]
+	n140343105225616 [label=1]
+	n140343105227352 [label="+"]
+	n140343105227184 [label="*"]
+	n140343105227352 -> n140343105227184
+	n140343105227408 [label=2]
+	n140343105227352 -> n140343105227408
+	n140343105227184 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105227184 -> n140343105184768
+	n140343105227240 [label=3]
+	n140343105227184 -> n140343105227240
+	n140343105227240 [label=3]
+	n140343105227408 [label=2]
+	n140343105186000 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105186000 -> n140343105184768
+	n140343105186056 [label=3]
+	n140343105186000 -> n140343105186056
+	n140343105186056 [label=3]
+	n140343105187680 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105187680 -> n140343105184768
+	n140343105187736 [label=3]
+	n140343105187680 -> n140343105187736
+	n140343105187736 [label=3]
+	n140343105224776 [label="+"]
+	n140343105187680 [label="*"]
+	n140343105224776 -> n140343105187680
+	n140343105224832 [label=1]
+	n140343105224776 -> n140343105224832
+	n140343105224832 [label=1]
+	n140343105226400 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343105226400 -> n140343105184768
+	n140343105226456 [label=3]
+	n140343105226400 -> n140343105226456
+	n140343105226456 [label=3]
+	n140343105226568 [label="+"]
+	n140343105226400 [label="*"]
+	n140343105226568 -> n140343105226400
+	n140343105226624 [label=2]
+	n140343105226568 -> n140343105226624
+	n140343105226624 [label=2]
+	n140343106084936 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106084936 -> n140343105184768
+	n140343106084992 [label=3]
+	n140343106084936 -> n140343106084992
+	n140343106084992 [label=3]
+	n140343106085328 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106085328 -> n140343105184768
+	n140343106085384 [label=3]
+	n140343106085328 -> n140343106085384
+	n140343106085384 [label=3]
+	n140343106085832 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106085832 -> n140343105184768
+	n140343106085888 [label=3]
+	n140343106085832 -> n140343106085888
+	n140343106085888 [label=3]
+	n140343106086000 [label="+"]
+	n140343106085832 [label="*"]
+	n140343106086000 -> n140343106085832
+	n140343106086056 [label=1]
+	n140343106086000 -> n140343106086056
+	n140343106086056 [label=1]
+	n140343106086224 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106086224 -> n140343105184768
+	n140343106086280 [label=3]
+	n140343106086224 -> n140343106086280
+	n140343106086280 [label=3]
+	n140343106086392 [label="+"]
+	n140343106086224 [label="*"]
+	n140343106086392 -> n140343106086224
+	n140343106086448 [label=1]
+	n140343106086392 -> n140343106086448
+	n140343106086448 [label=1]
+	n140343106086728 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106086728 -> n140343105184768
+	n140343106086784 [label=3]
+	n140343106086728 -> n140343106086784
+	n140343106086784 [label=3]
+	n140343106086896 [label="+"]
+	n140343106086728 [label="*"]
+	n140343106086896 -> n140343106086728
+	n140343106086952 [label=2]
+	n140343106086896 -> n140343106086952
+	n140343106086952 [label=2]
+	n140343106087120 [label="*"]
+	n140343105184768 [label="Iter(14)"]
+	n140343106087120 -> n140343105184768
+	n140343106087176 [label=3]
+	n140343106087120 -> n140343106087176
+	n140343106087176 [label=3]
+	n140343106087288 [label="+"]
+	n140343106087120 [label="*"]
+	n140343106087288 -> n140343106087120
+	n140343106087344 [label=2]
+	n140343106087288 -> n140343106087344
+	n140343106087344 [label=2]
+	n140343105185104 [label=For]
+	n140343105185160 [label="Iter(15)"]
+	n140343105185104 -> n140343105185160
+	n140343105185272 [label=Block]
+	n140343105185104 -> n140343105185272
+	n140343105185216 [label=0]
+	n140343105185104 -> n140343105185216
+	n140343105185048 [label=ArrayAccess]
+	n140343105185104 -> n140343105185048
+	n140343105185160 [label="Iter(15)"]
+	n140343105185272 [label=Block]
+	n140343105228304 [label=Filter]
+	n140343105185272 -> n140343105228304
+	n140343105185496 [label="+"]
+	n140343105185384 [label="*"]
+	n140343105185496 -> n140343105185384
+	n140343105185160 [label="Iter(15)"]
+	n140343105185496 -> n140343105185160
+	n140343105185720 [label=PropertyAccess]
+	n140343105889840 [label=position]
+	n140343105185720 -> n140343105889840
+	n140343105185328 [label=ArrayAccess]
+	n140343105185720 -> n140343105185328
+	n140343105187120 [label="*"]
+	n140343105185720 -> n140343105187120
+	n140343105225896 [label="+"]
+	n140343105185720 -> n140343105225896
+	n140343105227688 [label="+"]
+	n140343105185720 -> n140343105227688
+	n140343105185328 [label=ArrayAccess]
+	n140343105891408 [label=neighborlists]
+	n140343105185328 -> n140343105891408
+	n140343105185496 [label="+"]
+	n140343105185328 -> n140343105185496
+	n140343105891408 [label=neighborlists]
+	n140343105187120 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105187120 -> n140343105185328
+	n140343105187176 [label=3]
+	n140343105187120 -> n140343105187176
+	n140343105187176 [label=3]
+	n140343105225896 [label="+"]
+	n140343105225728 [label="*"]
+	n140343105225896 -> n140343105225728
+	n140343105225952 [label=1]
+	n140343105225896 -> n140343105225952
+	n140343105225728 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105225728 -> n140343105185328
+	n140343105225784 [label=3]
+	n140343105225728 -> n140343105225784
+	n140343105225784 [label=3]
+	n140343105225952 [label=1]
+	n140343105227688 [label="+"]
+	n140343105227520 [label="*"]
+	n140343105227688 -> n140343105227520
+	n140343105227744 [label=2]
+	n140343105227688 -> n140343105227744
+	n140343105227520 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105227520 -> n140343105185328
+	n140343105227576 [label=3]
+	n140343105227520 -> n140343105227576
+	n140343105227576 [label=3]
+	n140343105227744 [label=2]
+	n140343105185832 [label="-"]
+	n140343105185608 [label=PropertyAccess]
+	n140343105185832 -> n140343105185608
+	n140343105185720 [label=PropertyAccess]
+	n140343105185832 -> n140343105185720
+	n140343105186336 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105186336 -> n140343105185328
+	n140343105186392 [label=3]
+	n140343105186336 -> n140343105186392
+	n140343105186392 [label=3]
+	n140343105187512 [label="*"]
+	n140343105186672 [label=VectorAccess]
+	n140343105187512 -> n140343105186672
+	n140343105187456 [label=VectorAccess]
+	n140343105187512 -> n140343105187456
+	n140343105186672 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105186672 -> n140343105185832
+	n140343105187456 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105187456 -> n140343105185832
+	n140343105224944 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105224944 -> n140343105185328
+	n140343105225000 [label=3]
+	n140343105224944 -> n140343105225000
+	n140343105225000 [label=3]
+	n140343105225112 [label="+"]
+	n140343105224944 [label="*"]
+	n140343105225112 -> n140343105224944
+	n140343105225168 [label=1]
+	n140343105225112 -> n140343105225168
+	n140343105225168 [label=1]
+	n140343105226120 [label="*"]
+	n140343105225280 [label=VectorAccess]
+	n140343105226120 -> n140343105225280
+	n140343105226064 [label=VectorAccess]
+	n140343105226120 -> n140343105226064
+	n140343105225280 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105225280 -> n140343105185832
+	n140343105226064 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105226064 -> n140343105185832
+	n140343105226232 [label="+"]
+	n140343105187512 [label="*"]
+	n140343105226232 -> n140343105187512
+	n140343105226120 [label="*"]
+	n140343105226232 -> n140343105226120
+	n140343105226736 [label="*"]
+	n140343105185328 [label=ArrayAccess]
+	n140343105226736 -> n140343105185328
+	n140343105226792 [label=3]
+	n140343105226736 -> n140343105226792
+	n140343105226792 [label=3]
+	n140343105226904 [label="+"]
+	n140343105226736 [label="*"]
+	n140343105226904 -> n140343105226736
+	n140343105226960 [label=2]
+	n140343105226904 -> n140343105226960
+	n140343105226960 [label=2]
+	n140343105227912 [label="*"]
+	n140343105227072 [label=VectorAccess]
+	n140343105227912 -> n140343105227072
+	n140343105227856 [label=VectorAccess]
+	n140343105227912 -> n140343105227856
+	n140343105227072 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105227072 -> n140343105185832
+	n140343105227856 [label=VectorAccess]
+	n140343105185832 [label="-"]
+	n140343105227856 -> n140343105185832
+	n140343105228024 [label="+"]
+	n140343105226232 [label="+"]
+	n140343105228024 -> n140343105226232
+	n140343105227912 [label="*"]
+	n140343105228024 -> n140343105227912
+	n140343105228136 [label="<"]
+	n140343105228024 [label="+"]
+	n140343105228136 -> n140343105228024
+	n140343105228192 [label=2.5]
+	n140343105228136 -> n140343105228192
+	n140343105228192 [label=2.5]
+	n140343105228304 [label=Filter]
+	n140343105228136 [label="<"]
+	n140343105228304 -> n140343105228136
+	n140343105956048 [label=Block]
+	n140343105228304 -> n140343105956048
+	n140343105956048 [label=Block]
+	n140343105891968 [label=Assign]
+	n140343105956048 -> n140343105891968
+	n140343105956384 [label="/"]
+	n140343105956440 [label=1.0]
+	n140343105956384 -> n140343105956440
+	n140343105228024 [label="+"]
+	n140343105956384 -> n140343105228024
+	n140343105956440 [label=1.0]
+	n140343105956552 [label="*"]
+	n140343105956384 [label="/"]
+	n140343105956552 -> n140343105956384
+	n140343105956384 [label="/"]
+	n140343105956552 -> n140343105956384
+	n140343105956664 [label="*"]
+	n140343105956552 [label="*"]
+	n140343105956664 -> n140343105956552
+	n140343105956384 [label="/"]
+	n140343105956664 -> n140343105956384
+	n140343105956328 [label=PropertyAccess]
+	n140343105889952 [label=force]
+	n140343105956328 -> n140343105889952
+	n140343105184768 [label="Iter(14)"]
+	n140343105956328 -> n140343105184768
+	n140343106085328 [label="*"]
+	n140343105956328 -> n140343106085328
+	n140343106086392 [label="+"]
+	n140343105956328 -> n140343106086392
+	n140343106087288 [label="+"]
+	n140343105956328 -> n140343106087288
+	n140343105889952 [label=force]
+	n140343105957000 [label="*"]
+	n140343105185832 [label="-"]
+	n140343105957000 -> n140343105185832
+	n140343105957056 [label=48.0]
+	n140343105957000 -> n140343105957056
+	n140343105957056 [label=48.0]
+	n140343105957336 [label="*"]
+	n140343105185832 [label="-"]
+	n140343105957336 -> n140343105185832
+	n140343105601432 [label="*"]
+	n140343105957336 -> n140343105601432
+	n140343105601432 [label="*"]
+	n140343105957056 [label=48.0]
+	n140343105601432 -> n140343105957056
+	n140343105956664 [label="*"]
+	n140343105601432 -> n140343105956664
+	n140343105957448 [label="-"]
+	n140343105956664 [label="*"]
+	n140343105957448 -> n140343105956664
+	n140343105957504 [label=0.5]
+	n140343105957448 -> n140343105957504
+	n140343105957504 [label=0.5]
+	n140343105957616 [label="*"]
+	n140343105185832 [label="-"]
+	n140343105957616 -> n140343105185832
+	n140343105597904 [label="*"]
+	n140343105957616 -> n140343105597904
+	n140343105597904 [label="*"]
+	n140343105601432 [label="*"]
+	n140343105597904 -> n140343105601432
+	n140343105957448 [label="-"]
+	n140343105597904 -> n140343105957448
+	n140343105892024 [label="*"]
+	n140343105185832 [label="-"]
+	n140343105892024 -> n140343105185832
+	n140343105597624 [label="*"]
+	n140343105892024 -> n140343105597624
+	n140343105597624 [label="*"]
+	n140343105597904 [label="*"]
+	n140343105597624 -> n140343105597904
+	n140343105956384 [label="/"]
+	n140343105597624 -> n140343105956384
+	n140343105892304 [label="+"]
+	n140343105956328 [label=PropertyAccess]
+	n140343105892304 -> n140343105956328
+	n140343105892024 [label="*"]
+	n140343105892304 -> n140343105892024
+	n140343105891968 [label=Assign]
+	n140343106085720 [label=VectorAccess]
+	n140343105891968 -> n140343106085720
+	n140343106085272 [label=VectorAccess]
+	n140343105891968 -> n140343106085272
+	n140343106086616 [label=VectorAccess]
+	n140343105891968 -> n140343106086616
+	n140343106086168 [label=VectorAccess]
+	n140343105891968 -> n140343106086168
+	n140343106087512 [label=VectorAccess]
+	n140343105891968 -> n140343106087512
+	n140343106087064 [label=VectorAccess]
+	n140343105891968 -> n140343106087064
+	n140343106085720 [label=VectorAccess]
+	n140343105956328 [label=PropertyAccess]
+	n140343106085720 -> n140343105956328
+	n140343106085272 [label=VectorAccess]
+	n140343105892304 [label="+"]
+	n140343106085272 -> n140343105892304
+	n140343106086616 [label=VectorAccess]
+	n140343105956328 [label=PropertyAccess]
+	n140343106086616 -> n140343105956328
+	n140343106086168 [label=VectorAccess]
+	n140343105892304 [label="+"]
+	n140343106086168 -> n140343105892304
+	n140343106087512 [label=VectorAccess]
+	n140343105956328 [label=PropertyAccess]
+	n140343106087512 -> n140343105956328
+	n140343106087064 [label=VectorAccess]
+	n140343105892304 [label="+"]
+	n140343106087064 -> n140343105892304
+	n140343105185216 [label=0]
+	n140343105185048 [label=ArrayAccess]
+	n140343105891464 [label=numneighs]
+	n140343105185048 -> n140343105891464
+	n140343105184768 [label="Iter(14)"]
+	n140343105185048 -> n140343105184768
+	n140343105891464 [label=numneighs]
+	n140343108419712 [label=nlocal]
+	n140343105956216 [label=Module]
+	n140343105954368 [label=Block]
+	n140343105956216 -> n140343105954368
+	n140343105954368 [label=Block]
+	n140343105955768 [label=ParticleFor]
+	n140343105954368 -> n140343105955768
+	n140343105955768 [label=ParticleFor]
+	n140343105957280 [label=Block]
+	n140343105955768 -> n140343105957280
+	n140343108419712 [label=nlocal]
+	n140343105955768 -> n140343108419712
+	n140343105957280 [label=Block]
+	n140343106088352 [label=Assign]
+	n140343105957280 -> n140343106088352
+	n140343105601152 [label=Assign]
+	n140343105957280 -> n140343105601152
+	n140343106087624 [label=PropertyAccess]
+	n140343105889896 [label=velocity]
+	n140343106087624 -> n140343105889896
+	n140343105954872 [label="Iter(0)"]
+	n140343106087624 -> n140343105954872
+	n140343106088856 [label="*"]
+	n140343106087624 -> n140343106088856
+	n140343105599136 [label="+"]
+	n140343106087624 -> n140343105599136
+	n140343105600368 [label="+"]
+	n140343106087624 -> n140343105600368
+	n140343105889896 [label=velocity]
+	n140343105954872 [label="Iter(0)"]
+	n140343106088856 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343106088856 -> n140343105954872
+	n140343105597792 [label=3]
+	n140343106088856 -> n140343105597792
+	n140343105597792 [label=3]
+	n140343105599136 [label="+"]
+	n140343105598632 [label="*"]
+	n140343105599136 -> n140343105598632
+	n140343105599192 [label=1]
+	n140343105599136 -> n140343105599192
+	n140343105598632 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105598632 -> n140343105954872
+	n140343105599024 [label=3]
+	n140343105598632 -> n140343105599024
+	n140343105599024 [label=3]
+	n140343105599192 [label=1]
+	n140343105600368 [label="+"]
+	n140343105599864 [label="*"]
+	n140343105600368 -> n140343105599864
+	n140343105600424 [label=2]
+	n140343105600368 -> n140343105600424
+	n140343105599864 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105599864 -> n140343105954872
+	n140343105600256 [label=3]
+	n140343105599864 -> n140343105600256
+	n140343105600256 [label=3]
+	n140343105600424 [label=2]
+	n140343106087736 [label=PropertyAccess]
+	n140343105889952 [label=force]
+	n140343106087736 -> n140343105889952
+	n140343105954872 [label="Iter(0)"]
+	n140343106087736 -> n140343105954872
+	n140343106088912 [label="*"]
+	n140343106087736 -> n140343106088912
+	n140343105598856 [label="+"]
+	n140343106087736 -> n140343105598856
+	n140343105600088 [label="+"]
+	n140343106087736 -> n140343105600088
+	n140343106088912 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343106088912 -> n140343105954872
+	n140343105597512 [label=3]
+	n140343106088912 -> n140343105597512
+	n140343105597512 [label=3]
+	n140343105598856 [label="+"]
+	n140343105598688 [label="*"]
+	n140343105598856 -> n140343105598688
+	n140343105598912 [label=1]
+	n140343105598856 -> n140343105598912
+	n140343105598688 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105598688 -> n140343105954872
+	n140343105598744 [label=3]
+	n140343105598688 -> n140343105598744
+	n140343105598744 [label=3]
+	n140343105598912 [label=1]
+	n140343105600088 [label="+"]
+	n140343105599920 [label="*"]
+	n140343105600088 -> n140343105599920
+	n140343105600144 [label=2]
+	n140343105600088 -> n140343105600144
+	n140343105599920 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105599920 -> n140343105954872
+	n140343105599976 [label=3]
+	n140343105599920 -> n140343105599976
+	n140343105599976 [label=3]
+	n140343105600144 [label=2]
+	n140343106087848 [label="*"]
+	n140343106087904 [label=0.005]
+	n140343106087848 -> n140343106087904
+	n140343106087736 [label=PropertyAccess]
+	n140343106087848 -> n140343106087736
+	n140343106087904 [label=0.005]
+	n140343106088016 [label=PropertyAccess]
+	n140343105889784 [label=mass]
+	n140343106088016 -> n140343105889784
+	n140343105954872 [label="Iter(0)"]
+	n140343106088016 -> n140343105954872
+	n140343105889784 [label=mass]
+	n140343106088128 [label="/"]
+	n140343106087848 [label="*"]
+	n140343106088128 -> n140343106087848
+	n140343106088016 [label=PropertyAccess]
+	n140343106088128 -> n140343106088016
+	n140343106088240 [label="+"]
+	n140343106087624 [label=PropertyAccess]
+	n140343106088240 -> n140343106087624
+	n140343106088128 [label="/"]
+	n140343106088240 -> n140343106088128
+	n140343106088464 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343106088464 -> n140343105954872
+	n140343106088520 [label=3]
+	n140343106088464 -> n140343106088520
+	n140343106088520 [label=3]
+	n140343105598240 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105598240 -> n140343105954872
+	n140343105598296 [label=3]
+	n140343105598240 -> n140343105598296
+	n140343105598296 [label=3]
+	n140343105598408 [label="+"]
+	n140343105598240 [label="*"]
+	n140343105598408 -> n140343105598240
+	n140343105598464 [label=1]
+	n140343105598408 -> n140343105598464
+	n140343105598464 [label=1]
+	n140343105599472 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105599472 -> n140343105954872
+	n140343105599528 [label=3]
+	n140343105599472 -> n140343105599528
+	n140343105599528 [label=3]
+	n140343105599640 [label="+"]
+	n140343105599472 [label="*"]
+	n140343105599640 -> n140343105599472
+	n140343105599696 [label=2]
+	n140343105599640 -> n140343105599696
+	n140343105599696 [label=2]
+	n140343106088352 [label=Assign]
+	n140343105598128 [label=VectorAccess]
+	n140343106088352 -> n140343105598128
+	n140343106088800 [label=VectorAccess]
+	n140343106088352 -> n140343106088800
+	n140343105599360 [label=VectorAccess]
+	n140343106088352 -> n140343105599360
+	n140343105598576 [label=VectorAccess]
+	n140343106088352 -> n140343105598576
+	n140343105600592 [label=VectorAccess]
+	n140343106088352 -> n140343105600592
+	n140343105599808 [label=VectorAccess]
+	n140343106088352 -> n140343105599808
+	n140343105598128 [label=VectorAccess]
+	n140343106087624 [label=PropertyAccess]
+	n140343105598128 -> n140343106087624
+	n140343106088800 [label=VectorAccess]
+	n140343106088240 [label="+"]
+	n140343106088800 -> n140343106088240
+	n140343105599360 [label=VectorAccess]
+	n140343106087624 [label=PropertyAccess]
+	n140343105599360 -> n140343106087624
+	n140343105598576 [label=VectorAccess]
+	n140343106088240 [label="+"]
+	n140343105598576 -> n140343106088240
+	n140343105600592 [label=VectorAccess]
+	n140343106087624 [label=PropertyAccess]
+	n140343105600592 -> n140343106087624
+	n140343105599808 [label=VectorAccess]
+	n140343106088240 [label="+"]
+	n140343105599808 -> n140343106088240
+	n140343105600648 [label=PropertyAccess]
+	n140343105889840 [label=position]
+	n140343105600648 -> n140343105889840
+	n140343105954872 [label="Iter(0)"]
+	n140343105600648 -> n140343105954872
+	n140343105630728 [label="*"]
+	n140343105600648 -> n140343105630728
+	n140343105632128 [label="+"]
+	n140343105600648 -> n140343105632128
+	n140343105633360 [label="+"]
+	n140343105600648 -> n140343105633360
+	n140343105630728 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105630728 -> n140343105954872
+	n140343105630784 [label=3]
+	n140343105630728 -> n140343105630784
+	n140343105630784 [label=3]
+	n140343105632128 [label="+"]
+	n140343105631960 [label="*"]
+	n140343105632128 -> n140343105631960
+	n140343105632184 [label=1]
+	n140343105632128 -> n140343105632184
+	n140343105631960 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105631960 -> n140343105954872
+	n140343105632016 [label=3]
+	n140343105631960 -> n140343105632016
+	n140343105632016 [label=3]
+	n140343105632184 [label=1]
+	n140343105633360 [label="+"]
+	n140343105633192 [label="*"]
+	n140343105633360 -> n140343105633192
+	n140343105633416 [label=2]
+	n140343105633360 -> n140343105633416
+	n140343105633192 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105633192 -> n140343105954872
+	n140343105633248 [label=3]
+	n140343105633192 -> n140343105633248
+	n140343105633248 [label=3]
+	n140343105633416 [label=2]
+	n140343105600760 [label=PropertyAccess]
+	n140343105889896 [label=velocity]
+	n140343105600760 -> n140343105889896
+	n140343105954872 [label="Iter(0)"]
+	n140343105600760 -> n140343105954872
+	n140343105630392 [label="*"]
+	n140343105600760 -> n140343105630392
+	n140343105631792 [label="+"]
+	n140343105600760 -> n140343105631792
+	n140343105633024 [label="+"]
+	n140343105600760 -> n140343105633024
+	n140343105630392 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105630392 -> n140343105954872
+	n140343105630448 [label=3]
+	n140343105630392 -> n140343105630448
+	n140343105630448 [label=3]
+	n140343105631792 [label="+"]
+	n140343105631624 [label="*"]
+	n140343105631792 -> n140343105631624
+	n140343105631848 [label=1]
+	n140343105631792 -> n140343105631848
+	n140343105631624 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105631624 -> n140343105954872
+	n140343105631680 [label=3]
+	n140343105631624 -> n140343105631680
+	n140343105631680 [label=3]
+	n140343105631848 [label=1]
+	n140343105633024 [label="+"]
+	n140343105632856 [label="*"]
+	n140343105633024 -> n140343105632856
+	n140343105633080 [label=2]
+	n140343105633024 -> n140343105633080
+	n140343105632856 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105632856 -> n140343105954872
+	n140343105632912 [label=3]
+	n140343105632856 -> n140343105632912
+	n140343105632912 [label=3]
+	n140343105633080 [label=2]
+	n140343105600872 [label="*"]
+	n140343105600928 [label=0.005]
+	n140343105600872 -> n140343105600928
+	n140343105600760 [label=PropertyAccess]
+	n140343105600872 -> n140343105600760
+	n140343105600928 [label=0.005]
+	n140343105601040 [label="+"]
+	n140343105600648 [label=PropertyAccess]
+	n140343105601040 -> n140343105600648
+	n140343105600872 [label="*"]
+	n140343105601040 -> n140343105600872
+	n140343105601264 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105601264 -> n140343105954872
+	n140343105601320 [label=3]
+	n140343105601264 -> n140343105601320
+	n140343105601320 [label=3]
+	n140343105631232 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105631232 -> n140343105954872
+	n140343105631288 [label=3]
+	n140343105631232 -> n140343105631288
+	n140343105631288 [label=3]
+	n140343105631400 [label="+"]
+	n140343105631232 [label="*"]
+	n140343105631400 -> n140343105631232
+	n140343105631456 [label=1]
+	n140343105631400 -> n140343105631456
+	n140343105631456 [label=1]
+	n140343105632464 [label="*"]
+	n140343105954872 [label="Iter(0)"]
+	n140343105632464 -> n140343105954872
+	n140343105632520 [label=3]
+	n140343105632464 -> n140343105632520
+	n140343105632520 [label=3]
+	n140343105632632 [label="+"]
+	n140343105632464 [label="*"]
+	n140343105632632 -> n140343105632464
+	n140343105632688 [label=2]
+	n140343105632632 -> n140343105632688
+	n140343105632688 [label=2]
+	n140343105601152 [label=Assign]
+	n140343105631120 [label=VectorAccess]
+	n140343105601152 -> n140343105631120
+	n140343105630336 [label=VectorAccess]
+	n140343105601152 -> n140343105630336
+	n140343105632352 [label=VectorAccess]
+	n140343105601152 -> n140343105632352
+	n140343105631568 [label=VectorAccess]
+	n140343105601152 -> n140343105631568
+	n140343105633584 [label=VectorAccess]
+	n140343105601152 -> n140343105633584
+	n140343105632800 [label=VectorAccess]
+	n140343105601152 -> n140343105632800
+	n140343105631120 [label=VectorAccess]
+	n140343105600648 [label=PropertyAccess]
+	n140343105631120 -> n140343105600648
+	n140343105630336 [label=VectorAccess]
+	n140343105601040 [label="+"]
+	n140343105630336 -> n140343105601040
+	n140343105632352 [label=VectorAccess]
+	n140343105600648 [label=PropertyAccess]
+	n140343105632352 -> n140343105600648
+	n140343105631568 [label=VectorAccess]
+	n140343105601040 [label="+"]
+	n140343105631568 -> n140343105601040
+	n140343105633584 [label=VectorAccess]
+	n140343105600648 [label=PropertyAccess]
+	n140343105633584 -> n140343105600648
+	n140343105632800 [label=VectorAccess]
+	n140343105601040 [label="+"]
+	n140343105632800 -> n140343105601040
 }
diff --git a/examples/kernels.pdf b/examples/kernels.pdf
index 56dd14b421cb95edcb4f5acd752c28738c52aa3f..f16bb711858657aee5396a32b5e93be43df0a19d 100644
GIT binary patch
delta 27590
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
JmQ<EP`d|K}TJ!(_

delta 27816
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

diff --git a/examples/lj_func.py b/examples/lj_func.py
index 162d88d..61c8119 100644
--- a/examples/lj_func.py
+++ b/examples/lj_func.py
@@ -31,5 +31,6 @@ psim.periodic(2.8)
 psim.vtk_output("output/test")
 psim.compute(lj, cutoff_radius, {'sigma6': sigma6, 'epsilon': epsilon})
 psim.compute(euler, symbols={'dt': dt})
-psim.target(pairs.target_gpu())
+psim.target(pairs.target_cpu())
+#psim.target(pairs.target_gpu())
 psim.generate()
diff --git a/examples/lj_ns.cpp b/examples/lj_ns.cpp
index a0c06bf..c9cccf4 100644
--- a/examples/lj_ns.cpp
+++ b/examples/lj_ns.cpp
@@ -671,8 +671,8 @@ int main() {
     int *numneighs = (int *) malloc((sizeof(int) * particle_capacity));
     int *pbc_map = (int *) malloc((sizeof(int) * pbc_capacity));
     int *pbc_mult = (int *) malloc((sizeof(int) * (pbc_capacity * 3)));
-    unsigned long long int prop_hflags[1] = {18446744073709551615};
-    unsigned long long int prop_dflags[1] = {0};
+    unsigned long long int prop_hflags[1] = {18446744073709551615ULL};
+    unsigned long long int prop_dflags[1] = {0ULL};
     double *mass = (double *) malloc((sizeof(double) * (particle_capacity + pbc_capacity)));
     ps->addProperty(Property(0, "mass", mass, Prop_Float));
     double *position = (double *) malloc((sizeof(double) * ((particle_capacity + pbc_capacity) * 3)));
@@ -871,28 +871,28 @@ int main() {
         prop_hflags[0] = e531;
         module_0(neighborlist_capacity, nlocal, neighborlists, numneighs, position, force);
         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;
         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 e534 = a132 & 8;
+        const unsigned long long int e534 = a132 & 2;
         const bool e535 = e534 == 0;
         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 e536 = a133 & 2;
+        const unsigned long long int e536 = a133 & 4;
         const bool e537 = e536 == 0;
         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 e538 = a134 & 4;
+        const unsigned long long int e538 = a134 & 1;
         const bool e539 = e538 == 0;
         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 e540 = a136 | 15;
diff --git a/setup.py b/setup.py
index 09e8506..018a268 100644
--- a/setup.py
+++ b/setup.py
@@ -7,6 +7,7 @@ def readme():
 
 
 modules = [
+    'analysis',
     'code_gen',
     'coupling',
     'graph',
diff --git a/src/pairs/analysis/__init__.py b/src/pairs/analysis/__init__.py
new file mode 100644
index 0000000..5cd89c2
--- /dev/null
+++ b/src/pairs/analysis/__init__.py
@@ -0,0 +1,28 @@
+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()
diff --git a/src/pairs/analysis/bin_ops.py b/src/pairs/analysis/bin_ops.py
new file mode 100644
index 0000000..3750caa
--- /dev/null
+++ b/src/pairs/analysis/bin_ops.py
@@ -0,0 +1,54 @@
+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):
+    def __init__(self, ast):
+        super().__init__(ast)
+        self.bin_ops = []
+
+    def visit_BinOp(self, ast_node):
+        ast_node.decl.used = True
+        self.visit_children(ast_node)
+
+    def visit_Decl(self, ast_node):
+        pass
+
+    def visit_PropertyAccess(self, ast_node):
+        ast_node.decl.used = True
+        self.visit_children(ast_node)
diff --git a/src/pairs/transformations/LICM.py b/src/pairs/analysis/blocks.py
similarity index 56%
rename from src/pairs/transformations/LICM.py
rename to src/pairs/analysis/blocks.py
index 264aa37..ec4b7b6 100644
--- a/src/pairs/transformations/LICM.py
+++ b/src/pairs/analysis/blocks.py
@@ -1,7 +1,5 @@
-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
 from pairs.ir.visitor import Visitor
 
 
@@ -121,99 +119,3 @@ class SetParentBlock(Visitor):
         assert isinstance(ast_node, (For, While)), "Node must be a loop!"
         loop_id = id(ast_node)
         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()
diff --git a/src/pairs/analysis/modules.py b/src/pairs/analysis/modules.py
new file mode 100644
index 0000000..4da4846
--- /dev/null
+++ b/src/pairs/analysis/modules.py
@@ -0,0 +1,34 @@
+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)
diff --git a/src/pairs/sim/simulation.py b/src/pairs/sim/simulation.py
index 5aa9c4c..d5ad6fe 100644
--- a/src/pairs/sim/simulation.py
+++ b/src/pairs/sim/simulation.py
@@ -20,15 +20,7 @@ from pairs.sim.read_from_file import ReadFromFile
 from pairs.sim.timestep import Timestep
 from pairs.sim.variables import VariablesDecl
 from pairs.sim.vtk import VTKWrite
-from pairs.transformations.add_device_copies import AddDeviceCopies
-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
+from pairs.transformations import Transformations
 
 
 class Simulation:
@@ -248,22 +240,10 @@ class Simulation:
         ])
 
         program = Module(self, name='main', block=Block.merge_blocks(decls, body))
-        if self._target.is_gpu():
-            add_copies = AddDeviceCopies(program)
-
-        # Transformations
-        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()
+
+        # Apply transformations
+        transformations = Transformations(program, self._target)
+        transformations.apply_all()
 
         # For this part on, all bin ops are generated without usage verification
         self.check_decl_usage = False
diff --git a/src/pairs/transformations/__init__.py b/src/pairs/transformations/__init__.py
index e69de29..edd3b33 100644
--- a/src/pairs/transformations/__init__.py
+++ b/src/pairs/transformations/__init__.py
@@ -0,0 +1,66 @@
+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()
diff --git a/src/pairs/transformations/merge_adjacent_blocks.py b/src/pairs/transformations/blocks.py
similarity index 85%
rename from src/pairs/transformations/merge_adjacent_blocks.py
rename to src/pairs/transformations/blocks.py
index 1095144..e2f7964 100644
--- a/src/pairs/transformations/merge_adjacent_blocks.py
+++ b/src/pairs/transformations/blocks.py
@@ -18,8 +18,3 @@ class MergeAdjacentBlocks(Mutator):
 
         ast_node.stmts = new_stmts 
         return ast_node
-
-
-def merge_adjacent_blocks(ast):
-    merge = MergeAdjacentBlocks(ast)
-    merge.mutate()
diff --git a/src/pairs/transformations/add_device_copies.py b/src/pairs/transformations/devices.py
similarity index 100%
rename from src/pairs/transformations/add_device_copies.py
rename to src/pairs/transformations/devices.py
diff --git a/src/pairs/transformations/prioritize_scalar_ops.py b/src/pairs/transformations/expressions.py
similarity index 64%
rename from src/pairs/transformations/prioritize_scalar_ops.py
rename to src/pairs/transformations/expressions.py
index f43637d..068f434 100644
--- a/src/pairs/transformations/prioritize_scalar_ops.py
+++ b/src/pairs/transformations/expressions.py
@@ -1,8 +1,45 @@
 from pairs.ir.bin_op import BinOp
+from pairs.ir.lit import Lit
 from pairs.ir.mutator import Mutator
 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):
     def __init__(self, ast):
         super().__init__(ast)
@@ -43,8 +80,3 @@ class PrioritizeScalarOps(Mutator):
                     #return BinOp(sim, rhs.rhs, BinOp(sim, rhs.lhs, lhs, op), op)
 
         return ast_node
-
-
-def prioritize_scalar_ops(ast_node):
-    prioritize = PrioritizeScalarOps(ast_node)
-    prioritize.mutate()
diff --git a/src/pairs/transformations/loops.py b/src/pairs/transformations/loops.py
new file mode 100644
index 0000000..1b3c3b5
--- /dev/null
+++ b/src/pairs/transformations/loops.py
@@ -0,0 +1,53 @@
+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
diff --git a/src/pairs/transformations/lower.py b/src/pairs/transformations/lower.py
index c2fb14f..7bb0c47 100644
--- a/src/pairs/transformations/lower.py
+++ b/src/pairs/transformations/lower.py
@@ -13,11 +13,3 @@ class Lower(Mutator):
             return ast_node.lower()
 
         return ast_node
-
-
-def lower_everything(ast):
-    nlowered = 1
-    while nlowered > 0:
-        lower = Lower(ast)
-        lower.mutate()
-        nlowered = lower.lowered_nodes
diff --git a/src/pairs/transformations/modules.py b/src/pairs/transformations/modules.py
index d2a0127..a0801d5 100644
--- a/src/pairs/transformations/modules.py
+++ b/src/pairs/transformations/modules.py
@@ -11,45 +11,11 @@ from pairs.ir.mutator import Mutator
 from pairs.ir.properties import UpdateProperty
 from pairs.ir.types import Types
 from pairs.ir.variables import Var, Deref
-from pairs.ir.visitor import Visitor
 from functools import reduce
 import operator
 
 
-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)
-
-
-class AddDereferencesToWriteVariables(Mutator):
+class DereferenceWriteVariables(Mutator):
     def __init__(self, ast):
         super().__init__(ast)
         self.module_stack = []
@@ -153,11 +119,14 @@ class AddResizeLogic(Mutator):
 
 
 class ReplaceModulesByCalls(Mutator):
-    def __init__(self, ast, module_resizes, grow_fn=None):
+    def __init__(self, ast, grow_fn=None):
         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)
 
+    def set_module_resizes(self, module_resizes):
+        self.module_resizes = module_resizes
+
     def mutate_Module(self, ast_node):
         ast_node._block = self.mutate(ast_node._block)
         if ast_node.name == 'main':
@@ -194,14 +163,3 @@ class ReplaceModulesByCalls(Mutator):
             return Block(sim, init_stmts + [While(sim, branch_cond, Block(sim, reset_stmts + [call] + resize_stmts))])
 
         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()
diff --git a/src/pairs/transformations/replace_symbols.py b/src/pairs/transformations/replace_symbols.py
deleted file mode 100644
index a23a5a2..0000000
--- a/src/pairs/transformations/replace_symbols.py
+++ /dev/null
@@ -1,14 +0,0 @@
-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()
diff --git a/src/pairs/transformations/set_used_bin_ops.py b/src/pairs/transformations/set_used_bin_ops.py
deleted file mode 100644
index ac26bf1..0000000
--- a/src/pairs/transformations/set_used_bin_ops.py
+++ /dev/null
@@ -1,22 +0,0 @@
-from pairs.ir.visitor import Visitor
-
-
-class SetUsedBinOps(Visitor):
-    def __init__(self, ast):
-        super().__init__(ast)
-        self.bin_ops = []
-
-    def visit_BinOp(self, ast_node):
-        ast_node.decl.used = True
-        self.visit_children(ast_node)
-
-    def visit_Decl(self, ast_node):
-        pass
-
-    def visit_PropertyAccess(self, ast_node):
-        ast_node.decl.used = True
-        self.visit_children(ast_node)
-
-def set_used_bin_ops(ast):
-    set_used_binops = SetUsedBinOps(ast)
-    set_used_binops.visit()
diff --git a/src/pairs/transformations/simplify.py b/src/pairs/transformations/simplify.py
deleted file mode 100644
index 4491f2c..0000000
--- a/src/pairs/transformations/simplify.py
+++ /dev/null
@@ -1,36 +0,0 @@
-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()
-- 
GitLab