]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/include/llvm/CodeGen/GlobalISel/Combiner.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm / include / llvm / CodeGen / GlobalISel / Combiner.h
1 //== ----- llvm/CodeGen/GlobalISel/Combiner.h --------------------- == //
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 /// This contains common code to drive combines. Combiner Passes will need to
11 /// setup a CombinerInfo and call combineMachineFunction.
12 //
13 //===----------------------------------------------------------------------===//
14
15 #ifndef LLVM_CODEGEN_GLOBALISEL_COMBINER_H
16 #define LLVM_CODEGEN_GLOBALISEL_COMBINER_H
17
18 #include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
19 #include "llvm/CodeGen/MachineFunctionPass.h"
20
21 namespace llvm {
22 class MachineRegisterInfo;
23 class CombinerInfo;
24 class GISelCSEInfo;
25 class TargetPassConfig;
26 class MachineFunction;
27
28 class Combiner {
29 public:
30   Combiner(CombinerInfo &CombinerInfo, const TargetPassConfig *TPC);
31
32   /// If CSEInfo is not null, then the Combiner will setup observer for
33   /// CSEInfo and instantiate a CSEMIRBuilder. Pass nullptr if CSE is not
34   /// needed.
35   bool combineMachineInstrs(MachineFunction &MF, GISelCSEInfo *CSEInfo);
36
37 protected:
38   CombinerInfo &CInfo;
39
40   MachineRegisterInfo *MRI = nullptr;
41   const TargetPassConfig *TPC;
42   std::unique_ptr<MachineIRBuilder> Builder;
43 };
44
45 } // End namespace llvm.
46
47 #endif // LLVM_CODEGEN_GLOBALISEL_GICOMBINER_H