1 //===- bolt/Utils/CommandLineOpts.h - BOLT CLI options ----------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // BOLT CLI options 10 // 11 //===----------------------------------------------------------------------===// 12 13 #ifndef BOLT_UTILS_COMMAND_LINE_OPTS_H 14 #define BOLT_UTILS_COMMAND_LINE_OPTS_H 15 16 #include "llvm/Support/CommandLine.h" 17 18 namespace opts { 19 20 extern bool HeatmapMode; 21 extern bool LinuxKernelMode; 22 23 extern llvm::cl::OptionCategory BoltCategory; 24 extern llvm::cl::OptionCategory BoltDiffCategory; 25 extern llvm::cl::OptionCategory BoltOptCategory; 26 extern llvm::cl::OptionCategory BoltRelocCategory; 27 extern llvm::cl::OptionCategory BoltOutputCategory; 28 extern llvm::cl::OptionCategory AggregatorCategory; 29 extern llvm::cl::OptionCategory BoltInstrCategory; 30 extern llvm::cl::OptionCategory HeatmapCategory; 31 32 extern llvm::cl::opt<unsigned> AlignText; 33 extern llvm::cl::opt<unsigned> AlignFunctions; 34 extern llvm::cl::opt<bool> AggregateOnly; 35 extern llvm::cl::opt<unsigned> BucketsPerLine; 36 extern llvm::cl::opt<bool> DiffOnly; 37 extern llvm::cl::opt<bool> EnableBAT; 38 extern llvm::cl::opt<bool> EqualizeBBCounts; 39 extern llvm::cl::opt<bool> RemoveSymtab; 40 extern llvm::cl::opt<unsigned> ExecutionCountThreshold; 41 extern llvm::cl::opt<unsigned> HeatmapBlock; 42 extern llvm::cl::opt<unsigned long long> HeatmapMaxAddress; 43 extern llvm::cl::opt<unsigned long long> HeatmapMinAddress; 44 extern llvm::cl::opt<bool> HotData; 45 extern llvm::cl::opt<bool> HotFunctionsAtEnd; 46 extern llvm::cl::opt<bool> HotText; 47 extern llvm::cl::opt<bool> Instrument; 48 extern llvm::cl::opt<std::string> OutputFilename; 49 extern llvm::cl::opt<std::string> PerfData; 50 extern llvm::cl::opt<bool> PrintCacheMetrics; 51 extern llvm::cl::opt<bool> PrintSections; 52 extern llvm::cl::opt<bool> SplitEH; 53 extern llvm::cl::opt<bool> StrictMode; 54 extern llvm::cl::opt<bool> TimeOpts; 55 extern llvm::cl::opt<bool> UseOldText; 56 extern llvm::cl::opt<bool> UpdateDebugSections; 57 58 // The default verbosity level (0) is pretty terse, level 1 is fairly 59 // verbose and usually prints some informational message for every 60 // function processed. Level 2 is for the noisiest of messages and 61 // often prints a message per basic block. 62 // Error messages should never be suppressed by the verbosity level. 63 // Only warnings and info messages should be affected. 64 // 65 // The rationale behind stream usage is as follows: 66 // outs() for info and debugging controlled by command line flags. 67 // errs() for errors and warnings. 68 // dbgs() for output within DEBUG(). 69 extern llvm::cl::opt<unsigned> Verbosity; 70 71 /// Return true if we should process all functions in the binary. 72 bool processAllFunctions(); 73 74 } // namespace opts 75 76 namespace llvm { 77 namespace bolt { 78 extern const char *BoltRevision; 79 } 80 } // namespace llvm 81 82 #endif 83