diff options
author | Jan Voung <jvoung@chromium.org> | 2013-04-12 13:14:15 -0700 |
---|---|---|
committer | Jan Voung <jvoung@chromium.org> | 2013-04-12 13:14:15 -0700 |
commit | 91d2b76ec1001edd102267f30e722a4f21945122 (patch) | |
tree | 6aa98d1a747d7d911152b49d31e30f61bf230f59 /lib/Transforms | |
parent | 23da4c2957a29624ef0a759bf5a35516b4985f6f (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.cpp | 15 |
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; } |