//===-- AssignGUID.cpp - Unique identifier assignment pass ------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file provides a pass which assigns GUID (globally unique identifier)
// metadata to every GlobalValue in the module, according to its current name,
// linkage, and originating file. It is idempotent -- if GUID metadata is
// already present, it does nothing.
//
//===----------------------------------------------------------------------===//

#include "llvm/Transforms/Utils/AssignGUID.h"

using namespace llvm;

void AssignGUIDPass::runOnModule(Module &M) {
  for (auto &GV : M.globals()) {
    if (GV.isDeclaration())
      continue;
    GV.assignGUID();
  }
  for (auto &F : M.functions()) {
    if (F.isDeclaration())
      continue;
    F.assignGUID();
  }
}

void AssignGUIDPass::assignGUIDForMergedGV(GlobalVariable &GV) {
  // FIXME: merging adds all the guids of the original GVs. We currently drop
  // that metadata from GV first, but we may want to remember those later, if
  // we had a motivation for that. In that case, we need some other metadata
  // to maintain that association.
  GV.eraseMetadata(LLVMContext::MD_guid);
  GV.assignGUID();
}
