18
18
#include " llvm/CodeGen/GlobalISel/Combiner.h"
19
19
#include " llvm/CodeGen/GlobalISel/CombinerHelper.h"
20
20
#include " llvm/CodeGen/GlobalISel/CombinerInfo.h"
21
+ #include " llvm/CodeGen/GlobalISel/GIMatchTableExecutor.h"
22
+ #include " llvm/CodeGen/GlobalISel/GIMatchTableExecutorImpl.h"
21
23
#include " llvm/CodeGen/GlobalISel/GISelKnownBits.h"
22
24
#include " llvm/CodeGen/GlobalISel/MIPatternMatch.h"
23
25
#include " llvm/CodeGen/MachineDominators.h"
24
26
#include " llvm/CodeGen/TargetPassConfig.h"
25
27
#include " llvm/Target/TargetMachine.h"
26
28
29
+ #define GET_GICOMBINER_DEPS
30
+ #include " MipsGenPostLegalizeGICombiner.inc"
31
+ #undef GET_GICOMBINER_DEPS
32
+
27
33
#define DEBUG_TYPE " mips-postlegalizer-combiner"
28
34
29
35
using namespace llvm ;
30
36
using namespace MIPatternMatch ;
31
37
32
- #define MIPSPOSTLEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_DEPS
38
+ namespace {
39
+ #define GET_GICOMBINER_TYPES
33
40
#include " MipsGenPostLegalizeGICombiner.inc"
34
- #undef MIPSPOSTLEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_DEPS
41
+ #undef GET_GICOMBINER_TYPES
35
42
36
- namespace {
37
- #define MIPSPOSTLEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_H
43
+ class MipsPostLegalizerCombinerImpl : public GIMatchTableExecutor {
44
+ protected:
45
+ CombinerHelper &Helper;
46
+ const MipsPostLegalizerCombinerImplRuleConfig &RuleConfig;
47
+
48
+ const MipsSubtarget &STI;
49
+ GISelChangeObserver &Observer;
50
+ MachineIRBuilder &B;
51
+ MachineFunction &MF;
52
+
53
+ MachineRegisterInfo &MRI;
54
+
55
+ public:
56
+ MipsPostLegalizerCombinerImpl (
57
+ const MipsPostLegalizerCombinerImplRuleConfig &RuleConfig,
58
+ const MipsSubtarget &STI, GISelChangeObserver &Observer,
59
+ MachineIRBuilder &B, CombinerHelper &Helper);
60
+
61
+ static const char *getName () { return " MipsPostLegalizerCombiner" ; }
62
+
63
+ bool tryCombineAll (MachineInstr &I) const ;
64
+
65
+ private:
66
+ #define GET_GICOMBINER_CLASS_MEMBERS
67
+ #include " MipsGenPostLegalizeGICombiner.inc"
68
+ #undef GET_GICOMBINER_CLASS_MEMBERS
69
+ };
70
+
71
+ #define GET_GICOMBINER_IMPL
38
72
#include " MipsGenPostLegalizeGICombiner.inc"
39
- #undef MIPSPOSTLEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_H
73
+ #undef GET_GICOMBINER_IMPL
74
+
75
+ MipsPostLegalizerCombinerImpl::MipsPostLegalizerCombinerImpl (
76
+ const MipsPostLegalizerCombinerImplRuleConfig &RuleConfig,
77
+ const MipsSubtarget &STI, GISelChangeObserver &Observer,
78
+ MachineIRBuilder &B, CombinerHelper &Helper)
79
+ : Helper(Helper), RuleConfig(RuleConfig), STI(STI), Observer(Observer),
80
+ B (B), MF(B.getMF()), MRI(*B.getMRI()),
81
+ #define GET_GICOMBINER_CONSTRUCTOR_INITS
82
+ #include " MipsGenPostLegalizeGICombiner.inc"
83
+ #undef GET_GICOMBINER_CONSTRUCTOR_INITS
84
+ {
85
+ }
40
86
41
87
class MipsPostLegalizerCombinerInfo final : public CombinerInfo {
42
88
GISelKnownBits *KB;
43
89
44
90
public:
45
- MipsGenPostLegalizerCombinerHelperRuleConfig GeneratedRuleCfg ;
91
+ MipsPostLegalizerCombinerImplRuleConfig RuleConfig ;
46
92
47
93
MipsPostLegalizerCombinerInfo (bool EnableOpt, bool OptSize, bool MinSize,
48
94
GISelKnownBits *KB, const MipsLegalizerInfo *LI)
49
95
: CombinerInfo(/* AllowIllegalOps*/ false , /* ShouldLegalizeIllegal*/ true ,
50
96
/* LegalizerInfo*/ LI, EnableOpt, OptSize, MinSize),
51
97
KB (KB) {
52
- if (!GeneratedRuleCfg .parseCommandLineOption ())
98
+ if (!RuleConfig .parseCommandLineOption ())
53
99
report_fatal_error (" Invalid rule identifier" );
54
100
}
55
101
@@ -60,17 +106,14 @@ class MipsPostLegalizerCombinerInfo final : public CombinerInfo {
60
106
bool MipsPostLegalizerCombinerInfo::combine (GISelChangeObserver &Observer,
61
107
MachineInstr &MI,
62
108
MachineIRBuilder &B) const {
63
-
109
+ const auto &STI = MI. getMF ()-> getSubtarget <MipsSubtarget>();
64
110
CombinerHelper Helper (Observer, B, /* IsPreLegalize*/ false , KB,
65
111
/* DominatorTree*/ nullptr , LInfo);
66
- MipsGenPostLegalizerCombinerHelper Generated (GeneratedRuleCfg, Helper);
67
- return Generated.tryCombineAll (Observer, MI, B, Helper);
112
+ MipsPostLegalizerCombinerImpl Impl (RuleConfig, STI, Observer, B, Helper);
113
+ Impl.setupMF (*MI.getMF (), KB);
114
+ return Impl.tryCombineAll (MI);
68
115
}
69
116
70
- #define MIPSPOSTLEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_CPP
71
- #include " MipsGenPostLegalizeGICombiner.inc"
72
- #undef MIPSPOSTLEGALIZERCOMBINERHELPER_GENCOMBINERHELPER_CPP
73
-
74
117
// Pass boilerplate
75
118
// ================
76
119
0 commit comments