aboutsummaryrefslogtreecommitdiff
path: root/lib/Transforms
diff options
context:
space:
mode:
authorJan Voung <jvoung@chromium.org>2013-04-12 13:14:15 -0700
committerJan Voung <jvoung@chromium.org>2013-04-12 13:14:15 -0700
commit91d2b76ec1001edd102267f30e722a4f21945122 (patch)
tree6aa98d1a747d7d911152b49d31e30f61bf230f59 /lib/Transforms
parent23da4c2957a29624ef0a759bf5a35516b4985f6f (diff)
Have the StripMetadata pass also strip unsupported named metadata.
Previously it was just instruction attachments. Depends on a driver change to actually work: https://codereview.chromium.org/14072004/ BUG= http://code.google.com/p/nativeclient/issues/detail?id=3348 Review URL: https://codereview.chromium.org/14022009
Diffstat (limited to 'lib/Transforms')
-rw-r--r--lib/Transforms/NaCl/StripMetadata.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/Transforms/NaCl/StripMetadata.cpp b/lib/Transforms/NaCl/StripMetadata.cpp
index a7d2e7eb68..8461e7efbe 100644
--- a/lib/Transforms/NaCl/StripMetadata.cpp
+++ b/lib/Transforms/NaCl/StripMetadata.cpp
@@ -51,6 +51,11 @@ ModulePass *llvm::createStripMetadataPass() {
return new StripMetadata();
}
+static bool IsWhitelistedMetadata(const NamedMDNode *node) {
+ // Leave debug metadata to the -strip-debug pass.
+ return node->getName().startswith("llvm.dbg.");
+}
+
static bool DoStripMetadata(Module &M) {
bool Changed = false;
@@ -69,6 +74,16 @@ static bool DoStripMetadata(Module &M) {
}
}
+ // Strip unsupported named metadata.
+ SmallVector<NamedMDNode*, 8> ToErase;
+ for (Module::NamedMDListType::iterator I = M.named_metadata_begin(),
+ E = M.named_metadata_end(); I != E; ++I) {
+ if (!IsWhitelistedMetadata(I))
+ ToErase.push_back(I);
+ }
+ for (size_t i = 0; i < ToErase.size(); ++i)
+ M.eraseNamedMetadata(ToErase[i]);
+
return Changed;
}