1d88c1a5aSDimitry Andric //===- StripNonLineTableDebugInfo.cpp -- Strip parts of Debug Info --------===//
2d88c1a5aSDimitry Andric //
3d88c1a5aSDimitry Andric //                     The LLVM Compiler Infrastructure
4d88c1a5aSDimitry Andric //
5d88c1a5aSDimitry Andric // This file is distributed under the University of Illinois Open Source
6d88c1a5aSDimitry Andric // License. See LICENSE.TXT for details.
7d88c1a5aSDimitry Andric //
8d88c1a5aSDimitry Andric //===----------------------------------------------------------------------===//
9d88c1a5aSDimitry Andric 
10d88c1a5aSDimitry Andric #include "llvm/IR/DebugInfo.h"
11d88c1a5aSDimitry Andric #include "llvm/Pass.h"
12*4ba319b5SDimitry Andric #include "llvm/Transforms/Utils.h"
13d88c1a5aSDimitry Andric using namespace llvm;
14d88c1a5aSDimitry Andric 
15d88c1a5aSDimitry Andric namespace {
16d88c1a5aSDimitry Andric 
17d88c1a5aSDimitry Andric /// This pass strips all debug info that is not related line tables.
18d88c1a5aSDimitry Andric /// The result will be the same as if the program where compiled with
19d88c1a5aSDimitry Andric /// -gline-tables-only.
20d88c1a5aSDimitry Andric struct StripNonLineTableDebugInfo : public ModulePass {
21d88c1a5aSDimitry Andric   static char ID; // Pass identification, replacement for typeid
StripNonLineTableDebugInfo__anon23f193930111::StripNonLineTableDebugInfo22d88c1a5aSDimitry Andric   StripNonLineTableDebugInfo() : ModulePass(ID) {
23d88c1a5aSDimitry Andric     initializeStripNonLineTableDebugInfoPass(*PassRegistry::getPassRegistry());
24d88c1a5aSDimitry Andric   }
25d88c1a5aSDimitry Andric 
getAnalysisUsage__anon23f193930111::StripNonLineTableDebugInfo26d88c1a5aSDimitry Andric   void getAnalysisUsage(AnalysisUsage &AU) const override {
27d88c1a5aSDimitry Andric     AU.setPreservesAll();
28d88c1a5aSDimitry Andric   }
29d88c1a5aSDimitry Andric 
runOnModule__anon23f193930111::StripNonLineTableDebugInfo30d88c1a5aSDimitry Andric   bool runOnModule(Module &M) override {
31d88c1a5aSDimitry Andric     return llvm::stripNonLineTableDebugInfo(M);
32d88c1a5aSDimitry Andric   }
33d88c1a5aSDimitry Andric };
34d88c1a5aSDimitry Andric }
35d88c1a5aSDimitry Andric 
36d88c1a5aSDimitry Andric char StripNonLineTableDebugInfo::ID = 0;
37d88c1a5aSDimitry Andric INITIALIZE_PASS(StripNonLineTableDebugInfo, "strip-nonlinetable-debuginfo",
38d88c1a5aSDimitry Andric                 "Strip all debug info except linetables", false, false)
39d88c1a5aSDimitry Andric 
createStripNonLineTableDebugInfoPass()40d88c1a5aSDimitry Andric ModulePass *llvm::createStripNonLineTableDebugInfoPass() {
41d88c1a5aSDimitry Andric   return new StripNonLineTableDebugInfo();
42d88c1a5aSDimitry Andric }
43