@@ -28,11 +28,16 @@ def NoMatchTwoApply : GICombineRule<
28
28
(match (G_SEXT $a, $y)),
29
29
(apply "APPLY0", "APPLY1")>;
30
30
31
+ def CopmbineCXXOrder : GICombineRule<
32
+ (defs root:$a),
33
+ (combine (G_ZEXT $a, $y), "A0", "return A1")>;
34
+
31
35
def MyCombiner: GICombiner<"GenMyCombiner", [
32
36
OneMatchOneApply,
33
37
TwoMatchTwoApply,
34
38
TwoMatchNoApply,
35
- NoMatchTwoApply
39
+ NoMatchTwoApply,
40
+ CopmbineCXXOrder
36
41
]>;
37
42
38
43
// CHECK: bool GenMyCombiner::testMIPredicate_MI(unsigned PredicateID, const MachineInstr & MI, const MatcherState &State) const {
@@ -79,65 +84,83 @@ def MyCombiner: GICombiner<"GenMyCombiner", [
79
84
// CHECK-NEXT: APPLY1
80
85
// CHECK-NEXT: return true;
81
86
// CHECK-NEXT: }
87
+ // CHECK-NEXT: case GICXXCustomAction_GICombiner3:{
88
+ // CHECK-NEXT: // Apply Patterns
89
+ // CHECK-NEXT: A0
90
+ // CHECK-NEXT: return A1
91
+ // CHECK-NEXT: return true;
92
+ // CHECK-NEXT: }
82
93
// CHECK-NEXT: }
83
94
// CHECK-NEXT: llvm_unreachable("Unknown Apply Action");
84
95
// CHECK-NEXT: }
85
96
86
97
// CHECK: const uint8_t *GenMyCombiner::getMatchTable() const {
87
98
// CHECK-NEXT: constexpr static uint8_t MatchTable0[] = {
88
- // CHECK-NEXT: GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2([[#LOWER:]]), GIMT_Encode2([[#UPPER:]]), /*)*//*default:*//*Label 4*/ GIMT_Encode4([[#DEFAULT:]]),
89
- // CHECK-NEXT: /*TargetOpcode::G_STORE*//*Label 0*/ GIMT_Encode4([[L418:[0-9]+]]), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
90
- // CHECK-NEXT: /*TargetOpcode::G_SEXT*//*Label 1*/ GIMT_Encode4([[L436:[0-9]+]]), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
91
- // CHECK-NEXT: /*TargetOpcode::G_FNEG*//*Label 2*/ GIMT_Encode4([[L448:[0-9]+]]), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
92
- // CHECK-NEXT: /*TargetOpcode::G_FABS*//*Label 3*/ GIMT_Encode4([[L460:[0-9]+]]),
93
- // CHECK-NEXT: // Label 0: @[[#%u, mul(UPPER-LOWER, 4) + 10]]
94
- // CHECK-NEXT: GIM_Try, /*On fail goto*//*Label 5*/ GIMT_Encode4([[L435:[0-9]+]]), // Rule ID 2 //
95
- // CHECK-NEXT: GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
96
- // CHECK-NEXT: // MIs[0] x
97
- // CHECK-NEXT: // No operand predicates
98
- // CHECK-NEXT: // MIs[0] y
99
- // CHECK-NEXT: // No operand predicates
100
- // CHECK-NEXT: GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner0),
101
- // CHECK-NEXT: GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner1),
102
- // CHECK-NEXT: // Combiner Rule #2: TwoMatchNoApply
103
- // CHECK-NEXT: GIR_EraseRootFromParent_Done,
104
- // CHECK-NEXT: // Label 5: @[[L435]]
105
- // CHECK-NEXT: GIM_Reject,
106
- // CHECK-NEXT: // Label 1: @[[L436]]
107
- // CHECK-NEXT: GIM_Try, /*On fail goto*//*Label 6*/ GIMT_Encode4([[L447:[0-9]+]]), // Rule ID 3 //
108
- // CHECK-NEXT: GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule3Enabled),
109
- // CHECK-NEXT: // MIs[0] a
110
- // CHECK-NEXT: // No operand predicates
111
- // CHECK-NEXT: // MIs[0] y
112
- // CHECK-NEXT: // No operand predicates
113
- // CHECK-NEXT: // Combiner Rule #3: NoMatchTwoApply
114
- // CHECK-NEXT: GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner2),
115
- // CHECK-NEXT: // Label 6: @[[L447]]
116
- // CHECK-NEXT: GIM_Reject,
117
- // CHECK-NEXT: // Label 2: @[[L448]]
118
- // CHECK-NEXT: GIM_Try, /*On fail goto*//*Label 7*/ GIMT_Encode4([[L459:[0-9]+]]), // Rule ID 1 //
119
- // CHECK-NEXT: GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),
120
- // CHECK-NEXT: // MIs[0] a
121
- // CHECK-NEXT: // No operand predicates
122
- // CHECK-NEXT: // MIs[0] b
123
- // CHECK-NEXT: // No operand predicates
124
- // CHECK-NEXT: // Combiner Rule #1: TwoMatchTwoApply
125
- // CHECK-NEXT: GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
126
- // CHECK-NEXT: // Label 7: @[[L459]]
127
- // CHECK-NEXT: GIM_Reject,
128
- // CHECK-NEXT: // Label 3: @[[L460]]
129
- // CHECK-NEXT: GIM_Try, /*On fail goto*//*Label 8*/ GIMT_Encode4([[L471:[0-9]+]]), // Rule ID 0 //
130
- // CHECK-NEXT: GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule0Enabled),
131
- // CHECK-NEXT: // MIs[0] a
132
- // CHECK-NEXT: // No operand predicates
133
- // CHECK-NEXT: // MIs[0] b
134
- // CHECK-NEXT: // No operand predicates
135
- // CHECK-NEXT: // Combiner Rule #0: OneMatchOneApply
136
- // CHECK-NEXT: GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner0),
137
- // CHECK-NEXT: // Label 8: @[[L471]]
138
- // CHECK-NEXT: GIM_Reject,
139
- // CHECK-NEXT: // Label 4: @[[#%u, DEFAULT]]
140
- // CHECK-NEXT: GIM_Reject,
141
- // CHECK-NEXT: }; // Size: [[#%u, DEFAULT + 1]] bytes
99
+ // CHECK-NEXT: /* 0 */ GIM_SwitchOpcode, /*MI*/0, /*[*/GIMT_Encode2(99), GIMT_Encode2(205), /*)*//*default:*//*Label 5*/ GIMT_Encode4(500),
100
+ // CHECK-NEXT: /* 10 */ /*TargetOpcode::G_STORE*//*Label 0*/ GIMT_Encode4(434), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
101
+ // CHECK-NEXT: /* 162 */ /*TargetOpcode::G_SEXT*//*Label 1*/ GIMT_Encode4(452), GIMT_Encode4(0),
102
+ // CHECK-NEXT: /* 170 */ /*TargetOpcode::G_ZEXT*//*Label 2*/ GIMT_Encode4(464), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
103
+ // CHECK-NEXT: /* 394 */ /*TargetOpcode::G_FNEG*//*Label 3*/ GIMT_Encode4(476), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0), GIMT_Encode4(0),
104
+ // CHECK-NEXT: /* 430 */ /*TargetOpcode::G_FABS*//*Label 4*/ GIMT_Encode4(488),
105
+ // CHECK-NEXT: /* 434 */ // Label 0: @434
106
+ // CHECK-NEXT: /* 434 */ GIM_Try, /*On fail goto*//*Label 6*/ GIMT_Encode4(451), // Rule ID 2 //
107
+ // CHECK-NEXT: /* 439 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule2Enabled),
108
+ // CHECK-NEXT: /* 442 */ // MIs[0] x
109
+ // CHECK-NEXT: /* 442 */ // No operand predicates
110
+ // CHECK-NEXT: /* 442 */ // MIs[0] y
111
+ // CHECK-NEXT: /* 442 */ // No operand predicates
112
+ // CHECK-NEXT: /* 442 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner0),
113
+ // CHECK-NEXT: /* 446 */ GIM_CheckCxxInsnPredicate, /*MI*/0, /*FnId*/GIMT_Encode2(GICXXPred_MI_Predicate_GICombiner1),
114
+ // CHECK-NEXT: /* 450 */ // Combiner Rule #2: TwoMatchNoApply
115
+ // CHECK-NEXT: /* 450 */ GIR_EraseRootFromParent_Done,
116
+ // CHECK-NEXT: /* 451 */ // Label 6: @451
117
+ // CHECK-NEXT: /* 451 */ GIM_Reject,
118
+ // CHECK-NEXT: /* 452 */ // Label 1: @452
119
+ // CHECK-NEXT: /* 452 */ GIM_Try, /*On fail goto*//*Label 7*/ GIMT_Encode4(463), // Rule ID 3 //
120
+ // CHECK-NEXT: /* 457 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule3Enabled),
121
+ // CHECK-NEXT: /* 460 */ // MIs[0] a
122
+ // CHECK-NEXT: /* 460 */ // No operand predicates
123
+ // CHECK-NEXT: /* 460 */ // MIs[0] y
124
+ // CHECK-NEXT: /* 460 */ // No operand predicates
125
+ // CHECK-NEXT: /* 460 */ // Combiner Rule #3: NoMatchTwoApply
126
+ // CHECK-NEXT: /* 460 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner2),
127
+ // CHECK-NEXT: /* 463 */ // Label 7: @463
128
+ // CHECK-NEXT: /* 463 */ GIM_Reject,
129
+ // CHECK-NEXT: /* 464 */ // Label 2: @464
130
+ // CHECK-NEXT: /* 464 */ GIM_Try, /*On fail goto*//*Label 8*/ GIMT_Encode4(475), // Rule ID 4 //
131
+ // CHECK-NEXT: /* 469 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule4Enabled),
132
+ // CHECK-NEXT: /* 472 */ // MIs[0] a
133
+ // CHECK-NEXT: /* 472 */ // No operand predicates
134
+ // CHECK-NEXT: /* 472 */ // MIs[0] y
135
+ // CHECK-NEXT: /* 472 */ // No operand predicates
136
+ // CHECK-NEXT: /* 472 */ // Combiner Rule #4: CopmbineCXXOrder
137
+ // CHECK-NEXT: /* 472 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner3),
138
+ // CHECK-NEXT: /* 475 */ // Label 8: @475
139
+ // CHECK-NEXT: /* 475 */ GIM_Reject,
140
+ // CHECK-NEXT: /* 476 */ // Label 3: @476
141
+ // CHECK-NEXT: /* 476 */ GIM_Try, /*On fail goto*//*Label 9*/ GIMT_Encode4(487), // Rule ID 1 //
142
+ // CHECK-NEXT: /* 481 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule1Enabled),
143
+ // CHECK-NEXT: /* 484 */ // MIs[0] a
144
+ // CHECK-NEXT: /* 484 */ // No operand predicates
145
+ // CHECK-NEXT: /* 484 */ // MIs[0] b
146
+ // CHECK-NEXT: /* 484 */ // No operand predicates
147
+ // CHECK-NEXT: /* 484 */ // Combiner Rule #1: TwoMatchTwoApply
148
+ // CHECK-NEXT: /* 484 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner1),
149
+ // CHECK-NEXT: /* 487 */ // Label 9: @487
150
+ // CHECK-NEXT: /* 487 */ GIM_Reject,
151
+ // CHECK-NEXT: /* 488 */ // Label 4: @488
152
+ // CHECK-NEXT: /* 488 */ GIM_Try, /*On fail goto*//*Label 10*/ GIMT_Encode4(499), // Rule ID 0 //
153
+ // CHECK-NEXT: /* 493 */ GIM_CheckSimplePredicate, GIMT_Encode2(GICXXPred_Simple_IsRule0Enabled),
154
+ // CHECK-NEXT: /* 496 */ // MIs[0] a
155
+ // CHECK-NEXT: /* 496 */ // No operand predicates
156
+ // CHECK-NEXT: /* 496 */ // MIs[0] b
157
+ // CHECK-NEXT: /* 496 */ // No operand predicates
158
+ // CHECK-NEXT: /* 496 */ // Combiner Rule #0: OneMatchOneApply
159
+ // CHECK-NEXT: /* 496 */ GIR_DoneWithCustomAction, /*Fn*/GIMT_Encode2(GICXXCustomAction_GICombiner0),
160
+ // CHECK-NEXT: /* 499 */ // Label 10: @499
161
+ // CHECK-NEXT: /* 499 */ GIM_Reject,
162
+ // CHECK-NEXT: /* 500 */ // Label 5: @500
163
+ // CHECK-NEXT: /* 500 */ GIM_Reject,
164
+ // CHECK-NEXT: /* 501 */ }; // Size: 501 bytes
142
165
// CHECK-NEXT: return MatchTable0;
143
166
// CHECK-NEXT: }
0 commit comments