Beispiel #1
0
    def __init__(self, compiler, exgraph, ioinfo):
        self.compiler = compiler
        self.exgraph = exgraph
        self.ioinfo = ioinfo

        self.compatible = UnionFind()

        self.samplers = UnionFind()

        self.readFields = set()
        self.modifiedFields = set()

        self.liveInputs = set()
        self.liveOutputs = set()

        self.ioRefs = {}

        self.inputFields = set()

        self.locals = set()

        self.holdingCount = collections.defaultdict(lambda: 0)

        self.typeIDs = {}
        self.typeUID = 0

        self.samplerGroups = {}
Beispiel #2
0
	def __init__(self, compiler, dataflow, exgraph):
		TypeDispatcher.__init__(self)
		self.compiler = compiler
		self.dataflow = dataflow

		self.compatable = UnionFind()

		self.loads  = []
		self.stores = []

		self.fields = {}

		self.exgraph = exgraph
Beispiel #3
0
    def __init__(self, exgraph, ioinfo):
        self.exgraph = exgraph
        self.ioinfo = ioinfo
        self.poolInfos = {}
        self.fieldInfos = {}
        self.typeIDs = {}
        self.uid = 0

        self.dirty = set()

        self.lut = SubpoolLUT()

        self.compatable = UnionFind()

        self.active = True
Beispiel #4
0
    def __init__(self, compiler, prgm, exgraph):
        TypeDispatcher.__init__(self)
        self.compiler = compiler
        self.prgm = prgm

        self.compatable = UnionFind()

        self.loads = []
        self.stores = []

        self.fields = {}

        self.exgraph = exgraph

        self.ssaBroken = False
Beispiel #5
0
def partitionGraph(G):
    u = UnionFind()
    for node, next in G.iteritems():
        u.union(node, *next)

    mapping = {}
    for node in G.iterkeys():
        mapping[node] = u[node]

    domain = set(mapping.itervalues())

    groups = setgraph(domain)

    for node, group in mapping.iteritems():
        groups[group].add(node)

    for d in domain:
        assert d in groups

    return domain, groups, mapping
Beispiel #6
0
 def __init__(self):
     self.unify = UnionFind()
     self.unifyGroups = {}
     self.dirty = set()
Beispiel #7
0
    def postProcess(self):
        # Reconstruct field transform info from ioinfo structure.
        groups = collections.defaultdict(list)

        for field, ioname in self.ioinfo.fieldTrans.iteritems():
            otherio = self.ioinfo.same[ioname]

            if ioname in self.liveInputs or otherio in self.liveInputs:
                groups[ioname].append(field)
                self.inputFields.add(field)
                #print field, ioname, otherio

        self.merged = UnionFind()
        for group in groups.itervalues():
            self.merged.union(*group)
            # TODO only live fields are "compatible"?
            self.compatible.union(*group)

        if False:
            print "Compatible fields"
            for name, group in model.reindexUnionFind(
                    self.compatible).iteritems():
                print name
                for field in group:
                    print '\t', field
            print

            print "Merged fields"
            for name, group in model.reindexUnionFind(self.merged).iteritems():
                if len(group) > 1:
                    print name
                    for field in group:
                        print '\t', field
            print

            print "Holding"
            for name, count in self.holdingCount.iteritems():
                print name, count
            print

        # Build sampler groups
        uid = 0
        for name, group in model.reindexUnionFind(self.samplers).iteritems():
            sg = model.SamplerGroup(name, group, uid)
            self.samplerGroups[name] = sg
            uid += 1

        self.volatileFields = set()
        self.volatileIntrinsics = set()

        #print "Volatile"
        for field in self.modifiedFields:
            obj = field.object
            if self.holdingCount[obj] > 1:
                if intrinsics.isIntrinsicSlot(field):
                    #print "obj", obj
                    self.volatileIntrinsics.add(obj)
                else:
                    #print "field", field
                    self.volatileFields.add(self.compatible[field])
        #print

        singleCopy = 0
        multiCopy = 0
        singleton = 0
        pool = 0

        for name, count in self.holdingCount.iteritems():
            if name in self.volatileIntrinsics or name in self.samplers:
                if count > 1:
                    pool += 1
                else:
                    singleton += 1
            else:
                if count > 1:
                    multiCopy += 1
                else:
                    singleCopy += 1

        print
        print singleCopy
        print multiCopy
        print singleton
        print pool
        print

        uib = UniformInterfaceBuilder(self.compiler, self)
        self.ioRefInfo = uib.process()
        return self
Beispiel #8
0
 def __init__(self):
     self.group = UnionFind()
Beispiel #9
0
lut = {}
for i, d in enumerate(order):
    lut[d] = i

#lut = fuzzyorder.composeMappings(mapping, lut)

ordereddata = fuzzyorder.translateData(data, lut)

fuzzyorder.printViolations(ordereddata)
print "Domains: ", fuzzyorder.mappingResultSize(lut)

sys.exit()

G = setgraph(domain)
B = setgraph(domain)
u = UnionFind()

for rank, renames in data.iteritems():
    for rename in renames:
        for k, v in rename.iteritems():
            G[k].add(v)
            B[v].add(k)
            u.union(k, v)

# Find the disjoint subgraphs
groupmap = {}
for d in domain:
    groupmap[d] = u[d]
groupnames = set(groupmap.itervalues())

groups = setgraph(groupnames)