1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- //===- Comdat.cpp - Implement Metadata classes ----------------------------===//
- //
- // 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 implements the Comdat class (including the C bindings).
- //
- //===----------------------------------------------------------------------===//
- #include "llvm-c/Comdat.h"
- #include "llvm/ADT/SmallPtrSet.h"
- #include "llvm/ADT/StringMapEntry.h"
- #include "llvm/ADT/StringRef.h"
- #include "llvm/IR/Comdat.h"
- #include "llvm/IR/GlobalObject.h"
- #include "llvm/IR/Module.h"
- #include "llvm/IR/Value.h"
- using namespace llvm;
- Comdat::Comdat(Comdat &&C) : Name(C.Name), SK(C.SK) {}
- Comdat::Comdat() = default;
- StringRef Comdat::getName() const { return Name->first(); }
- void Comdat::addUser(GlobalObject *GO) { Users.insert(GO); }
- void Comdat::removeUser(GlobalObject *GO) { Users.erase(GO); }
- LLVMComdatRef LLVMGetOrInsertComdat(LLVMModuleRef M, const char *Name) {
- return wrap(unwrap(M)->getOrInsertComdat(Name));
- }
- LLVMComdatRef LLVMGetComdat(LLVMValueRef V) {
- GlobalObject *G = unwrap<GlobalObject>(V);
- return wrap(G->getComdat());
- }
- void LLVMSetComdat(LLVMValueRef V, LLVMComdatRef C) {
- GlobalObject *G = unwrap<GlobalObject>(V);
- G->setComdat(unwrap(C));
- }
- LLVMComdatSelectionKind LLVMGetComdatSelectionKind(LLVMComdatRef C) {
- switch (unwrap(C)->getSelectionKind()) {
- case Comdat::Any:
- return LLVMAnyComdatSelectionKind;
- case Comdat::ExactMatch:
- return LLVMExactMatchComdatSelectionKind;
- case Comdat::Largest:
- return LLVMLargestComdatSelectionKind;
- case Comdat::NoDeduplicate:
- return LLVMNoDeduplicateComdatSelectionKind;
- case Comdat::SameSize:
- return LLVMSameSizeComdatSelectionKind;
- }
- llvm_unreachable("Invalid Comdat SelectionKind!");
- }
- void LLVMSetComdatSelectionKind(LLVMComdatRef C, LLVMComdatSelectionKind kind) {
- Comdat *Cd = unwrap(C);
- switch (kind) {
- case LLVMAnyComdatSelectionKind:
- Cd->setSelectionKind(Comdat::Any);
- break;
- case LLVMExactMatchComdatSelectionKind:
- Cd->setSelectionKind(Comdat::ExactMatch);
- break;
- case LLVMLargestComdatSelectionKind:
- Cd->setSelectionKind(Comdat::Largest);
- break;
- case LLVMNoDeduplicateComdatSelectionKind:
- Cd->setSelectionKind(Comdat::NoDeduplicate);
- break;
- case LLVMSameSizeComdatSelectionKind:
- Cd->setSelectionKind(Comdat::SameSize);
- break;
- }
- }
|