MCPcopy Create free account
hub / github.com/chigraph/chigraph / dataType

Method dataType

libchigraph/src/GraphStruct.cpp:109–180  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

107}
108
109DataType GraphStruct::dataType() {
110 // if we have already calculated this, use that
111 if (mDataType.valid()) { return mDataType; }
112
113 if (types().empty()) { return {}; }
114
115 // create llvm::Type
116 std::vector<llvm::Type*> llTypes;
117 llTypes.reserve(types().size());
118
119 std::vector<
120#if LLVM_VERSION_LESS_EQUAL(3, 5)
121 llvm::Value*
122#else
123 llvm::Metadata*
124#endif
125 >
126 diTypes;
127 diTypes.reserve(types().size());
128
129 size_t currentOffset = 0;
130
131#if LLVM_VERSION_LESS_EQUAL(3, 6)
132 // make a temp module so we can make a DIBuilder
133 auto tmpMod = std::make_unique<llvm::Module>("tmp", context().llvmContext());
134 auto diBuilder = std::make_unique<llvm::DIBuilder>(*tmpMod);
135#endif
136
137 for (const auto& type : types()) {
138 auto debugType = type.type.debugType();
139
140 llTypes.push_back(type.type.llvmType());
141
142 auto member =
143#if LLVM_VERSION_LESS_EQUAL(3, 6)
144 diBuilder->createMemberType(llvm::DIDescriptor(), type.name, llvm::DIFile(), 0,
145 debugType->getSizeInBits(), 8, currentOffset, 0, *debugType)
146#else
147 llvm::DIDerivedType::get(context().llvmContext(), llvm::dwarf::DW_TAG_member,
148#if LLVM_VERSION_LESS_EQUAL(3, 8)
149 llvm::MDString::get(context().llvmContext(), type.name),
150#else
151 type.name,
152#endif
153 nullptr, 0, nullptr, debugType, debugType->getSizeInBits(), 8,
154 currentOffset, llvm::DINode::DIFlags{}, nullptr)
155#endif
156 ;
157 diTypes.push_back(member);
158
159 currentOffset += debugType->getSizeInBits();
160 }
161 auto llType = llvm::StructType::create(llTypes, name());
162
163 auto diStructType =
164#if LLVM_VERSION_LESS_EQUAL(3, 6)
165 new llvm::DICompositeType(diBuilder->createStructType(
166 llvm::DIDescriptor(), name(), llvm::DIFile(), 0, currentOffset, 8, 0, llvm::DIType(),

Callers 5

MakeStructNodeTypeMethod · 0.80
codegenMethod · 0.80
BreakStructNodeTypeMethod · 0.80
codegenMethod · 0.80
typeFromNameMethod · 0.80

Calls 6

getFunction · 0.85
DITypeClass · 0.85
debugTypeMethod · 0.80
llvmTypeMethod · 0.80
DataTypeClass · 0.50
validMethod · 0.45

Tested by

no test coverage detected