#include "llvm/Bitcode/BitcodeAnalyzer.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/InitLLVM.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/WithColor.h"
#include "llvm/Support/raw_ostream.h"
#include <memory>
#include <optional>
usingnamespacellvm;
static cl::OptionCategory BCAnalyzerCategory("BC Analyzer Options");
static cl::opt<std::string> InputFilename(cl::Positional,
cl::desc("<input bitcode>"),
cl::init("-"),
cl::cat(BCAnalyzerCategory));
static cl::opt<bool> Dump("dump", cl::desc("Dump low level bitcode trace"),
cl::cat(BCAnalyzerCategory));
static cl::opt<bool> DumpBlockinfo("dump-blockinfo",
cl::desc("Include BLOCKINFO details in low"
" level dump"),
cl::cat(BCAnalyzerCategory));
static cl::opt<bool> NoHistogram("disable-histogram",
cl::desc("Do not print per-code histogram"),
cl::cat(BCAnalyzerCategory));
static cl::opt<bool> NonSymbolic("non-symbolic",
cl::desc("Emit numeric info in dump even if"
" symbolic info is available"),
cl::cat(BCAnalyzerCategory));
static cl::opt<std::string>
BlockInfoFilename("block-info",
cl::desc("Use the BLOCK_INFO from the given file"),
cl::cat(BCAnalyzerCategory));
static cl::opt<bool>
ShowBinaryBlobs("show-binary-blobs",
cl::desc("Print binary blobs using hex escapes"),
cl::cat(BCAnalyzerCategory));
static cl::opt<std::string> CheckHash(
"check-hash",
cl::desc("Check module hash using the argument as a string table"),
cl::cat(BCAnalyzerCategory));
static Error reportError(StringRef Message) { … }
static Expected<std::unique_ptr<MemoryBuffer>> openBitcodeFile(StringRef Path) { … }
int main(int argc, char **argv) { … }