diff options
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) |

