Add support for metadata attachments for global variables.
This patch adds an IR, assembly and bitcode representation for metadata attachments for globals. Future patches will port existing features to use these new attachments. Differential Revision: http://reviews.llvm.org/D20074 llvm-svn: 271348
This commit is contained in:
@@ -344,6 +344,11 @@ ValueEnumerator::ValueEnumerator(const Module &M,
|
||||
EnumerateNamedMetadata(M);
|
||||
|
||||
SmallVector<std::pair<unsigned, MDNode *>, 8> MDs;
|
||||
for (const GlobalVariable &GV : M.globals()) {
|
||||
GV.getAllMetadata(MDs);
|
||||
for (const auto &I : MDs)
|
||||
EnumerateMetadata(&GV, I.second);
|
||||
}
|
||||
|
||||
// Enumerate types used by function bodies and argument lists.
|
||||
for (const Function &F : M) {
|
||||
@@ -523,17 +528,18 @@ void ValueEnumerator::EnumerateNamedMDNode(const NamedMDNode *MD) {
|
||||
EnumerateMetadata(nullptr, MD->getOperand(i));
|
||||
}
|
||||
|
||||
unsigned ValueEnumerator::getMetadataFunctionID(const Function *F) const {
|
||||
return F ? getValueID(F) + 1 : 0;
|
||||
unsigned ValueEnumerator::getMetadataGlobalID(const GlobalObject *GO) const {
|
||||
return GO ? getValueID(GO) + 1 : 0;
|
||||
}
|
||||
|
||||
void ValueEnumerator::EnumerateMetadata(const Function *F, const Metadata *MD) {
|
||||
EnumerateMetadata(getMetadataFunctionID(F), MD);
|
||||
void ValueEnumerator::EnumerateMetadata(const GlobalObject *GO,
|
||||
const Metadata *MD) {
|
||||
EnumerateMetadata(getMetadataGlobalID(GO), MD);
|
||||
}
|
||||
|
||||
void ValueEnumerator::EnumerateFunctionLocalMetadata(
|
||||
const Function &F, const LocalAsMetadata *Local) {
|
||||
EnumerateFunctionLocalMetadata(getMetadataFunctionID(&F), Local);
|
||||
EnumerateFunctionLocalMetadata(getMetadataGlobalID(&F), Local);
|
||||
}
|
||||
|
||||
void ValueEnumerator::dropFunctionFromMetadata(
|
||||
|
||||
Reference in New Issue
Block a user