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