Commit 82759127 authored by Richard Torenvliet's avatar Richard Torenvliet

tried to implement gen and kill set, commented implementation

parent 870d25ee
...@@ -26,37 +26,37 @@ class BasicBlock(Block): ...@@ -26,37 +26,37 @@ class BasicBlock(Block):
self.dominates.append(block) self.dominates.append(block)
block.dominated_by.append(self) block.dominated_by.append(self)
def get_gen(self):
for s in self.statements: # def get_gen(self):
if s.is_arith(): # for s in self.statements:
self.gen_set.add(s[0]) # if s.is_arith():
print 'added: ', s[0] # self.gen_set.add(s[0])
# print 'added: ', s[0]
return self.gen_set #
# return self.gen_set
def get_kill(self): #
# if self.edges_from != []: # def get_kill(self):
for backw in self.edges_from: ## if self.edges_from != []:
self.kill_set = self.kill_set | backw.get_kill() #
# for backw in self.edges_from:
self.kill_set = self.kill_set - self.get_gen() # self.kill_set = self.gen_set & backw.kill_set
print 'get_kill_set', self.kill_set #
return self.kill_set # self.kill_set = self.kill_set - self.get_gen()
# print 'get_kill_set', self.kill_set
def get_in(self): # return self.kill_set
for backw in self.edges_from:
self.in_set = self.in_set | backw.get_out() # def get_in(self):
print 'in_set', self.in_set # for backw in self.edges_from:
return self.in_set # self.in_set = self.in_set | backw.out_set
# print 'in_set', self.in_set
def get_out(self): # return self.in_set
print 'gen_set', self.gen_set
print 'get_in', self.get_in() # def get_out(self):
print 'get_kill', self.get_kill() # print 'gen_set', self.gen_set
self.out_set = self.gen_set | (self.get_in() - self.get_kill()) # print 'get_in', self.get_in()
# print 'get_kill', self.get_kill()
def reaching_definition(blocks): # self.out_set = self.gen_set | (self.get_in() - self.get_kill())
generate_flow_graph(blocks)
......
...@@ -43,14 +43,21 @@ class TestDataflow(unittest.TestCase): ...@@ -43,14 +43,21 @@ class TestDataflow(unittest.TestCase):
# #
# blocks = [b1, b2] # blocks = [b1, b2]
# #
# # initialize out[B] = gen[B] for every block
# for block in blocks: # for block in blocks:
# block.out_set = block.get_gen() # block.out_set = block.get_gen()
# print 'block.out_set', block.out_set # print 'block.out_set', block.out_set
#
# generate_flow_graph(blocks) # generate_flow_graph(blocks)
# print b1.get_gen()
# print b2.get_gen() # change = True
# print b2.get_out() # while change:
# for i, block in enumerate(blocks):
# block.get_in()
# oldout = block.out_set
# newout = block.get_out()
# if (block.out_set == block.get_out()):
# change = False
def test_generate_flow_graph_simple(self): def test_generate_flow_graph_simple(self):
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment