예제 #1
0
 def default(self, n, live):
     if isinstance(n, ArithInstr):
         n.live = live | free_vars(n.lhs) \
                  | reduce(lambda a,b: a | b,
                           [free_vars(r) for r in n.rhs],
                           set([]))
         return n.live
     else:
         n.live = Visitor.default(self, n, live)
         return n.live
예제 #2
0
 def default(self, n, live):
     if isinstance(n, ArithInstr):
         n.live = live | free_vars(n.lhs) \
                  | reduce(lambda a,b: a | b,
                           [free_vars(r) for r in n.rhs],
                           set([]))
         return n.live
     else:
         n.live = Visitor.default(self, n, live)
         return n.live
예제 #3
0
 def visitIndirectCallX86(self, n, live):
     n.live = live | free_vars(n.funptr)
     return n.live
예제 #4
0
 def visitReturn(self, n, live):
     n.live = free_vars(n.value)
     return n.live
예제 #5
0
 def visitSetIfNotEqInstr(self, n, live):
     n.live = live - free_vars(n.lhs)
     return n.live
예제 #6
0
 def visitIntMoveZeroExtendInstr(self, n, live):
     n.live = (live - free_vars(n.lhs)) | free_vars(n.rhs[0])
     return n.live
예제 #7
0
 def visitIntNotInstr(self, n, live):
     n.live = live | free_vars(n.lhs)
     return n.live
예제 #8
0
 def visitIf(self, n, live):
     then_live = self.dispatch(n.tests[0][1], live)
     else_live = self.dispatch(n.else_, live)
     n.live = then_live | else_live | free_vars(n.tests[0][0])
     return n.live
예제 #9
0
 def visitIndirectCallX86(self, n, live):
     n.live = live | free_vars(n.funptr)
     return n.live
예제 #10
0
 def visitReturn(self, n, live):
     n.live = free_vars(n.value)
     return n.live
예제 #11
0
 def visitSetIfNotEqInstr(self, n, live):
     n.live = live - free_vars(n.lhs)
     return n.live
예제 #12
0
 def visitIntMoveZeroExtendInstr(self, n, live):
     n.live = (live - free_vars(n.lhs)) | free_vars(n.rhs[0])
     return n.live
예제 #13
0
 def visitIntNotInstr(self, n, live):
     n.live = live | free_vars(n.lhs)
     return n.live
예제 #14
0
 def visitIf(self, n, live):
     then_live = self.dispatch(n.tests[0][1], live)
     else_live = self.dispatch(n.else_, live)
     n.live = then_live | else_live | free_vars(n.tests[0][0])
     return n.live