Line data Source code
1 : //===- MetadataImpl.h - Helpers for implementing metadata -----------------===//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 : //
10 : // This file has private helpers for implementing metadata types.
11 : //
12 : //===----------------------------------------------------------------------===//
13 :
14 : #ifndef LLVM_IR_METADATAIMPL_H
15 : #define LLVM_IR_METADATAIMPL_H
16 :
17 : #include "llvm/ADT/DenseSet.h"
18 : #include "llvm/IR/Metadata.h"
19 :
20 : namespace llvm {
21 :
22 : template <class T, class InfoT>
23 : static T *getUniqued(DenseSet<T *, InfoT> &Store,
24 : const typename InfoT::KeyTy &Key) {
25 : auto I = Store.find_as(Key);
26 5383316 : return I == Store.end() ? nullptr : *I;
27 : }
28 :
29 : template <class T> T *MDNode::storeImpl(T *N, StorageType Storage) {
30 4178 : switch (Storage) {
31 : case Uniqued:
32 : llvm_unreachable("Cannot unique without a uniquing-store");
33 4061 : case Distinct:
34 4061 : N->storeDistinctInContext();
35 : break;
36 : case Temporary:
37 : break;
38 : }
39 : return N;
40 : }
41 :
42 : template <class T, class StoreT>
43 2276934 : T *MDNode::storeImpl(T *N, StorageType Storage, StoreT &Store) {
44 2276934 : switch (Storage) {
45 1736982 : case Uniqued:
46 : Store.insert(N);
47 1736982 : break;
48 320860 : case Distinct:
49 320860 : N->storeDistinctInContext();
50 320860 : break;
51 : case Temporary:
52 : break;
53 : }
54 2276934 : return N;
55 : }
56 :
57 : } // end namespace llvm
58 :
59 : #endif
|