code: def add_metadata(self, operands):
          
          if not isinstance(operands, (list, tuple)):
              raise TypeError("expected a list or tuple of metadata values, "
                              "got %r" % (operands,))
          operands = self._fix_metadata_operands(operands)
          key = tuple(operands)
          if key not in self._metadatacache:
              n = len(self.metadata)
              md = values.MDValue(self, operands, name=str(n))
              self._metadatacache[key] = md
          else:
              md = self._metadatacache[key]
          return md
docs: Add an unnamed metadata to the module with the given *operands*
          (a sequence of values) or return a previous equivalent metadata.
          A MDValue instance is returned, it can then be associated to
          e.g. an instruction.