def visit_Assign(self, stmt):
     
    lhs_names = collect_binding_names(stmt.lhs)
    rhs_names = collect_var_names(stmt.rhs)
   
    for x in lhs_names:
      dependencies = self.depends_on.get(x, set([]))
      dependencies.update(rhs_names)
      self.depends_on[x] = dependencies

    if any(x in self.volatile_vars for x in rhs_names):
      self.volatile_vars.update(lhs_names)
    elif self.is_mutable_alloc(stmt.rhs):
      if len(lhs_names) == 1 and \
         len(self.may_alias.get(lhs_names[0], [])) <= 1:
        pass
      else:
        self.volatile_vars.update(lhs_names)
    # mark any array writes as volatile 
    if stmt.lhs.__class__ is Index:
      assert stmt.lhs.value.__class__ is Var, \
        "Expected LHS array to be variable but instead got %s" % stmt  
      self.volatile_vars.add(stmt.lhs.value.name)
      #print 
      #print "STMT", stmt
      #print "lhs names", lhs_names 
      #print "rhs names", rhs_names 
      #print "volatile vars", self.volatile_vars
      #print
dataset/ETHPy150Open iskandr/parakeet/parakeet/transforms/licm.py/Find_LICM_Candidates.visit_Assign/original