Mercurial > hg > CbC > CbC_llvm
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 } |