comparison lib/IR/Comdat.cpp @ 147:c2174574ed3a

LLVM 10
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 14 Aug 2019 16:55:33 +0900
parents 803732b1fca8
children
comparison
equal deleted inserted replaced
134:3a76565eade5 147:c2174574ed3a
1 //===- Comdat.cpp - Implement Metadata classes ----------------------------===// 1 //===- Comdat.cpp - Implement Metadata classes ----------------------------===//
2 // 2 //
3 // The LLVM Compiler Infrastructure 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // 4 // See https://llvm.org/LICENSE.txt for license information.
5 // This file is distributed under the University of Illinois Open Source 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 // License. See LICENSE.TXT for details.
7 // 6 //
8 //===----------------------------------------------------------------------===// 7 //===----------------------------------------------------------------------===//
9 // 8 //
10 // This file implements the Comdat class. 9 // This file implements the Comdat class (including the C bindings).
11 // 10 //
12 //===----------------------------------------------------------------------===// 11 //===----------------------------------------------------------------------===//
13 12
14 #include "llvm/IR/Comdat.h" 13 #include "llvm-c/Comdat.h"
15 #include "llvm/ADT/StringMap.h" 14 #include "llvm/ADT/StringMap.h"
16 #include "llvm/ADT/StringRef.h" 15 #include "llvm/ADT/StringRef.h"
16 #include "llvm/IR/Comdat.h"
17 #include "llvm/IR/GlobalObject.h"
18 #include "llvm/IR/Module.h"
17 19
18 using namespace llvm; 20 using namespace llvm;
19 21
20 Comdat::Comdat(Comdat &&C) : Name(C.Name), SK(C.SK) {} 22 Comdat::Comdat(Comdat &&C) : Name(C.Name), SK(C.SK) {}
21 23
22 Comdat::Comdat() = default; 24 Comdat::Comdat() = default;
23 25
24 StringRef Comdat::getName() const { return Name->first(); } 26 StringRef Comdat::getName() const { return Name->first(); }
27
28 LLVMComdatRef LLVMGetOrInsertComdat(LLVMModuleRef M, const char *Name) {
29 return wrap(unwrap(M)->getOrInsertComdat(Name));
30 }
31
32 LLVMComdatRef LLVMGetComdat(LLVMValueRef V) {
33 GlobalObject *G = unwrap<GlobalObject>(V);
34 return wrap(G->getComdat());
35 }
36
37 void LLVMSetComdat(LLVMValueRef V, LLVMComdatRef C) {
38 GlobalObject *G = unwrap<GlobalObject>(V);
39 G->setComdat(unwrap(C));
40 }
41
42 LLVMComdatSelectionKind LLVMGetComdatSelectionKind(LLVMComdatRef C) {
43 switch (unwrap(C)->getSelectionKind()) {
44 case Comdat::Any:
45 return LLVMAnyComdatSelectionKind;
46 case Comdat::ExactMatch:
47 return LLVMExactMatchComdatSelectionKind;
48 case Comdat::Largest:
49 return LLVMLargestComdatSelectionKind;
50 case Comdat::NoDuplicates:
51 return LLVMNoDuplicatesComdatSelectionKind;
52 case Comdat::SameSize:
53 return LLVMSameSizeComdatSelectionKind;
54 }
55 llvm_unreachable("Invalid Comdat SelectionKind!");
56 }
57
58 void LLVMSetComdatSelectionKind(LLVMComdatRef C, LLVMComdatSelectionKind kind) {
59 Comdat *Cd = unwrap(C);
60 switch (kind) {
61 case LLVMAnyComdatSelectionKind:
62 Cd->setSelectionKind(Comdat::Any);
63 break;
64 case LLVMExactMatchComdatSelectionKind:
65 Cd->setSelectionKind(Comdat::ExactMatch);
66 break;
67 case LLVMLargestComdatSelectionKind:
68 Cd->setSelectionKind(Comdat::Largest);
69 break;
70 case LLVMNoDuplicatesComdatSelectionKind:
71 Cd->setSelectionKind(Comdat::NoDuplicates);
72 break;
73 case LLVMSameSizeComdatSelectionKind:
74 Cd->setSelectionKind(Comdat::SameSize);
75 break;
76 }
77 }