annotate lib/IR/DIBuilder.cpp @ 134:3a76565eade5 LLVM5.0.1

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