brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 382e23d Raw
78 lines · python
1import json2from isl import *3 4 5class Scop:6    def __init__(self, filename):7        f = open(filename, "r")8        self.json = json.load(f)9        return10 11    def __str__(self):12        return json.dumps(self.json, indent=2)13 14    def __repr__(self):15        return str(self)16 17    @property18    def statements(self):19        return self.json["statements"]20 21 22class Transforms:23    """24    Create a map that interchanges two dimensions 'A' and 'B'25 26    numberDimensions: The overall number of dimensions27    dimensionA: The dimension of dimension 'A'28    dimensionB: The dimension of dimension 'B'29 30    getInterchange(2, 0, 1):31    {[d0, d1] -> [d1, d0]}32    """33 34    @staticmethod35    def getInterchange(numberDimensions, dimensionA, dimensionB):36 37        dims = ["d" + str(i) for i in range(numberDimensions)]38        dimString = ",".join(dims)39 40        changedDims = dims41        first = dims[dimensionA]42        second = dims[dimensionB]43        changedDims[dimensionA] = second44        changedDims[dimensionB] = first45        changedDimString = ",".join(changedDims)46 47        return Map("{[%s] -> [%s]}" % (dimString, changedDimString))48 49    """50  Create a map that strip mines one dimension51 52  numberDimensions: The overall number of dimensions53  stripMineDim: The dimension to strip mine54  factor: The strip mining factor55 56  getStripMine(2, 1, 64):57  {[d0, d1] -> [d0, o, d1] : o % 64 = 0 and o <= d1 <= d1 + 63}58  """59 60    @staticmethod61    def getStripMine(numberDimensions, stripMineDim, factor):62 63        dims = ["d" + str(i) for i in range(numberDimensions)]64        dimString = ",".join(dims)65 66        changedDims = dims67        smd = dims[stripMineDim]68        changedDims[stripMineDim] = "o,%s" % smd69        changedDimString = ",".join(changedDims)70        string = "{[%s] -> [%s]: o %% %i = 0 and o <= %s <= o + %i}" % (71            dimString,72            changedDimString,73            factor,74            smd,75            factor - 1,76        )77        return Map(string)78