annotate lib/IR/DIBuilder.cpp @ 148:63bd29f05246

merged
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 14 Aug 2019 19:46:37 +0900
parents c2174574ed3a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 //===--- DIBuilder.cpp - Debug Information Builder ------------------------===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 //
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 // This file implements the DIBuilder.
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 //
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 //===----------------------------------------------------------------------===//
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
13 #include "llvm/IR/DIBuilder.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
14 #include "llvm/IR/IRBuilder.h"
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
15 #include "LLVMContextImpl.h"
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
16 #include "llvm/ADT/Optional.h"
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 #include "llvm/ADT/STLExtras.h"
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
18 #include "llvm/BinaryFormat/Dwarf.h"
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 #include "llvm/IR/Constants.h"
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
20 #include "llvm/IR/DebugInfo.h"
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 #include "llvm/IR/IntrinsicInst.h"
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 #include "llvm/IR/Module.h"
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 #include "llvm/Support/Debug.h"
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 using namespace llvm;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 using namespace llvm::dwarf;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
28 cl::opt<bool>
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
29 UseDbgAddr("use-dbg-addr",
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
30 llvm::cl::desc("Use llvm.dbg.addr for all local variables"),
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
31 cl::init(false), cl::Hidden);
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
32
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
33 DIBuilder::DIBuilder(Module &m, bool AllowUnresolvedNodes, DICompileUnit *CU)
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
34 : M(m), VMContext(M.getContext()), CUNode(CU),
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
35 DeclareFn(nullptr), ValueFn(nullptr), LabelFn(nullptr),
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
36 AllowUnresolvedNodes(AllowUnresolvedNodes) {}
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
38 void DIBuilder::trackIfUnresolved(MDNode *N) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
39 if (!N)
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
40 return;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
41 if (N->isResolved())
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
42 return;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
43
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
44 assert(AllowUnresolvedNodes && "Cannot handle unresolved nodes");
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
45 UnresolvedNodes.emplace_back(N);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
46 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
47
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
48 void DIBuilder::finalizeSubprogram(DISubprogram *SP) {
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
49 MDTuple *Temp = SP->getRetainedNodes().get();
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
50 if (!Temp || !Temp->isTemporary())
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
51 return;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
52
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
53 SmallVector<Metadata *, 16> RetainedNodes;
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
54
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
55 auto PV = PreservedVariables.find(SP);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
56 if (PV != PreservedVariables.end())
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
57 RetainedNodes.append(PV->second.begin(), PV->second.end());
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
58
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
59 auto PL = PreservedLabels.find(SP);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
60 if (PL != PreservedLabels.end())
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
61 RetainedNodes.append(PL->second.begin(), PL->second.end());
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
62
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
63 DINodeArray Node = getOrCreateArray(RetainedNodes);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
64
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
65 TempMDTuple(Temp)->replaceAllUsesWith(Node.get());
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
66 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
67
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 void DIBuilder::finalize() {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
69 if (!CUNode) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
70 assert(!AllowUnresolvedNodes &&
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
71 "creating type nodes without a CU is not supported");
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
72 return;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
73 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
74
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
75 CUNode->replaceEnumTypes(MDTuple::get(VMContext, AllEnumTypes));
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
77 SmallVector<Metadata *, 16> RetainValues;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 // Declarations and definitions of the same type may be retained. Some
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 // clients RAUW these pairs, leaving duplicates in the retained types
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 // list. Use a set to remove the duplicates while we transform the
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 // TrackingVHs back into Values.
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
82 SmallPtrSet<Metadata *, 16> RetainSet;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 for (unsigned I = 0, E = AllRetainTypes.size(); I < E; I++)
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
84 if (RetainSet.insert(AllRetainTypes[I]).second)
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 RetainValues.push_back(AllRetainTypes[I]);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
86
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
87 if (!RetainValues.empty())
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
88 CUNode->replaceRetainedTypes(MDTuple::get(VMContext, RetainValues));
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
90 DISubprogramArray SPs = MDTuple::get(VMContext, AllSubprograms);
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
91 for (auto *SP : SPs)
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
92 finalizeSubprogram(SP);
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
93 for (auto *N : RetainValues)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
94 if (auto *SP = dyn_cast<DISubprogram>(N))
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
95 finalizeSubprogram(SP);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
97 if (!AllGVs.empty())
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
98 CUNode->replaceGlobalVariables(MDTuple::get(VMContext, AllGVs));
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
100 if (!AllImportedModules.empty())
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
101 CUNode->replaceImportedEntities(MDTuple::get(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
102 VMContext, SmallVector<Metadata *, 16>(AllImportedModules.begin(),
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
103 AllImportedModules.end())));
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
104
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
105 for (const auto &I : AllMacrosPerParent) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
106 // DIMacroNode's with nullptr parent are DICompileUnit direct children.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
107 if (!I.first) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
108 CUNode->replaceMacros(MDTuple::get(VMContext, I.second.getArrayRef()));
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
109 continue;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
110 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
111 // Otherwise, it must be a temporary DIMacroFile that need to be resolved.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
112 auto *TMF = cast<DIMacroFile>(I.first);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
113 auto *MF = DIMacroFile::get(VMContext, dwarf::DW_MACINFO_start_file,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
114 TMF->getLine(), TMF->getFile(),
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
115 getOrCreateMacroArray(I.second.getArrayRef()));
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
116 replaceTemporary(llvm::TempDIMacroNode(TMF), MF);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
117 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
118
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
119 // Now that all temp nodes have been replaced or deleted, resolve remaining
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
120 // cycles.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
121 for (const auto &N : UnresolvedNodes)
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
122 if (N && !N->isResolved())
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
123 N->resolveCycles();
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
124 UnresolvedNodes.clear();
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
125
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
126 // Can't handle unresolved nodes anymore.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
127 AllowUnresolvedNodes = false;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
130 /// If N is compile unit return NULL otherwise return N.
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
131 static DIScope *getNonCompileUnitScope(DIScope *N) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
132 if (!N || isa<DICompileUnit>(N))
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
133 return nullptr;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
134 return cast<DIScope>(N);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
137 DICompileUnit *DIBuilder::createCompileUnit(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
138 unsigned Lang, DIFile *File, StringRef Producer, bool isOptimized,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
139 StringRef Flags, unsigned RunTimeVer, StringRef SplitName,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
140 DICompileUnit::DebugEmissionKind Kind, uint64_t DWOId,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
141 bool SplitDebugInlining, bool DebugInfoForProfiling,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
142 DICompileUnit::DebugNameTableKind NameTableKind, bool RangesBaseAddress) {
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
143
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
144 assert(((Lang <= dwarf::DW_LANG_Fortran08 && Lang >= dwarf::DW_LANG_C89) ||
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 (Lang <= dwarf::DW_LANG_hi_user && Lang >= dwarf::DW_LANG_lo_user)) &&
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 "Invalid Language tag");
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
148 assert(!CUNode && "Can only make one compile unit per DIBuilder instance");
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
149 CUNode = DICompileUnit::getDistinct(
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
150 VMContext, Lang, File, Producer, isOptimized, Flags, RunTimeVer,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
151 SplitName, Kind, nullptr, nullptr, nullptr, nullptr, nullptr, DWOId,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
152 SplitDebugInlining, DebugInfoForProfiling, NameTableKind,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
153 RangesBaseAddress);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 // Create a named metadata so that it is easier to find cu in a module.
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
156 NamedMDNode *NMD = M.getOrInsertNamedMetadata("llvm.dbg.cu");
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
157 NMD->addOperand(CUNode);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
158 trackIfUnresolved(CUNode);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
159 return CUNode;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
162 static DIImportedEntity *
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
163 createImportedModule(LLVMContext &C, dwarf::Tag Tag, DIScope *Context,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
164 Metadata *NS, DIFile *File, unsigned Line, StringRef Name,
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
165 SmallVectorImpl<TrackingMDNodeRef> &AllImportedModules) {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
166 if (Line)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
167 assert(File && "Source location has line number but no file");
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
168 unsigned EntitiesCount = C.pImpl->DIImportedEntitys.size();
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
169 auto *M = DIImportedEntity::get(C, Tag, Context, cast_or_null<DINode>(NS),
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
170 File, Line, Name);
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
171 if (EntitiesCount < C.pImpl->DIImportedEntitys.size())
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
172 // A new Imported Entity was just added to the context.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
173 // Add it to the Imported Modules list.
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
174 AllImportedModules.emplace_back(M);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175 return M;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
178 DIImportedEntity *DIBuilder::createImportedModule(DIScope *Context,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
179 DINamespace *NS, DIFile *File,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
180 unsigned Line) {
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
181 return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_module,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
182 Context, NS, File, Line, StringRef(),
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
183 AllImportedModules);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
186 DIImportedEntity *DIBuilder::createImportedModule(DIScope *Context,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
187 DIImportedEntity *NS,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
188 DIFile *File, unsigned Line) {
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
189 return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_module,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
190 Context, NS, File, Line, StringRef(),
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
191 AllImportedModules);
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
192 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
193
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
194 DIImportedEntity *DIBuilder::createImportedModule(DIScope *Context, DIModule *M,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
195 DIFile *File, unsigned Line) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
196 return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_module,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
197 Context, M, File, Line, StringRef(),
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
198 AllImportedModules);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
199 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
200
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
201 DIImportedEntity *DIBuilder::createImportedDeclaration(DIScope *Context,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
202 DINode *Decl,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
203 DIFile *File,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
204 unsigned Line,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
205 StringRef Name) {
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
206 // Make sure to use the unique identifier based metadata reference for
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
207 // types that have one.
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
208 return ::createImportedModule(VMContext, dwarf::DW_TAG_imported_declaration,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
209 Context, Decl, File, Line, Name,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
210 AllImportedModules);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
211 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
212
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
213 DIFile *DIBuilder::createFile(StringRef Filename, StringRef Directory,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
214 Optional<DIFile::ChecksumInfo<StringRef>> CS,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
215 Optional<StringRef> Source) {
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
216 return DIFile::get(VMContext, Filename, Directory, CS, Source);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
217 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
218
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
219 DIMacro *DIBuilder::createMacro(DIMacroFile *Parent, unsigned LineNumber,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
220 unsigned MacroType, StringRef Name,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
221 StringRef Value) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
222 assert(!Name.empty() && "Unable to create macro without name");
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
223 assert((MacroType == dwarf::DW_MACINFO_undef ||
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
224 MacroType == dwarf::DW_MACINFO_define) &&
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
225 "Unexpected macro type");
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
226 auto *M = DIMacro::get(VMContext, MacroType, LineNumber, Name, Value);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
227 AllMacrosPerParent[Parent].insert(M);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
228 return M;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
229 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
230
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
231 DIMacroFile *DIBuilder::createTempMacroFile(DIMacroFile *Parent,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
232 unsigned LineNumber, DIFile *File) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
233 auto *MF = DIMacroFile::getTemporary(VMContext, dwarf::DW_MACINFO_start_file,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
234 LineNumber, File, DIMacroNodeArray())
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
235 .release();
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
236 AllMacrosPerParent[Parent].insert(MF);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
237 // Add the new temporary DIMacroFile to the macro per parent map as a parent.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
238 // This is needed to assure DIMacroFile with no children to have an entry in
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
239 // the map. Otherwise, it will not be resolved in DIBuilder::finalize().
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
240 AllMacrosPerParent.insert({MF, {}});
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
241 return MF;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
244 DIEnumerator *DIBuilder::createEnumerator(StringRef Name, int64_t Val,
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
245 bool IsUnsigned) {
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 assert(!Name.empty() && "Unable to create enumerator without name");
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
247 return DIEnumerator::get(VMContext, Val, IsUnsigned, Name);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
250 DIBasicType *DIBuilder::createUnspecifiedType(StringRef Name) {
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 assert(!Name.empty() && "Unable to create type without name");
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
252 return DIBasicType::get(VMContext, dwarf::DW_TAG_unspecified_type, Name);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
253 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
255 DIBasicType *DIBuilder::createNullPtrType() {
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 return createUnspecifiedType("decltype(nullptr)");
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
259 DIBasicType *DIBuilder::createBasicType(StringRef Name, uint64_t SizeInBits,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
260 unsigned Encoding,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
261 DINode::DIFlags Flags) {
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 assert(!Name.empty() && "Unable to create type without name");
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
263 return DIBasicType::get(VMContext, dwarf::DW_TAG_base_type, Name, SizeInBits,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
264 0, Encoding, Flags);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
265 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
266
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
267 DIDerivedType *DIBuilder::createQualifiedType(unsigned Tag, DIType *FromTy) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
268 return DIDerivedType::get(VMContext, Tag, "", nullptr, 0, nullptr, FromTy, 0,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
269 0, 0, None, DINode::FlagZero);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
271
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
272 DIDerivedType *DIBuilder::createPointerType(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
273 DIType *PointeeTy,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
274 uint64_t SizeInBits,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
275 uint32_t AlignInBits,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
276 Optional<unsigned> DWARFAddressSpace,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
277 StringRef Name) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
278 // FIXME: Why is there a name here?
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
279 return DIDerivedType::get(VMContext, dwarf::DW_TAG_pointer_type, Name,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
280 nullptr, 0, nullptr, PointeeTy, SizeInBits,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
281 AlignInBits, 0, DWARFAddressSpace,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
282 DINode::FlagZero);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
285 DIDerivedType *DIBuilder::createMemberPointerType(DIType *PointeeTy,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
286 DIType *Base,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
287 uint64_t SizeInBits,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
288 uint32_t AlignInBits,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
289 DINode::DIFlags Flags) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
290 return DIDerivedType::get(VMContext, dwarf::DW_TAG_ptr_to_member_type, "",
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
291 nullptr, 0, nullptr, PointeeTy, SizeInBits,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
292 AlignInBits, 0, None, Flags, Base);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
295 DIDerivedType *DIBuilder::createReferenceType(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
296 unsigned Tag, DIType *RTy,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
297 uint64_t SizeInBits,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
298 uint32_t AlignInBits,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
299 Optional<unsigned> DWARFAddressSpace) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
300 assert(RTy && "Unable to create reference type");
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
301 return DIDerivedType::get(VMContext, Tag, "", nullptr, 0, nullptr, RTy,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
302 SizeInBits, AlignInBits, 0, DWARFAddressSpace,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
303 DINode::FlagZero);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
305
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
306 DIDerivedType *DIBuilder::createTypedef(DIType *Ty, StringRef Name,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
307 DIFile *File, unsigned LineNo,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
308 DIScope *Context) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
309 return DIDerivedType::get(VMContext, dwarf::DW_TAG_typedef, Name, File,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
310 LineNo, getNonCompileUnitScope(Context), Ty, 0, 0,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
311 0, None, DINode::FlagZero);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
313
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
314 DIDerivedType *DIBuilder::createFriend(DIType *Ty, DIType *FriendTy) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
315 assert(Ty && "Invalid type!");
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
316 assert(FriendTy && "Invalid friend type!");
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
317 return DIDerivedType::get(VMContext, dwarf::DW_TAG_friend, "", nullptr, 0, Ty,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
318 FriendTy, 0, 0, 0, None, DINode::FlagZero);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
320
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
321 DIDerivedType *DIBuilder::createInheritance(DIType *Ty, DIType *BaseTy,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
322 uint64_t BaseOffset,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
323 uint32_t VBPtrOffset,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
324 DINode::DIFlags Flags) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
325 assert(Ty && "Unable to create inheritance");
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
326 Metadata *ExtraData = ConstantAsMetadata::get(
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
327 ConstantInt::get(IntegerType::get(VMContext, 32), VBPtrOffset));
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
328 return DIDerivedType::get(VMContext, dwarf::DW_TAG_inheritance, "", nullptr,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
329 0, Ty, BaseTy, 0, 0, BaseOffset, None,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
330 Flags, ExtraData);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
332
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
333 DIDerivedType *DIBuilder::createMemberType(DIScope *Scope, StringRef Name,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
334 DIFile *File, unsigned LineNumber,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
335 uint64_t SizeInBits,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
336 uint32_t AlignInBits,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
337 uint64_t OffsetInBits,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
338 DINode::DIFlags Flags, DIType *Ty) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
339 return DIDerivedType::get(VMContext, dwarf::DW_TAG_member, Name, File,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
340 LineNumber, getNonCompileUnitScope(Scope), Ty,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
341 SizeInBits, AlignInBits, OffsetInBits, None, Flags);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
343
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
344 static ConstantAsMetadata *getConstantOrNull(Constant *C) {
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
345 if (C)
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
346 return ConstantAsMetadata::get(C);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
347 return nullptr;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
348 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
349
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
350 DIDerivedType *DIBuilder::createVariantMemberType(
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
351 DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
352 uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
353 Constant *Discriminant, DINode::DIFlags Flags, DIType *Ty) {
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
354 return DIDerivedType::get(VMContext, dwarf::DW_TAG_member, Name, File,
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
355 LineNumber, getNonCompileUnitScope(Scope), Ty,
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
356 SizeInBits, AlignInBits, OffsetInBits, None, Flags,
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
357 getConstantOrNull(Discriminant));
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
358 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
359
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
360 DIDerivedType *DIBuilder::createBitFieldMemberType(
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
361 DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
362 uint64_t SizeInBits, uint64_t OffsetInBits, uint64_t StorageOffsetInBits,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
363 DINode::DIFlags Flags, DIType *Ty) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
364 Flags |= DINode::FlagBitField;
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
365 return DIDerivedType::get(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
366 VMContext, dwarf::DW_TAG_member, Name, File, LineNumber,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
367 getNonCompileUnitScope(Scope), Ty, SizeInBits, /* AlignInBits */ 0,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
368 OffsetInBits, None, Flags,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
369 ConstantAsMetadata::get(ConstantInt::get(IntegerType::get(VMContext, 64),
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
370 StorageOffsetInBits)));
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
372
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
373 DIDerivedType *
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
374 DIBuilder::createStaticMemberType(DIScope *Scope, StringRef Name, DIFile *File,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
375 unsigned LineNumber, DIType *Ty,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
376 DINode::DIFlags Flags, llvm::Constant *Val,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
377 uint32_t AlignInBits) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
378 Flags |= DINode::FlagStaticMember;
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
379 return DIDerivedType::get(VMContext, dwarf::DW_TAG_member, Name, File,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
380 LineNumber, getNonCompileUnitScope(Scope), Ty, 0,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
381 AlignInBits, 0, None, Flags,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
382 getConstantOrNull(Val));
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
383 }
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
384
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
385 DIDerivedType *
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
386 DIBuilder::createObjCIVar(StringRef Name, DIFile *File, unsigned LineNumber,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
387 uint64_t SizeInBits, uint32_t AlignInBits,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
388 uint64_t OffsetInBits, DINode::DIFlags Flags,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
389 DIType *Ty, MDNode *PropertyNode) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
390 return DIDerivedType::get(VMContext, dwarf::DW_TAG_member, Name, File,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
391 LineNumber, getNonCompileUnitScope(File), Ty,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
392 SizeInBits, AlignInBits, OffsetInBits, None, Flags,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
393 PropertyNode);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
395
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
396 DIObjCProperty *
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
397 DIBuilder::createObjCProperty(StringRef Name, DIFile *File, unsigned LineNumber,
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 StringRef GetterName, StringRef SetterName,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
399 unsigned PropertyAttributes, DIType *Ty) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
400 return DIObjCProperty::get(VMContext, Name, File, LineNumber, GetterName,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
401 SetterName, PropertyAttributes, Ty);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
403
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
404 DITemplateTypeParameter *
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
405 DIBuilder::createTemplateTypeParameter(DIScope *Context, StringRef Name,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
406 DIType *Ty) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
407 assert((!Context || isa<DICompileUnit>(Context)) && "Expected compile unit");
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
408 return DITemplateTypeParameter::get(VMContext, Name, Ty);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
410
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
411 static DITemplateValueParameter *
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
412 createTemplateValueParameterHelper(LLVMContext &VMContext, unsigned Tag,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
413 DIScope *Context, StringRef Name, DIType *Ty,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
414 Metadata *MD) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
415 assert((!Context || isa<DICompileUnit>(Context)) && "Expected compile unit");
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
416 return DITemplateValueParameter::get(VMContext, Tag, Name, Ty, MD);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
417 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
418
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
419 DITemplateValueParameter *
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
420 DIBuilder::createTemplateValueParameter(DIScope *Context, StringRef Name,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
421 DIType *Ty, Constant *Val) {
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
422 return createTemplateValueParameterHelper(
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
423 VMContext, dwarf::DW_TAG_template_value_parameter, Context, Name, Ty,
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
424 getConstantOrNull(Val));
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
426
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
427 DITemplateValueParameter *
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
428 DIBuilder::createTemplateTemplateParameter(DIScope *Context, StringRef Name,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
429 DIType *Ty, StringRef Val) {
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
430 return createTemplateValueParameterHelper(
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
431 VMContext, dwarf::DW_TAG_GNU_template_template_param, Context, Name, Ty,
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
432 MDString::get(VMContext, Val));
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
434
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
435 DITemplateValueParameter *
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
436 DIBuilder::createTemplateParameterPack(DIScope *Context, StringRef Name,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
437 DIType *Ty, DINodeArray Val) {
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
438 return createTemplateValueParameterHelper(
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
439 VMContext, dwarf::DW_TAG_GNU_template_parameter_pack, Context, Name, Ty,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
440 Val.get());
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
442
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
443 DICompositeType *DIBuilder::createClassType(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
444 DIScope *Context, StringRef Name, DIFile *File, unsigned LineNumber,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
445 uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
446 DINode::DIFlags Flags, DIType *DerivedFrom, DINodeArray Elements,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
447 DIType *VTableHolder, MDNode *TemplateParams, StringRef UniqueIdentifier) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
448 assert((!Context || isa<DIScope>(Context)) &&
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 "createClassType should be called with a valid Context");
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
450
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
451 auto *R = DICompositeType::get(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
452 VMContext, dwarf::DW_TAG_structure_type, Name, File, LineNumber,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
453 getNonCompileUnitScope(Context), DerivedFrom, SizeInBits, AlignInBits,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
454 OffsetInBits, Flags, Elements, 0, VTableHolder,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
455 cast_or_null<MDTuple>(TemplateParams), UniqueIdentifier);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
456 trackIfUnresolved(R);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 return R;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
459
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
460 DICompositeType *DIBuilder::createStructType(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
461 DIScope *Context, StringRef Name, DIFile *File, unsigned LineNumber,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
462 uint64_t SizeInBits, uint32_t AlignInBits, DINode::DIFlags Flags,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
463 DIType *DerivedFrom, DINodeArray Elements, unsigned RunTimeLang,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
464 DIType *VTableHolder, StringRef UniqueIdentifier) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
465 auto *R = DICompositeType::get(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
466 VMContext, dwarf::DW_TAG_structure_type, Name, File, LineNumber,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
467 getNonCompileUnitScope(Context), DerivedFrom, SizeInBits, AlignInBits, 0,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
468 Flags, Elements, RunTimeLang, VTableHolder, nullptr, UniqueIdentifier);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
469 trackIfUnresolved(R);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 return R;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
471 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
472
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
473 DICompositeType *DIBuilder::createUnionType(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
474 DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
475 uint64_t SizeInBits, uint32_t AlignInBits, DINode::DIFlags Flags,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
476 DINodeArray Elements, unsigned RunTimeLang, StringRef UniqueIdentifier) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
477 auto *R = DICompositeType::get(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
478 VMContext, dwarf::DW_TAG_union_type, Name, File, LineNumber,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
479 getNonCompileUnitScope(Scope), nullptr, SizeInBits, AlignInBits, 0, Flags,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
480 Elements, RunTimeLang, nullptr, nullptr, UniqueIdentifier);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
481 trackIfUnresolved(R);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 return R;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
484
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
485 DICompositeType *DIBuilder::createVariantPart(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
486 DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
487 uint64_t SizeInBits, uint32_t AlignInBits, DINode::DIFlags Flags,
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
488 DIDerivedType *Discriminator, DINodeArray Elements, StringRef UniqueIdentifier) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
489 auto *R = DICompositeType::get(
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
490 VMContext, dwarf::DW_TAG_variant_part, Name, File, LineNumber,
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
491 getNonCompileUnitScope(Scope), nullptr, SizeInBits, AlignInBits, 0, Flags,
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
492 Elements, 0, nullptr, nullptr, UniqueIdentifier, Discriminator);
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
493 trackIfUnresolved(R);
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
494 return R;
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
495 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
496
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
497 DISubroutineType *DIBuilder::createSubroutineType(DITypeRefArray ParameterTypes,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
498 DINode::DIFlags Flags,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
499 unsigned CC) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
500 return DISubroutineType::get(VMContext, Flags, CC, ParameterTypes);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
502
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
503 DICompositeType *DIBuilder::createEnumerationType(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
504 DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNumber,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
505 uint64_t SizeInBits, uint32_t AlignInBits, DINodeArray Elements,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
506 DIType *UnderlyingType, StringRef UniqueIdentifier, bool IsScoped) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
507 auto *CTy = DICompositeType::get(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
508 VMContext, dwarf::DW_TAG_enumeration_type, Name, File, LineNumber,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
509 getNonCompileUnitScope(Scope), UnderlyingType, SizeInBits, AlignInBits, 0,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
510 IsScoped ? DINode::FlagEnumClass : DINode::FlagZero, Elements, 0, nullptr,
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
511 nullptr, UniqueIdentifier);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
512 AllEnumTypes.push_back(CTy);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
513 trackIfUnresolved(CTy);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 return CTy;
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
515 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
516
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
517 DICompositeType *DIBuilder::createArrayType(uint64_t Size,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
518 uint32_t AlignInBits, DIType *Ty,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
519 DINodeArray Subscripts) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
520 auto *R = DICompositeType::get(VMContext, dwarf::DW_TAG_array_type, "",
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
521 nullptr, 0, nullptr, Ty, Size, AlignInBits, 0,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
522 DINode::FlagZero, Subscripts, 0, nullptr);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
523 trackIfUnresolved(R);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
524 return R;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
525 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
526
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
527 DICompositeType *DIBuilder::createVectorType(uint64_t Size,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
528 uint32_t AlignInBits, DIType *Ty,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
529 DINodeArray Subscripts) {
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
530 auto *R = DICompositeType::get(VMContext, dwarf::DW_TAG_array_type, "",
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
531 nullptr, 0, nullptr, Ty, Size, AlignInBits, 0,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
532 DINode::FlagVector, Subscripts, 0, nullptr);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
533 trackIfUnresolved(R);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
534 return R;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
535 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
536
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
537 DISubprogram *DIBuilder::createArtificialSubprogram(DISubprogram *SP) {
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
538 auto NewSP = SP->cloneWithFlags(SP->getFlags() | DINode::FlagArtificial);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
539 return MDNode::replaceWithDistinct(std::move(NewSP));
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
540 }
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
541
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
542 static DIType *createTypeWithFlags(const DIType *Ty,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
543 DINode::DIFlags FlagsToSet) {
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
544 auto NewTy = Ty->cloneWithFlags(Ty->getFlags() | FlagsToSet);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
545 return MDNode::replaceWithUniqued(std::move(NewTy));
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
546 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
547
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
548 DIType *DIBuilder::createArtificialType(DIType *Ty) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
549 // FIXME: Restrict this to the nodes where it's valid.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
550 if (Ty->isArtificial())
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
551 return Ty;
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
552 return createTypeWithFlags(Ty, DINode::FlagArtificial);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
553 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
554
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
555 DIType *DIBuilder::createObjectPointerType(DIType *Ty) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
556 // FIXME: Restrict this to the nodes where it's valid.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
557 if (Ty->isObjectPointer())
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 return Ty;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
559 DINode::DIFlags Flags = DINode::FlagObjectPointer | DINode::FlagArtificial;
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
560 return createTypeWithFlags(Ty, Flags);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
561 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
562
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
563 void DIBuilder::retainType(DIScope *T) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
564 assert(T && "Expected non-null type");
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
565 assert((isa<DIType>(T) || (isa<DISubprogram>(T) &&
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
566 cast<DISubprogram>(T)->isDefinition() == false)) &&
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
567 "Expected type or subprogram declaration");
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
568 AllRetainTypes.emplace_back(T);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
570
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
571 DIBasicType *DIBuilder::createUnspecifiedParameter() { return nullptr; }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
572
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
573 DICompositeType *
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
574 DIBuilder::createForwardDecl(unsigned Tag, StringRef Name, DIScope *Scope,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
575 DIFile *F, unsigned Line, unsigned RuntimeLang,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
576 uint64_t SizeInBits, uint32_t AlignInBits,
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
577 StringRef UniqueIdentifier) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
578 // FIXME: Define in terms of createReplaceableForwardDecl() by calling
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
579 // replaceWithUniqued().
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
580 auto *RetTy = DICompositeType::get(
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
581 VMContext, Tag, Name, F, Line, getNonCompileUnitScope(Scope), nullptr,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
582 SizeInBits, AlignInBits, 0, DINode::FlagFwdDecl, nullptr, RuntimeLang,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
583 nullptr, nullptr, UniqueIdentifier);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
584 trackIfUnresolved(RetTy);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
585 return RetTy;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
586 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
587
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
588 DICompositeType *DIBuilder::createReplaceableCompositeType(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
589 unsigned Tag, StringRef Name, DIScope *Scope, DIFile *F, unsigned Line,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
590 unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
591 DINode::DIFlags Flags, StringRef UniqueIdentifier) {
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
592 auto *RetTy =
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
593 DICompositeType::getTemporary(
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
594 VMContext, Tag, Name, F, Line, getNonCompileUnitScope(Scope), nullptr,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
595 SizeInBits, AlignInBits, 0, Flags, nullptr, RuntimeLang, nullptr,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
596 nullptr, UniqueIdentifier)
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
597 .release();
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
598 trackIfUnresolved(RetTy);
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
599 return RetTy;
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
600 }
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
601
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
602 DINodeArray DIBuilder::getOrCreateArray(ArrayRef<Metadata *> Elements) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
603 return MDTuple::get(VMContext, Elements);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
604 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
605
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
606 DIMacroNodeArray
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
607 DIBuilder::getOrCreateMacroArray(ArrayRef<Metadata *> Elements) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
608 return MDTuple::get(VMContext, Elements);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
609 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
610
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
611 DITypeRefArray DIBuilder::getOrCreateTypeArray(ArrayRef<Metadata *> Elements) {
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
612 SmallVector<llvm::Metadata *, 16> Elts;
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
613 for (unsigned i = 0, e = Elements.size(); i != e; ++i) {
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
614 if (Elements[i] && isa<MDNode>(Elements[i]))
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
615 Elts.push_back(cast<DIType>(Elements[i]));
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
616 else
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
617 Elts.push_back(Elements[i]);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
618 }
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
619 return DITypeRefArray(MDNode::get(VMContext, Elts));
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
620 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
621
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
622 DISubrange *DIBuilder::getOrCreateSubrange(int64_t Lo, int64_t Count) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
623 return DISubrange::get(VMContext, Count, Lo);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
624 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
625
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
626 DISubrange *DIBuilder::getOrCreateSubrange(int64_t Lo, Metadata *CountNode) {
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
627 return DISubrange::get(VMContext, CountNode, Lo);
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
628 }
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
629
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
630 static void checkGlobalVariableScope(DIScope *Context) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
631 #ifndef NDEBUG
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
632 if (auto *CT =
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
633 dyn_cast_or_null<DICompositeType>(getNonCompileUnitScope(Context)))
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
634 assert(CT->getIdentifier().empty() &&
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
635 "Context of a global variable should not be a type with identifier");
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
636 #endif
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
637 }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
638
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
639 DIGlobalVariableExpression *DIBuilder::createGlobalVariableExpression(
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
640 DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
641 unsigned LineNumber, DIType *Ty, bool isLocalToUnit, DIExpression *Expr,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
642 MDNode *Decl, MDTuple *templateParams, uint32_t AlignInBits) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
643 checkGlobalVariableScope(Context);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
644
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
645 auto *GV = DIGlobalVariable::getDistinct(
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
646 VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
647 LineNumber, Ty, isLocalToUnit, true, cast_or_null<DIDerivedType>(Decl),
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
648 templateParams, AlignInBits);
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
649 if (!Expr)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
650 Expr = createExpression();
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
651 auto *N = DIGlobalVariableExpression::get(VMContext, GV, Expr);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
652 AllGVs.push_back(N);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
653 return N;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
654 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
655
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
656 DIGlobalVariable *DIBuilder::createTempGlobalVariableFwdDecl(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
657 DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
658 unsigned LineNumber, DIType *Ty, bool isLocalToUnit, MDNode *Decl,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
659 MDTuple *templateParams, uint32_t AlignInBits) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
660 checkGlobalVariableScope(Context);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
661
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
662 return DIGlobalVariable::getTemporary(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
663 VMContext, cast_or_null<DIScope>(Context), Name, LinkageName, F,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
664 LineNumber, Ty, isLocalToUnit, false,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
665 cast_or_null<DIDerivedType>(Decl), templateParams, AlignInBits)
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
666 .release();
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
667 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
668
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
669 static DILocalVariable *createLocalVariable(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
670 LLVMContext &VMContext,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
671 DenseMap<MDNode *, SmallVector<TrackingMDNodeRef, 1>> &PreservedVariables,
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
672 DIScope *Scope, StringRef Name, unsigned ArgNo, DIFile *File,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
673 unsigned LineNo, DIType *Ty, bool AlwaysPreserve, DINode::DIFlags Flags,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
674 uint32_t AlignInBits) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
675 // FIXME: Why getNonCompileUnitScope()?
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
676 // FIXME: Why is "!Context" okay here?
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
677 // FIXME: Why doesn't this check for a subprogram or lexical block (AFAICT
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
678 // the only valid scopes)?
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
679 DIScope *Context = getNonCompileUnitScope(Scope);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
680
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
681 auto *Node =
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
682 DILocalVariable::get(VMContext, cast_or_null<DILocalScope>(Context), Name,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
683 File, LineNo, Ty, ArgNo, Flags, AlignInBits);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
684 if (AlwaysPreserve) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
685 // The optimizer may remove local variables. If there is an interest
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
686 // to preserve variable info in such situation then stash it in a
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
687 // named mdnode.
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
688 DISubprogram *Fn = getDISubprogram(Scope);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
689 assert(Fn && "Missing subprogram for local variable");
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
690 PreservedVariables[Fn].emplace_back(Node);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
691 }
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
692 return Node;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
693 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
694
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
695 DILocalVariable *DIBuilder::createAutoVariable(DIScope *Scope, StringRef Name,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
696 DIFile *File, unsigned LineNo,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
697 DIType *Ty, bool AlwaysPreserve,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
698 DINode::DIFlags Flags,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
699 uint32_t AlignInBits) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
700 return createLocalVariable(VMContext, PreservedVariables, Scope, Name,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
701 /* ArgNo */ 0, File, LineNo, Ty, AlwaysPreserve,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
702 Flags, AlignInBits);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
703 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
704
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
705 DILocalVariable *DIBuilder::createParameterVariable(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
706 DIScope *Scope, StringRef Name, unsigned ArgNo, DIFile *File,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
707 unsigned LineNo, DIType *Ty, bool AlwaysPreserve, DINode::DIFlags Flags) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
708 assert(ArgNo && "Expected non-zero argument number for parameter");
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
709 return createLocalVariable(VMContext, PreservedVariables, Scope, Name, ArgNo,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
710 File, LineNo, Ty, AlwaysPreserve, Flags,
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
711 /* AlignInBits */0);
77
54457678186b LLVM 3.6
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
712 }
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
713
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
714 DILabel *DIBuilder::createLabel(
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
715 DIScope *Scope, StringRef Name, DIFile *File,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
716 unsigned LineNo, bool AlwaysPreserve) {
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
717 DIScope *Context = getNonCompileUnitScope(Scope);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
718
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
719 auto *Node =
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
720 DILabel::get(VMContext, cast_or_null<DILocalScope>(Context), Name,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
721 File, LineNo);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
722
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
723 if (AlwaysPreserve) {
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
724 /// The optimizer may remove labels. If there is an interest
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
725 /// to preserve label info in such situation then append it to
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
726 /// the list of retained nodes of the DISubprogram.
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
727 DISubprogram *Fn = getDISubprogram(Scope);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
728 assert(Fn && "Missing subprogram for label");
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
729 PreservedLabels[Fn].emplace_back(Node);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
730 }
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
731 return Node;
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
732 }
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
733
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
734 DIExpression *DIBuilder::createExpression(ArrayRef<uint64_t> Addr) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
735 return DIExpression::get(VMContext, Addr);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
736 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
737
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
738 DIExpression *DIBuilder::createExpression(ArrayRef<int64_t> Signed) {
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
739 // TODO: Remove the callers of this signed version and delete.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
740 SmallVector<uint64_t, 8> Addr(Signed.begin(), Signed.end());
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
741 return createExpression(Addr);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
742 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
743
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
744 template <class... Ts>
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
745 static DISubprogram *getSubprogram(bool IsDistinct, Ts &&... Args) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
746 if (IsDistinct)
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
747 return DISubprogram::getDistinct(std::forward<Ts>(Args)...);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
748 return DISubprogram::get(std::forward<Ts>(Args)...);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
749 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
750
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
751 DISubprogram *DIBuilder::createFunction(
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
752 DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
753 unsigned LineNo, DISubroutineType *Ty, unsigned ScopeLine,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
754 DINode::DIFlags Flags, DISubprogram::DISPFlags SPFlags,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
755 DITemplateParameterArray TParams, DISubprogram *Decl,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
756 DITypeArray ThrownTypes) {
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
757 bool IsDefinition = SPFlags & DISubprogram::SPFlagDefinition;
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
758 auto *Node = getSubprogram(
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
759 /*IsDistinct=*/IsDefinition, VMContext, getNonCompileUnitScope(Context),
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
760 Name, LinkageName, File, LineNo, Ty, ScopeLine, nullptr, 0, 0, Flags,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
761 SPFlags, IsDefinition ? CUNode : nullptr, TParams, Decl,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
762 MDTuple::getTemporary(VMContext, None).release(), ThrownTypes);
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
763
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
764 if (IsDefinition)
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
765 AllSubprograms.push_back(Node);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
766 trackIfUnresolved(Node);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
767 return Node;
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
768 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
769
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
770 DISubprogram *DIBuilder::createTempFunctionFwdDecl(
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
771 DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *File,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
772 unsigned LineNo, DISubroutineType *Ty, unsigned ScopeLine,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
773 DINode::DIFlags Flags, DISubprogram::DISPFlags SPFlags,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
774 DITemplateParameterArray TParams, DISubprogram *Decl,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
775 DITypeArray ThrownTypes) {
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
776 bool IsDefinition = SPFlags & DISubprogram::SPFlagDefinition;
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
777 return DISubprogram::getTemporary(VMContext, getNonCompileUnitScope(Context),
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
778 Name, LinkageName, File, LineNo, Ty,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
779 ScopeLine, nullptr, 0, 0, Flags, SPFlags,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
780 IsDefinition ? CUNode : nullptr, TParams,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
781 Decl, nullptr, ThrownTypes)
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
782 .release();
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
783 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
784
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
785 DISubprogram *DIBuilder::createMethod(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
786 DIScope *Context, StringRef Name, StringRef LinkageName, DIFile *F,
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
787 unsigned LineNo, DISubroutineType *Ty, unsigned VIndex, int ThisAdjustment,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
788 DIType *VTableHolder, DINode::DIFlags Flags,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
789 DISubprogram::DISPFlags SPFlags, DITemplateParameterArray TParams,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
790 DITypeArray ThrownTypes) {
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
791 assert(getNonCompileUnitScope(Context) &&
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
792 "Methods should have both a Context and a context that isn't "
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
793 "the compile unit.");
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
794 // FIXME: Do we want to use different scope/lines?
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
795 bool IsDefinition = SPFlags & DISubprogram::SPFlagDefinition;
100
7d135dc70f03 LLVM 3.9
Miyagi Mitsuki <e135756@ie.u-ryukyu.ac.jp>
parents: 95
diff changeset
796 auto *SP = getSubprogram(
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
797 /*IsDistinct=*/IsDefinition, VMContext, cast<DIScope>(Context), Name,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
798 LinkageName, F, LineNo, Ty, LineNo, VTableHolder, VIndex, ThisAdjustment,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
799 Flags, SPFlags, IsDefinition ? CUNode : nullptr, TParams, nullptr,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
800 nullptr, ThrownTypes);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
801
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
802 if (IsDefinition)
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
803 AllSubprograms.push_back(SP);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
804 trackIfUnresolved(SP);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
805 return SP;
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
806 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
807
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
808 DICommonBlock *DIBuilder::createCommonBlock(
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
809 DIScope *Scope, DIGlobalVariable *Decl, StringRef Name, DIFile *File,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
810 unsigned LineNo) {
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
811 return DICommonBlock::get(
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
812 VMContext, Scope, Decl, Name, File, LineNo);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
813 }
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
814
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
815 DINamespace *DIBuilder::createNameSpace(DIScope *Scope, StringRef Name,
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
816 bool ExportSymbols) {
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
817
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
818 // It is okay to *not* make anonymous top-level namespaces distinct, because
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
819 // all nodes that have an anonymous namespace as their parent scope are
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
820 // guaranteed to be unique and/or are linked to their containing
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
821 // DICompileUnit. This decision is an explicit tradeoff of link time versus
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
822 // memory usage versus code simplicity and may get revisited in the future.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
823 return DINamespace::get(VMContext, getNonCompileUnitScope(Scope), Name,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
824 ExportSymbols);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
825 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
826
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
827 DIModule *DIBuilder::createModule(DIScope *Scope, StringRef Name,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
828 StringRef ConfigurationMacros,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
829 StringRef IncludePath,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
830 StringRef ISysRoot) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
831 return DIModule::get(VMContext, getNonCompileUnitScope(Scope), Name,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
832 ConfigurationMacros, IncludePath, ISysRoot);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
833 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
834
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
835 DILexicalBlockFile *DIBuilder::createLexicalBlockFile(DIScope *Scope,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
836 DIFile *File,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
837 unsigned Discriminator) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
838 return DILexicalBlockFile::get(VMContext, Scope, File, Discriminator);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
839 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
840
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
841 DILexicalBlock *DIBuilder::createLexicalBlock(DIScope *Scope, DIFile *File,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
842 unsigned Line, unsigned Col) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
843 // Make these distinct, to avoid merging two lexical blocks on the same
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
844 // file/line/column.
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
845 return DILexicalBlock::getDistinct(VMContext, getNonCompileUnitScope(Scope),
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
846 File, Line, Col);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
848
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
849 Instruction *DIBuilder::insertDeclare(Value *Storage, DILocalVariable *VarInfo,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
850 DIExpression *Expr, const DILocation *DL,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
851 Instruction *InsertBefore) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
852 return insertDeclare(Storage, VarInfo, Expr, DL, InsertBefore->getParent(),
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
853 InsertBefore);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
854 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
855
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
856 Instruction *DIBuilder::insertDeclare(Value *Storage, DILocalVariable *VarInfo,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
857 DIExpression *Expr, const DILocation *DL,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
858 BasicBlock *InsertAtEnd) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
859 // If this block already has a terminator then insert this intrinsic before
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
860 // the terminator. Otherwise, put it at the end of the block.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
861 Instruction *InsertBefore = InsertAtEnd->getTerminator();
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
862 return insertDeclare(Storage, VarInfo, Expr, DL, InsertAtEnd, InsertBefore);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
863 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
864
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
865 Instruction *DIBuilder::insertLabel(DILabel *LabelInfo, const DILocation *DL,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
866 Instruction *InsertBefore) {
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
867 return insertLabel(
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
868 LabelInfo, DL, InsertBefore ? InsertBefore->getParent() : nullptr,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
869 InsertBefore);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
870 }
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
871
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
872 Instruction *DIBuilder::insertLabel(DILabel *LabelInfo, const DILocation *DL,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
873 BasicBlock *InsertAtEnd) {
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
874 return insertLabel(LabelInfo, DL, InsertAtEnd, nullptr);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
875 }
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
876
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
877 Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
878 DILocalVariable *VarInfo,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
879 DIExpression *Expr,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
880 const DILocation *DL,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
881 Instruction *InsertBefore) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
882 return insertDbgValueIntrinsic(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
883 V, VarInfo, Expr, DL, InsertBefore ? InsertBefore->getParent() : nullptr,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
884 InsertBefore);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
885 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
886
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
887 Instruction *DIBuilder::insertDbgValueIntrinsic(Value *V,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
888 DILocalVariable *VarInfo,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
889 DIExpression *Expr,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
890 const DILocation *DL,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
891 BasicBlock *InsertAtEnd) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
892 return insertDbgValueIntrinsic(V, VarInfo, Expr, DL, InsertAtEnd, nullptr);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
893 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
894
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
895 /// Return an IRBuilder for inserting dbg.declare and dbg.value intrinsics. This
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
896 /// abstracts over the various ways to specify an insert position.
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
897 static IRBuilder<> getIRBForDbgInsertion(const DILocation *DL,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
898 BasicBlock *InsertBB,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
899 Instruction *InsertBefore) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
900 IRBuilder<> B(DL->getContext());
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
901 if (InsertBefore)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
902 B.SetInsertPoint(InsertBefore);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
903 else if (InsertBB)
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
904 B.SetInsertPoint(InsertBB);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
905 B.SetCurrentDebugLocation(DL);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
906 return B;
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
907 }
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
908
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
909 static Value *getDbgIntrinsicValueImpl(LLVMContext &VMContext, Value *V) {
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
910 assert(V && "no value passed to dbg intrinsic");
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
911 return MetadataAsValue::get(VMContext, ValueAsMetadata::get(V));
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
912 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
913
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
914 static Function *getDeclareIntrin(Module &M) {
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
915 return Intrinsic::getDeclaration(&M, UseDbgAddr ? Intrinsic::dbg_addr
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
916 : Intrinsic::dbg_declare);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
917 }
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
918
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
919 Instruction *DIBuilder::insertDeclare(Value *Storage, DILocalVariable *VarInfo,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
920 DIExpression *Expr, const DILocation *DL,
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
921 BasicBlock *InsertBB, Instruction *InsertBefore) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
922 assert(VarInfo && "empty or invalid DILocalVariable* passed to dbg.declare");
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
923 assert(DL && "Expected debug loc");
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
924 assert(DL->getScope()->getSubprogram() ==
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
925 VarInfo->getScope()->getSubprogram() &&
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
926 "Expected matching subprograms");
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
927 if (!DeclareFn)
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
928 DeclareFn = getDeclareIntrin(M);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
929
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
930 trackIfUnresolved(VarInfo);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
931 trackIfUnresolved(Expr);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
932 Value *Args[] = {getDbgIntrinsicValueImpl(VMContext, Storage),
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
933 MetadataAsValue::get(VMContext, VarInfo),
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
934 MetadataAsValue::get(VMContext, Expr)};
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
935
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
936 IRBuilder<> B = getIRBForDbgInsertion(DL, InsertBB, InsertBefore);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
937 return B.CreateCall(DeclareFn, Args);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
938 }
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
939
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
940 Instruction *DIBuilder::insertDbgValueIntrinsic(
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
941 Value *V, DILocalVariable *VarInfo, DIExpression *Expr,
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
942 const DILocation *DL, BasicBlock *InsertBB, Instruction *InsertBefore) {
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
943 assert(V && "no value passed to dbg.value");
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
944 assert(VarInfo && "empty or invalid DILocalVariable* passed to dbg.value");
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
945 assert(DL && "Expected debug loc");
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
946 assert(DL->getScope()->getSubprogram() ==
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
947 VarInfo->getScope()->getSubprogram() &&
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
948 "Expected matching subprograms");
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
949 if (!ValueFn)
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
950 ValueFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_value);
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
951
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
952 trackIfUnresolved(VarInfo);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
953 trackIfUnresolved(Expr);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
954 Value *Args[] = {getDbgIntrinsicValueImpl(VMContext, V),
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
955 MetadataAsValue::get(VMContext, VarInfo),
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
956 MetadataAsValue::get(VMContext, Expr)};
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
957
121
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
958 IRBuilder<> B = getIRBForDbgInsertion(DL, InsertBB, InsertBefore);
803732b1fca8 LLVM 5.0
kono
parents: 120
diff changeset
959 return B.CreateCall(ValueFn, Args);
0
95c75e76d11b LLVM 3.4
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff changeset
960 }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
961
147
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
962 Instruction *DIBuilder::insertLabel(
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
963 DILabel *LabelInfo, const DILocation *DL,
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
964 BasicBlock *InsertBB, Instruction *InsertBefore) {
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
965 assert(LabelInfo && "empty or invalid DILabel* passed to dbg.label");
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
966 assert(DL && "Expected debug loc");
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
967 assert(DL->getScope()->getSubprogram() ==
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
968 LabelInfo->getScope()->getSubprogram() &&
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
969 "Expected matching subprograms");
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
970 if (!LabelFn)
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
971 LabelFn = Intrinsic::getDeclaration(&M, Intrinsic::dbg_label);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
972
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
973 trackIfUnresolved(LabelInfo);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
974 Value *Args[] = {MetadataAsValue::get(VMContext, LabelInfo)};
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
975
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
976 IRBuilder<> B = getIRBForDbgInsertion(DL, InsertBB, InsertBefore);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
977 return B.CreateCall(LabelFn, Args);
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
978 }
c2174574ed3a LLVM 10
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 134
diff changeset
979
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
980 void DIBuilder::replaceVTableHolder(DICompositeType *&T,
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
981 DIType *VTableHolder) {
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
982 {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
983 TypedTrackingMDRef<DICompositeType> N(T);
120
1172e4bd9c6f update 4.0.0
mir3636
parents: 100
diff changeset
984 N->replaceVTableHolder(VTableHolder);
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
985 T = N.get();
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
986 }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
987
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
988 // If this didn't create a self-reference, just return.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
989 if (T != VTableHolder)
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
990 return;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
991
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
992 // Look for unresolved operands. T will drop RAUW support, orphaning any
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
993 // cycles underneath it.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
994 if (T->isResolved())
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
995 for (const MDOperand &O : T->operands())
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
996 if (auto *N = dyn_cast_or_null<MDNode>(O))
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
997 trackIfUnresolved(N);
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
998 }
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
999
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1000 void DIBuilder::replaceArrays(DICompositeType *&T, DINodeArray Elements,
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1001 DINodeArray TParams) {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1002 {
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1003 TypedTrackingMDRef<DICompositeType> N(T);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1004 if (Elements)
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1005 N->replaceElements(Elements);
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1006 if (TParams)
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1007 N->replaceTemplateParams(DITemplateParameterArray(TParams));
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1008 T = N.get();
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1009 }
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
1010
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
1011 // If T isn't resolved, there's no problem.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
1012 if (!T->isResolved())
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
1013 return;
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
1014
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1015 // If T is resolved, it may be due to a self-reference cycle. Track the
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
1016 // arrays explicitly if they're unresolved, or else the cycles will be
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
1017 // orphaned.
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
1018 if (Elements)
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1019 trackIfUnresolved(Elements.get());
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
1020 if (TParams)
95
afa8332a0e37 LLVM 3.8
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents: 83
diff changeset
1021 trackIfUnresolved(TParams.get());
83
60c9769439b8 LLVM 3.7
Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
parents: 77
diff changeset
1022 }