//===- BugDriver.h - Top-Level BugPoint class -------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This class contains all of the shared state and information that is used by // the BugPoint tool to track down errors in optimizations. This class is the // main driver class that invokes all sub-functionality. // //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_BUGPOINT_BUGDRIVER_H #define LLVM_TOOLS_BUGPOINT_BUGDRIVER_H #include "llvm/IR/ValueMap.h" #include "llvm/Support/Error.h" #include "llvm/Support/FileSystem.h" #include "llvm/Transforms/Utils/ValueMapper.h" #include <memory> #include <string> #include <vector> namespace llvm { class Module; class GlobalVariable; class Function; class BasicBlock; class AbstractInterpreter; class Instruction; class LLVMContext; class CC; extern bool DisableSimplifyCFG; /// BugpointIsInterrupted - Set to true when the user presses ctrl-c. /// extern bool BugpointIsInterrupted; class BugDriver { … }; struct DiscardTemp { … }; /// Given a bitcode or assembly input filename, parse and return it, or return /// null if not possible. /// std::unique_ptr<Module> parseInputFile(StringRef InputFilename, LLVMContext &ctxt); /// getPassesString - Turn a list of passes into a string which indicates the /// command line options that must be passed to add the passes. /// std::string getPassesString(const std::vector<std::string> &Passes); /// PrintFunctionList - prints out list of problematic functions /// void PrintFunctionList(const std::vector<Function *> &Funcs); /// PrintGlobalVariableList - prints out list of problematic global variables /// void PrintGlobalVariableList(const std::vector<GlobalVariable *> &GVs); // DeleteGlobalInitializer - "Remove" the global variable by deleting its // initializer, making it external. // void DeleteGlobalInitializer(GlobalVariable *GV); // DeleteFunctionBody - "Remove" the function by deleting all of it's basic // blocks, making it external. // void DeleteFunctionBody(Function *F); /// Given a module and a list of functions in the module, split the functions /// OUT of the specified module, and place them in the new module. std::unique_ptr<Module> SplitFunctionsOutOfModule(Module *M, const std::vector<Function *> &F, ValueToValueMapTy &VMap); } // End llvm namespace #endif