'This is a backward lookup in the previous defs.
:param addr_list: a list of normalized addresses.
Note that, as we are using VSA, it is possible that @a is affected by several definitions.
:returns:        a dict {stmt:labels} where label is the number of individual addresses of addr_list (or the
actual set of addresses depending on the keep_addrs flag) that are definted by stmt.'

def _def_lookup(self, live_defs, variable):

    prevdefs = {}
    if (variable in live_defs):
        code_loc_set = live_defs[variable]
        for code_loc in code_loc_set:
            if isinstance(variable, SimMemoryVariable):
                type_ = 'mem'
            elif isinstance(variable, SimRegisterVariable):
                type_ = 'reg'
            else:
                raise AngrDDGError(('Unknown    variable    type    %s' % type(variable)))
            if (self.keep_data is True):
                data = variable
                prevdefs[code_loc] = {'type': type_, 'data': data}
            else:
                if (code_loc in prevdefs):
                    count = (prevdefs[code_loc]['count'] + 1)
                else:
                    count = 0
                prevdefs[code_loc] = {'type': type_, 'count': count}
    return prevdefs
