LLVM  6.0.0svn
TypeStreamMerger.h
Go to the documentation of this file.
1 //===- TypeStreamMerger.h ---------------------------------------*- 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 #ifndef LLVM_DEBUGINFO_CODEVIEW_TYPESTREAMMERGER_H
11 #define LLVM_DEBUGINFO_CODEVIEW_TYPESTREAMMERGER_H
12 
13 #include "llvm/ADT/ArrayRef.h"
14 #include "llvm/ADT/SmallVector.h"
16 #include "llvm/Support/Error.h"
17 
18 namespace llvm {
19 namespace codeview {
20 
21 class TypeIndex;
22 class TypeTableBuilder;
23 
24 /// \brief Merge one set of type records into another. This method assumes
25 /// that all records are type records, and there are no Id records present.
26 ///
27 /// \param Dest The table to store the re-written type records into.
28 ///
29 /// \param SourceToDest A vector, indexed by the TypeIndex in the source
30 /// type stream, that contains the index of the corresponding type record
31 /// in the destination stream.
32 ///
33 /// \param Types The collection of types to merge in.
34 ///
35 /// \returns Error::success() if the operation succeeded, otherwise an
36 /// appropriate error code.
37 Error mergeTypeRecords(TypeTableBuilder &Dest,
38  SmallVectorImpl<TypeIndex> &SourceToDest,
39  const CVTypeArray &Types);
40 
41 /// \brief Merge one set of id records into another. This method assumes
42 /// that all records are id records, and there are no Type records present.
43 /// However, since Id records can refer back to Type records, this method
44 /// assumes that the referenced type records have also been merged into
45 /// another type stream (for example using the above method), and accepts
46 /// the mapping from source to dest for that stream so that it can re-write
47 /// the type record mappings accordingly.
48 ///
49 /// \param Dest The table to store the re-written id records into.
50 ///
51 /// \param Types The mapping to use for the type records that these id
52 /// records refer to.
53 ///
54 /// \param SourceToDest A vector, indexed by the TypeIndex in the source
55 /// id stream, that contains the index of the corresponding id record
56 /// in the destination stream.
57 ///
58 /// \param Ids The collection of id records to merge in.
59 ///
60 /// \returns Error::success() if the operation succeeded, otherwise an
61 /// appropriate error code.
62 Error mergeIdRecords(TypeTableBuilder &Dest, ArrayRef<TypeIndex> Types,
63  SmallVectorImpl<TypeIndex> &SourceToDest,
64  const CVTypeArray &Ids);
65 
66 /// \brief Merge a unified set of type and id records, splitting them into
67 /// separate output streams.
68 ///
69 /// \param DestIds The table to store the re-written id records into.
70 ///
71 /// \param DestTypes the table to store the re-written type records into.
72 ///
73 /// \param SourceToDest A vector, indexed by the TypeIndex in the source
74 /// id stream, that contains the index of the corresponding id record
75 /// in the destination stream.
76 ///
77 /// \param IdsAndTypes The collection of id records to merge in.
78 ///
79 /// \returns Error::success() if the operation succeeded, otherwise an
80 /// appropriate error code.
81 Error mergeTypeAndIdRecords(TypeTableBuilder &DestIds,
82  TypeTableBuilder &DestTypes,
83  SmallVectorImpl<TypeIndex> &SourceToDest,
84  const CVTypeArray &IdsAndTypes);
85 
86 } // end namespace codeview
87 } // end namespace llvm
88 
89 #endif // LLVM_DEBUGINFO_CODEVIEW_TYPESTREAMMERGER_H
Error mergeTypeRecords(TypeTableBuilder &Dest, SmallVectorImpl< TypeIndex > &SourceToDest, const CVTypeArray &Types)
Merge one set of type records into another.
Compute iterated dominance frontiers using a linear time algorithm.
Definition: AllocatorList.h:24
VarStreamArray< CVType > CVTypeArray
Definition: TypeRecord.h:43
Error mergeTypeAndIdRecords(TypeTableBuilder &DestIds, TypeTableBuilder &DestTypes, SmallVectorImpl< TypeIndex > &SourceToDest, const CVTypeArray &IdsAndTypes)
Merge a unified set of type and id records, splitting them into separate output streams.
Error mergeIdRecords(TypeTableBuilder &Dest, ArrayRef< TypeIndex > Types, SmallVectorImpl< TypeIndex > &SourceToDest, const CVTypeArray &Ids)
Merge one set of id records into another.