blob: 3f7b64307dac3c0bed0d7f340ec708ba6e5ce417 [file] [log] [blame]
Mehdi Aminief27db82016-12-12 19:34:26 +00001//===-- Bitcode/Reader/MetadataLoader.h - Load Metadatas -------*- C++ -*-====//
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 class handles loading Metadatas.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_BITCODE_READER_METADATALOADER_H
15#define LLVM_LIB_BITCODE_READER_METADATALOADER_H
16
17#include "llvm/ADT/SmallVector.h"
18#include "llvm/Support/Error.h"
19
20#include <functional>
21#include <memory>
22
23namespace llvm {
24class BitcodeReaderValueList;
25class BitstreamCursor;
26class DISubprogram;
27class Error;
28class Function;
29class Instruction;
30class Metadata;
31class MDNode;
32class Module;
33class Type;
34
35/// Helper class that handles loading Metadatas and keeping them available.
36class MetadataLoader {
37 class MetadataLoaderImpl;
38 std::unique_ptr<MetadataLoaderImpl> Pimpl;
39 Error parseMetadata(bool ModuleLevel);
40
41public:
42 ~MetadataLoader();
43 MetadataLoader(BitstreamCursor &Stream, Module &TheModule,
44 BitcodeReaderValueList &ValueList,
45 std::function<Type *(unsigned)> getTypeByID);
46 MetadataLoader &operator=(MetadataLoader &&);
47 MetadataLoader(MetadataLoader &&);
48
49 // Parse a module metadata block
50 Error parseModuleMetadata() { return parseMetadata(true); }
51
52 // Parse a function metadata block
53 Error parseFunctionMetadata() { return parseMetadata(false); }
54
55 // Return true there are remaining unresolved forward references.
56 bool hasFwdRefs() const;
57
58 /// Return the given metadata, creating a replaceable forward reference if
59 /// necessary.
60 Metadata *getMetadataFwdRef(unsigned Idx);
61
62 MDNode *getMDNodeFwdRefOrNull(unsigned Idx);
63
64 /// Return the DISubprogra metadata for a Function if any, null otherwise.
65 DISubprogram *lookupSubprogramForFunction(Function *F);
66
67 /// Parse a `METADATA_ATTACHMENT` block for a function.
68 Error parseMetadataAttachment(
69 Function &F, const SmallVectorImpl<Instruction *> &InstructionList);
70
71 /// Parse a `METADATA_KIND` block for the current module.
72 Error parseMetadataKinds();
73
74 unsigned size() const;
75 void shrinkTo(unsigned N);
76};
77}
78
79#endif // LLVM_LIB_BITCODE_READER_METADATALOADER_H