diff options
| author | Tobias Grosser <grosser@fim.uni-passau.de> | 2011-04-29 06:27:02 +0000 |
|---|---|---|
| committer | Tobias Grosser <grosser@fim.uni-passau.de> | 2011-04-29 06:27:02 +0000 |
| commit | 758053788bde4747953f5f276ded345cd01323b1 (patch) | |
| tree | 02f38df95a5327cb8644906d148b5bd8facf63f9 /polly/utils/pyscop/pyscop.py | |
| parent | 011eae75123217b9125270ae08132a308cee7061 (diff) | |
| download | bcm5719-llvm-758053788bde4747953f5f276ded345cd01323b1.tar.gz bcm5719-llvm-758053788bde4747953f5f276ded345cd01323b1.zip | |
Add initial version of Polly
This version is equivalent to commit ba26ebece8f5be84e9bd6315611d412af797147e
in the old git repository.
llvm-svn: 130476
Diffstat (limited to 'polly/utils/pyscop/pyscop.py')
| -rw-r--r-- | polly/utils/pyscop/pyscop.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/polly/utils/pyscop/pyscop.py b/polly/utils/pyscop/pyscop.py new file mode 100644 index 00000000000..a7c34815a21 --- /dev/null +++ b/polly/utils/pyscop/pyscop.py @@ -0,0 +1,68 @@ +import json +from isl import * + +class Scop: + def __init__(self, filename): + f = open(filename, 'r') + self.json = json.load(f) + return + + def __str__(self): + return json.dumps(self.json, indent=2) + + def __repr__(self): + return str(self) + + @property + def statements(self): + return self.json['statements'] + +class Transforms: + """ + Create a map that interchanges two dimensions 'A' and 'B' + + numberDimensions: The overall number of dimensions + dimensionA: The dimension of dimension 'A' + dimensionB: The dimension of dimension 'B' + + getInterchange(2, 0, 1): + {[d0, d1] -> [d1, d0]} + """ + @staticmethod + def getInterchange(numberDimensions, dimensionA, dimensionB): + + dims = ['d' + str(i) for i in range(numberDimensions)] + dimString = ",".join(dims) + + changedDims = dims + first = dims[dimensionA] + second = dims[dimensionB] + changedDims[dimensionA] = second + changedDims[dimensionB] = first + changedDimString = ",".join(changedDims) + + return Map("{[%s] -> [%s]}" % (dimString, changedDimString)) + + """ + Create a map that strip mines one dimension + + numberDimensions: The overall number of dimensions + stripMineDim: The dimension to strip mine + factor: The strip mining factor + + getStripMine(2, 1, 64): + {[d0, d1] -> [d0, o, d1] : o % 64 = 0 and o <= d1 <= d1 + 63} + """ + @staticmethod + def getStripMine(numberDimensions, stripMineDim, factor): + + dims = ['d' + str(i) for i in range(numberDimensions)] + dimString = ",".join(dims) + + changedDims = dims + smd = dims[stripMineDim] + changedDims[stripMineDim] = "o,%s" % smd + changedDimString = ",".join(changedDims) + string = "{[%s] -> [%s]: o %% %i = 0 and o <= %s <= o + %i}" % \ + (dimString, changedDimString, factor, smd, factor - 1) + return Map(string) |

