@@ -24,6 +24,7 @@ MDNode* CreateNode(const std::vector<val> &vec, Module* module, StringRef name);
2424template <typename val, size_t s>
2525MDNode* CreateNode (const std::array<val, s> &arr, Module* module , StringRef name);
2626MDNode* CreateNode (Value* val, Module* module , StringRef name);
27+ MDNode* CreateNode (StructType* Ty, Module* module , StringRef name);
2728template <typename Key, typename Value>
2829MDNode* CreateNode (const std::map < Key, Value> &FuncMD, Module* module , StringRef name);
2930MDNode* CreateNode (const std::string &s, Module* module , StringRef name);
@@ -44,6 +45,7 @@ template<typename T, size_t s>
4445void readNode (std::array<T, s> &arr, MDNode* node);
4546void readNode (Function* &funcPtr, MDNode* node);
4647void readNode (GlobalVariable* &globalVar, MDNode* node);
48+ void readNode (StructType* &Ty, MDNode* node);
4749
4850template <typename Key, typename Value>
4951void readNode (std::map<Key, Value> &funcMD, MDNode* node);
@@ -184,6 +186,17 @@ MDNode* CreateNode(Value* val, Module* module, StringRef name)
184186 return node;
185187}
186188
189+ MDNode* CreateNode (StructType* Ty, Module* module , StringRef name)
190+ {
191+ Metadata* v[] =
192+ {
193+ MDString::get (module ->getContext (), name),
194+ ValueAsMetadata::get (UndefValue::get (Ty))
195+ };
196+ MDNode* node = MDNode::get (module ->getContext (), v);
197+ return node;
198+ }
199+
187200template <typename Key, typename Value>
188201MDNode* CreateNode (const std::map < Key, Value> &FuncMD, Module* module , StringRef name)
189202{
@@ -298,6 +311,13 @@ void readNode(GlobalVariable* &globalVar, MDNode* node)
298311 globalVar = cast<GlobalVariable>(v);
299312}
300313
314+ void readNode (StructType*& Ty, MDNode* node)
315+ {
316+ ValueAsMetadata* pVal = cast<ValueAsMetadata>(node->getOperand (1 ));
317+ Value* v = pVal->getValue ();
318+ Ty = cast<StructType>(v->getType ());
319+ }
320+
301321template <typename Key, typename Value>
302322void readNode (std::map<Key, Value> &keyMD, MDNode* node)
303323{
0 commit comments