LLVM  4.0.0
OptBisect.h
Go to the documentation of this file.
1 //===----------- llvm/IR/OptBisect.h - LLVM Bisect support -------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 ///
10 /// \file
11 /// This file declares the interface for bisecting optimizations.
12 ///
13 //===----------------------------------------------------------------------===//
14 
15 #ifndef LLVM_IR_OPTBISECT_H
16 #define LLVM_IR_OPTBISECT_H
17 
18 namespace llvm {
19 
20 class Pass;
21 class StringRef;
22 class Twine;
23 
24 /// This class implements a mechanism to disable passes and individual
25 /// optimizations at compile time based on a command line option
26 /// (-opt-bisect-limit) in order to perform a bisecting search for
27 /// optimization-related problems.
28 class OptBisect {
29 public:
30  /// \brief Default constructor, initializes the OptBisect state based on the
31  /// -opt-bisect-limit command line argument.
32  ///
33  /// By default, bisection is disabled.
34  ///
35  /// Clients should not instantiate this class directly. All access should go
36  /// through LLVMContext.
37  OptBisect();
38 
39  /// Checks the bisect limit to determine if the specified pass should run.
40  ///
41  /// This function will immediate return true if bisection is disabled. If the
42  /// bisect limit is set to -1, the function will print a message describing
43  /// the pass and the bisect number assigned to it and return true. Otherwise,
44  /// the function will print a message with the bisect number assigned to the
45  /// pass and indicating whether or not the pass will be run and return true if
46  /// the bisect limit has not yet been exceded or false if it has.
47  ///
48  /// Most passes should not call this routine directly. Instead, it is called
49  /// through a helper routine provided by the pass base class. For instance,
50  /// function passes should call FunctionPass::skipFunction().
51  template <class UnitT>
52  bool shouldRunPass(const Pass *P, const UnitT &U);
53 
54  /// Checks the bisect limit to determine if the optimization described by the
55  /// /p Desc argument should run.
56  ///
57  /// This function will immediate return true if bisection is disabled. If the
58  /// bisect limit is set to -1, the function will print a message with the
59  /// bisect number assigned to the optimization along with the /p Desc
60  /// description and return true. Otherwise, the function will print a message
61  /// with the bisect number assigned to the optimization and indicating whether
62  /// or not the pass will be run and return true if the bisect limit has not
63  /// yet been exceded or false if it has.
64  ///
65  /// Passes may call this function to provide more fine grained control over
66  /// individual optimizations performed by the pass. Passes which cannot be
67  /// skipped entirely (such as non-optional code generation passes) may still
68  /// call this function to control whether or not individual optional
69  /// transformations are performed.
70  bool shouldRunCase(const Twine &Desc);
71 
72 private:
73  bool checkPass(const StringRef PassName, const StringRef TargetDesc);
74 
75  bool BisectEnabled = false;
76  unsigned LastBisectNum = 0;
77 };
78 
79 } // end namespace llvm
80 
81 #endif // LLVM_IR_OPTBISECT_H
Pass interface - Implemented by all 'passes'.
Definition: Pass.h:81
bool shouldRunPass(const Pass *P, const UnitT &U)
Checks the bisect limit to determine if the specified pass should run.
Definition: OptBisect.cpp:96
bool shouldRunCase(const Twine &Desc)
Checks the bisect limit to determine if the optimization described by the /p Desc argument should run...
Definition: OptBisect.cpp:112
aarch64 AArch64 CCMP Pass
MachineInstrBuilder MachineInstrBuilder &DefMI const MCInstrDesc & Desc
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:81
This class implements a mechanism to disable passes and individual optimizations at compile time base...
Definition: OptBisect.h:28
#define P(N)
OptBisect()
Default constructor, initializes the OptBisect state based on the -opt-bisect-limit command line argu...
Definition: OptBisect.cpp:31
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:47