annotate polly/utils/pyscop/pyscop.py @ 181:df311c476dd5

CreateIdentifierInfo in ParseCbC (not yet worked)
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 31 May 2020 12:30:11 +0900
parents 1d019706d866
children 1f2b6ac9f198
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 import json
anatofuz
parents:
diff changeset
2 from isl import *
anatofuz
parents:
diff changeset
3
anatofuz
parents:
diff changeset
4 class Scop:
anatofuz
parents:
diff changeset
5 def __init__(self, filename):
anatofuz
parents:
diff changeset
6 f = open(filename, 'r')
anatofuz
parents:
diff changeset
7 self.json = json.load(f)
anatofuz
parents:
diff changeset
8 return
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10 def __str__(self):
anatofuz
parents:
diff changeset
11 return json.dumps(self.json, indent=2)
anatofuz
parents:
diff changeset
12
anatofuz
parents:
diff changeset
13 def __repr__(self):
anatofuz
parents:
diff changeset
14 return str(self)
anatofuz
parents:
diff changeset
15
anatofuz
parents:
diff changeset
16 @property
anatofuz
parents:
diff changeset
17 def statements(self):
anatofuz
parents:
diff changeset
18 return self.json['statements']
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 class Transforms:
anatofuz
parents:
diff changeset
21 """
anatofuz
parents:
diff changeset
22 Create a map that interchanges two dimensions 'A' and 'B'
anatofuz
parents:
diff changeset
23
anatofuz
parents:
diff changeset
24 numberDimensions: The overall number of dimensions
anatofuz
parents:
diff changeset
25 dimensionA: The dimension of dimension 'A'
anatofuz
parents:
diff changeset
26 dimensionB: The dimension of dimension 'B'
anatofuz
parents:
diff changeset
27
anatofuz
parents:
diff changeset
28 getInterchange(2, 0, 1):
anatofuz
parents:
diff changeset
29 {[d0, d1] -> [d1, d0]}
anatofuz
parents:
diff changeset
30 """
anatofuz
parents:
diff changeset
31 @staticmethod
anatofuz
parents:
diff changeset
32 def getInterchange(numberDimensions, dimensionA, dimensionB):
anatofuz
parents:
diff changeset
33
anatofuz
parents:
diff changeset
34 dims = ['d' + str(i) for i in range(numberDimensions)]
anatofuz
parents:
diff changeset
35 dimString = ",".join(dims)
anatofuz
parents:
diff changeset
36
anatofuz
parents:
diff changeset
37 changedDims = dims
anatofuz
parents:
diff changeset
38 first = dims[dimensionA]
anatofuz
parents:
diff changeset
39 second = dims[dimensionB]
anatofuz
parents:
diff changeset
40 changedDims[dimensionA] = second
anatofuz
parents:
diff changeset
41 changedDims[dimensionB] = first
anatofuz
parents:
diff changeset
42 changedDimString = ",".join(changedDims)
anatofuz
parents:
diff changeset
43
anatofuz
parents:
diff changeset
44 return Map("{[%s] -> [%s]}" % (dimString, changedDimString))
anatofuz
parents:
diff changeset
45
anatofuz
parents:
diff changeset
46 """
anatofuz
parents:
diff changeset
47 Create a map that strip mines one dimension
anatofuz
parents:
diff changeset
48
anatofuz
parents:
diff changeset
49 numberDimensions: The overall number of dimensions
anatofuz
parents:
diff changeset
50 stripMineDim: The dimension to strip mine
anatofuz
parents:
diff changeset
51 factor: The strip mining factor
anatofuz
parents:
diff changeset
52
anatofuz
parents:
diff changeset
53 getStripMine(2, 1, 64):
anatofuz
parents:
diff changeset
54 {[d0, d1] -> [d0, o, d1] : o % 64 = 0 and o <= d1 <= d1 + 63}
anatofuz
parents:
diff changeset
55 """
anatofuz
parents:
diff changeset
56 @staticmethod
anatofuz
parents:
diff changeset
57 def getStripMine(numberDimensions, stripMineDim, factor):
anatofuz
parents:
diff changeset
58
anatofuz
parents:
diff changeset
59 dims = ['d' + str(i) for i in range(numberDimensions)]
anatofuz
parents:
diff changeset
60 dimString = ",".join(dims)
anatofuz
parents:
diff changeset
61
anatofuz
parents:
diff changeset
62 changedDims = dims
anatofuz
parents:
diff changeset
63 smd = dims[stripMineDim]
anatofuz
parents:
diff changeset
64 changedDims[stripMineDim] = "o,%s" % smd
anatofuz
parents:
diff changeset
65 changedDimString = ",".join(changedDims)
anatofuz
parents:
diff changeset
66 string = "{[%s] -> [%s]: o %% %i = 0 and o <= %s <= o + %i}" % \
anatofuz
parents:
diff changeset
67 (dimString, changedDimString, factor, smd, factor - 1)
anatofuz
parents:
diff changeset
68 return Map(string)