LLVM
18.0.0git
include
llvm
CodeGen
GlobalISel
Combiner.h
Go to the documentation of this file.
1
//== ----- llvm/CodeGen/GlobalISel/Combiner.h -------------------*- 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
/// \file
9
/// This contains the base class for all Combiners generated by TableGen.
10
/// Backends need to create class that inherits from "Combiner" and put all of
11
/// the TableGen-erated code in there, as it implements the virtual functions.
12
///
13
//===----------------------------------------------------------------------===//
14
15
#ifndef LLVM_CODEGEN_GLOBALISEL_COMBINER_H
16
#define LLVM_CODEGEN_GLOBALISEL_COMBINER_H
17
18
#include "
llvm/CodeGen/GlobalISel/GIMatchTableExecutor.h
"
19
#include "
llvm/CodeGen/GlobalISel/GISelChangeObserver.h
"
20
#include "
llvm/CodeGen/GlobalISel/MachineIRBuilder.h
"
21
22
namespace
llvm
{
23
class
MachineRegisterInfo;
24
struct
CombinerInfo;
25
class
GISelCSEInfo;
26
class
TargetPassConfig;
27
class
MachineFunction;
28
class
MachineIRBuilder;
29
30
/// Combiner implementation. This is per-function, so passes need to recreate
31
/// one of these each time they enter a new function.
32
///
33
/// TODO: Is it worth making this module-wide?
34
class
Combiner
:
public
GIMatchTableExecutor
{
35
private
:
36
class
WorkListMaintainer
;
37
GISelWorkList<512>
WorkList;
38
39
// We have a little hack here where keep the owned pointers private, and only
40
// expose a reference. This has two purposes:
41
// - Avoid derived classes messing with those pointers.
42
// - Keep the API consistent. CInfo, MF, MRI, etc. are all accessed as
43
// references. Accessing Observer/B as pointers unnecessarily leaks
44
// implementation details into derived classes.
45
std::unique_ptr<MachineIRBuilder> Builder;
46
std::unique_ptr<WorkListMaintainer> WLObserver;
47
std::unique_ptr<GISelObserverWrapper> ObserverWrapper;
48
49
bool
HasSetupMF =
false
;
50
51
public
:
52
/// If CSEInfo is not null, then the Combiner will use CSEInfo as the observer
53
/// and also create a CSEMIRBuilder. Pass nullptr if CSE is not needed.
54
Combiner
(
MachineFunction
&
MF
,
CombinerInfo
&
CInfo
,
55
const
TargetPassConfig
*
TPC
,
GISelKnownBits
*
KB
,
56
GISelCSEInfo
*
CSEInfo
=
nullptr
);
57
virtual
~Combiner
();
58
59
virtual
bool
tryCombineAll
(
MachineInstr
&
I
)
const
= 0;
60
61
bool
combineMachineInstrs
();
62
63
protected
:
64
CombinerInfo
&
CInfo
;
65
GISelChangeObserver
&
Observer
;
66
MachineIRBuilder
&
B
;
67
MachineFunction
&
MF
;
68
MachineRegisterInfo
&
MRI
;
69
GISelKnownBits
*
KB
;
70
71
const
TargetPassConfig
*
TPC
;
72
GISelCSEInfo
*
CSEInfo
;
73
};
74
75
}
// End namespace llvm.
76
77
#endif
// LLVM_CODEGEN_GLOBALISEL_COMBINER_H
GIMatchTableExecutor.h
GISelChangeObserver.h
This contains common code to allow clients to notify changes to machine instr.
I
#define I(x, y, z)
Definition:
MD5.cpp:58
MachineIRBuilder.h
This file declares the MachineIRBuilder class.
llvm::Combiner::WorkListMaintainer
This class acts as the glue the joins the CombinerHelper to the overall Combine algorithm.
Definition:
Combiner.cpp:50
llvm::Combiner
Combiner implementation.
Definition:
Combiner.h:34
llvm::Combiner::CSEInfo
GISelCSEInfo * CSEInfo
Definition:
Combiner.h:72
llvm::Combiner::combineMachineInstrs
bool combineMachineInstrs()
Definition:
Combiner.cpp:117
llvm::Combiner::MRI
MachineRegisterInfo & MRI
Definition:
Combiner.h:68
llvm::Combiner::TPC
const TargetPassConfig * TPC
Definition:
Combiner.h:71
llvm::Combiner::~Combiner
virtual ~Combiner()
llvm::Combiner::B
MachineIRBuilder & B
Definition:
Combiner.h:66
llvm::Combiner::KB
GISelKnownBits * KB
Definition:
Combiner.h:69
llvm::Combiner::MF
MachineFunction & MF
Definition:
Combiner.h:67
llvm::Combiner::CInfo
CombinerInfo & CInfo
Definition:
Combiner.h:64
llvm::Combiner::Observer
GISelChangeObserver & Observer
Definition:
Combiner.h:65
llvm::Combiner::tryCombineAll
virtual bool tryCombineAll(MachineInstr &I) const =0
llvm::GIMatchTableExecutor
Provides the logic to execute GlobalISel match tables, which are used by the instruction selector and...
Definition:
GIMatchTableExecutor.h:475
llvm::GISelCSEInfo
The CSE Analysis object.
Definition:
CSEInfo.h:69
llvm::GISelChangeObserver
Abstract class that contains various methods for clients to notify about changes.
Definition:
GISelChangeObserver.h:29
llvm::GISelKnownBits
Definition:
GISelKnownBits.h:29
llvm::GISelWorkList
Definition:
GISelWorkList.h:27
llvm::MachineFunction
Definition:
MachineFunction.h:259
llvm::MachineIRBuilder
Helper class to build MachineInstr.
Definition:
MachineIRBuilder.h:221
llvm::MachineInstr
Representation of each machine instruction.
Definition:
MachineInstr.h:68
llvm::MachineRegisterInfo
MachineRegisterInfo - Keep track of information for virtual and physical registers,...
Definition:
MachineRegisterInfo.h:51
llvm::TargetPassConfig
Target-Independent Code Generator Pass Configuration Options.
Definition:
TargetPassConfig.h:84
llvm
This is an optimization pass for GlobalISel generic memory operations.
Definition:
AddressRanges.h:18
llvm::CombinerInfo
Definition:
CombinerInfo.h:24
Generated on Sat Sep 23 2023 09:09:03 for LLVM by
1.9.6