Go over the variable information in variable manager for this function, and return all uninitialized
        register/stack variables.

        :return:

def _analyze_function(self):
        """
        Go over the variable information in variable manager for this function, and return all uninitialized
        register/stack variables.

        :return:
        """

        if not self._function.is_simprocedure \
                and not self._function.is_plt \
                and not self._variable_manager.has_function_manager(self._function.addr):
            l.warning("Please run variable recovery on %s before analyzing its calling conventions.",
                      repr(self._function))
            return None

        vm = self._variable_manager[self._function.addr]

        input_variables = vm.input_variables()

        input_args = self._args_from_vars(input_variables)

        # TODO: properly decide sp_delta
        sp_delta = self.project.arch.bytes if self.project.arch.call_pushes_ret else 0

        cc = SimCC.find_cc(self.project.arch, list(input_args), sp_delta)

        if cc is None:
            l.warning('_analyze_function(): Cannot find a calling convention that fits the given arguments.')

        return cc