Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/IR/MetadataImpl.h
35233 views
1
//===- MetadataImpl.h - Helpers for implementing metadata -----------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file has private helpers for implementing metadata types.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_IR_METADATAIMPL_H
14
#define LLVM_IR_METADATAIMPL_H
15
16
#include "llvm/ADT/DenseSet.h"
17
#include "llvm/IR/Metadata.h"
18
19
namespace llvm {
20
21
template <class T, class InfoT>
22
static T *getUniqued(DenseSet<T *, InfoT> &Store,
23
const typename InfoT::KeyTy &Key) {
24
auto I = Store.find_as(Key);
25
return I == Store.end() ? nullptr : *I;
26
}
27
28
template <class T> T *MDNode::storeImpl(T *N, StorageType Storage) {
29
switch (Storage) {
30
case Uniqued:
31
llvm_unreachable("Cannot unique without a uniquing-store");
32
case Distinct:
33
N->storeDistinctInContext();
34
break;
35
case Temporary:
36
break;
37
}
38
return N;
39
}
40
41
template <class T, class StoreT>
42
T *MDNode::storeImpl(T *N, StorageType Storage, StoreT &Store) {
43
switch (Storage) {
44
case Uniqued:
45
Store.insert(N);
46
break;
47
case Distinct:
48
N->storeDistinctInContext();
49
break;
50
case Temporary:
51
break;
52
}
53
return N;
54
}
55
56
} // end namespace llvm
57
58
#endif
59
60