[DeLICM] Introduce unittesting infrastructure for Known and Written. NFC.
[polly-mirror.git] / utils / pyscop / pyscop.py
bloba7c34815a21bfc121f61d7c78f731f0e5f86ad58
1 import json
2 from isl import *
4 class Scop:
5 def __init__(self, filename):
6 f = open(filename, 'r')
7 self.json = json.load(f)
8 return
10 def __str__(self):
11 return json.dumps(self.json, indent=2)
13 def __repr__(self):
14 return str(self)
16 @property
17 def statements(self):
18 return self.json['statements']
20 class Transforms:
21 """
22 Create a map that interchanges two dimensions 'A' and 'B'
24 numberDimensions: The overall number of dimensions
25 dimensionA: The dimension of dimension 'A'
26 dimensionB: The dimension of dimension 'B'
28 getInterchange(2, 0, 1):
29 {[d0, d1] -> [d1, d0]}
30 """
31 @staticmethod
32 def getInterchange(numberDimensions, dimensionA, dimensionB):
34 dims = ['d' + str(i) for i in range(numberDimensions)]
35 dimString = ",".join(dims)
37 changedDims = dims
38 first = dims[dimensionA]
39 second = dims[dimensionB]
40 changedDims[dimensionA] = second
41 changedDims[dimensionB] = first
42 changedDimString = ",".join(changedDims)
44 return Map("{[%s] -> [%s]}" % (dimString, changedDimString))
46 """
47 Create a map that strip mines one dimension
49 numberDimensions: The overall number of dimensions
50 stripMineDim: The dimension to strip mine
51 factor: The strip mining factor
53 getStripMine(2, 1, 64):
54 {[d0, d1] -> [d0, o, d1] : o % 64 = 0 and o <= d1 <= d1 + 63}
55 """
56 @staticmethod
57 def getStripMine(numberDimensions, stripMineDim, factor):
59 dims = ['d' + str(i) for i in range(numberDimensions)]
60 dimString = ",".join(dims)
62 changedDims = dims
63 smd = dims[stripMineDim]
64 changedDims[stripMineDim] = "o,%s" % smd
65 changedDimString = ",".join(changedDims)
66 string = "{[%s] -> [%s]: o %% %i = 0 and o <= %s <= o + %i}" % \
67 (dimString, changedDimString, factor, smd, factor - 1)
68 return Map(string)