}
~DebugNode() {}
+ StringRef getStringOperand(unsigned I) const {
+ if (auto *S = cast_or_null<MDString>(getOperand(I)))
+ return S->getString();
+ return StringRef();
+ }
+
public:
unsigned getTag() const { return SubclassData16; }
TempGenericDebugNode clone() const { return cloneImpl(); }
unsigned getTag() const { return SubclassData16; }
- StringRef getHeader() const {
- if (auto *S = cast_or_null<MDString>(getOperand(0)))
- return S->getString();
- return StringRef();
- }
+ StringRef getHeader() const { return getStringOperand(0); }
op_iterator dwarf_op_begin() const { return op_begin() + 1; }
op_iterator dwarf_op_end() const { return op_end(); }
Storage, Context.pImpl->MDLocations);
}
+/// \brief Get the MDString, or nullptr if the string is empty.
+static MDString *getCanonicalMDString(LLVMContext &Context, StringRef S) {
+ if (S.empty())
+ return nullptr;
+ return MDString::get(Context, S);
+}
+
GenericDebugNode *GenericDebugNode::getImpl(LLVMContext &Context, unsigned Tag,
StringRef Header,
ArrayRef<Metadata *> DwarfOps,
}
// Use a nullptr for empty headers.
- Metadata *PreOps[] = {Header.empty() ? nullptr
- : MDString::get(Context, Header)};
+ Metadata *PreOps[] = {getCanonicalMDString(Context, Header)};
return storeImpl(new (DwarfOps.size() + 1) GenericDebugNode(
Context, Storage, Hash, Tag, PreOps, DwarfOps),
Storage, Context.pImpl->GenericDebugNodes);