@@ -142,72 +142,59 @@ class getVOP2Pat64 <SDPatternOperator node, VOPProfile P> : LetDummies {
142
142
multiclass VOP2Inst_e32<string opName,
143
143
VOPProfile P,
144
144
SDPatternOperator node = null_frag,
145
- string revOp = opName,
146
- bit GFX9Renamed = 0> {
147
- let renamedInGFX9 = GFX9Renamed in {
145
+ string revOp = opName> {
148
146
def _e32 : VOP2_Pseudo <opName, P, VOPPatOrNull<node,P>.ret>,
149
147
Commutable_REV<revOp#"_e32", !eq(revOp, opName)>;
150
- } // End renamedInGFX9 = GFX9Renamed
151
148
}
152
149
multiclass
153
150
VOP2Inst_e32_VOPD<string opName, VOPProfile P, bits<5> VOPDOp,
154
151
string VOPDName, SDPatternOperator node = null_frag,
155
- string revOp = opName, bit GFX9Renamed = 0 > {
156
- defm NAME : VOP2Inst_e32<opName, P, node, revOp, GFX9Renamed >,
152
+ string revOp = opName> {
153
+ defm NAME : VOP2Inst_e32<opName, P, node, revOp>,
157
154
VOPD_Component<VOPDOp, VOPDName>;
158
155
}
159
156
multiclass VOP2Inst_e64<string opName,
160
157
VOPProfile P,
161
158
SDPatternOperator node = null_frag,
162
- string revOp = opName,
163
- bit GFX9Renamed = 0> {
164
- let renamedInGFX9 = GFX9Renamed in {
159
+ string revOp = opName> {
165
160
def _e64 : VOP3InstBase <opName, P, node, 1>,
166
161
Commutable_REV<revOp#"_e64", !eq(revOp, opName)>;
167
162
168
163
let SubtargetPredicate = isGFX11Plus in {
169
164
if P.HasExtVOP3DPP then
170
165
def _e64_dpp : VOP3_DPP_Pseudo <opName, P>;
171
166
} // End SubtargetPredicate = isGFX11Plus
172
- } // End renamedInGFX9 = GFX9Renamed
173
167
}
174
168
175
169
multiclass VOP2Inst_sdwa<string opName,
176
- VOPProfile P,
177
- bit GFX9Renamed = 0> {
178
- let renamedInGFX9 = GFX9Renamed in {
170
+ VOPProfile P> {
179
171
if P.HasExtSDWA then
180
172
def _sdwa : VOP2_SDWA_Pseudo <opName, P>;
181
- } // End renamedInGFX9 = GFX9Renamed
182
173
}
183
174
184
175
multiclass VOP2Inst<string opName,
185
176
VOPProfile P,
186
177
SDPatternOperator node = null_frag,
187
- string revOp = opName,
188
- bit GFX9Renamed = 0> :
189
- VOP2Inst_e32<opName, P, node, revOp, GFX9Renamed>,
190
- VOP2Inst_e64<opName, P, node, revOp, GFX9Renamed>,
191
- VOP2Inst_sdwa<opName, P, GFX9Renamed> {
192
- let renamedInGFX9 = GFX9Renamed in {
178
+ string revOp = opName> :
179
+ VOP2Inst_e32<opName, P, node, revOp>,
180
+ VOP2Inst_e64<opName, P, node, revOp>,
181
+ VOP2Inst_sdwa<opName, P> {
193
182
if P.HasExtDPP then
194
183
def _dpp : VOP2_DPP_Pseudo <opName, P>;
195
- }
196
184
}
197
185
198
186
multiclass VOP2Inst_t16<string opName,
199
187
VOPProfile P,
200
188
SDPatternOperator node = null_frag,
201
- string revOp = opName,
202
- bit GFX9Renamed = 0> {
189
+ string revOp = opName> {
203
190
let OtherPredicates = [Has16BitInsts], True16Predicate = NotHasTrue16BitInsts in {
204
- defm NAME : VOP2Inst<opName, P, node, revOp, GFX9Renamed >;
191
+ defm NAME : VOP2Inst<opName, P, node, revOp>;
205
192
}
206
193
let SubtargetPredicate = UseRealTrue16Insts in {
207
- defm _t16 : VOP2Inst<opName#"_t16", VOPProfile_True16<P>, node, revOp#"_t16", GFX9Renamed >;
194
+ defm _t16 : VOP2Inst<opName#"_t16", VOPProfile_True16<P>, node, revOp#"_t16">;
208
195
}
209
196
let SubtargetPredicate = UseFakeTrue16Insts in {
210
- defm _fake16 : VOP2Inst<opName#"_fake16", VOPProfile_Fake16<P>, node, revOp#"_fake16", GFX9Renamed >;
197
+ defm _fake16 : VOP2Inst<opName#"_fake16", VOPProfile_Fake16<P>, node, revOp#"_fake16">;
211
198
}
212
199
}
213
200
@@ -218,13 +205,12 @@ multiclass VOP2Inst_t16<string opName,
218
205
multiclass VOP2Inst_e64_t16<string opName,
219
206
VOPProfile P,
220
207
SDPatternOperator node = null_frag,
221
- string revOp = opName,
222
- bit GFX9Renamed = 0> {
208
+ string revOp = opName> {
223
209
let OtherPredicates = [Has16BitInsts], True16Predicate = NotHasTrue16BitInsts in {
224
- defm NAME : VOP2Inst<opName, P, node, revOp, GFX9Renamed >;
210
+ defm NAME : VOP2Inst<opName, P, node, revOp>;
225
211
}
226
212
let SubtargetPredicate = HasTrue16BitInsts in {
227
- defm _t16 : VOP2Inst_e64<opName#"_t16", VOPProfile_Fake16<P>, node, revOp#"_t16", GFX9Renamed >;
213
+ defm _t16 : VOP2Inst_e64<opName#"_t16", VOPProfile_Fake16<P>, node, revOp#"_t16">;
228
214
}
229
215
}
230
216
@@ -233,24 +219,19 @@ multiclass VOP2Inst_VOPD<string opName,
233
219
bits<5> VOPDOp,
234
220
string VOPDName,
235
221
SDPatternOperator node = null_frag,
236
- string revOp = opName,
237
- bit GFX9Renamed = 0> :
238
- VOP2Inst_e32_VOPD<opName, P, VOPDOp, VOPDName, node, revOp, GFX9Renamed>,
239
- VOP2Inst_e64<opName, P, node, revOp, GFX9Renamed>,
240
- VOP2Inst_sdwa<opName, P, GFX9Renamed> {
241
- let renamedInGFX9 = GFX9Renamed in {
222
+ string revOp = opName> :
223
+ VOP2Inst_e32_VOPD<opName, P, VOPDOp, VOPDName, node, revOp>,
224
+ VOP2Inst_e64<opName, P, node, revOp>,
225
+ VOP2Inst_sdwa<opName, P> {
242
226
if P.HasExtDPP then
243
227
def _dpp : VOP2_DPP_Pseudo <opName, P>;
244
- }
245
228
}
246
229
247
230
multiclass VOP2bInst <string opName,
248
231
VOPProfile P,
249
232
SDPatternOperator node = null_frag,
250
233
string revOp = opName,
251
- bit GFX9Renamed = 0,
252
234
bit useSGPRInput = !eq(P.NumSrcArgs, 3)> {
253
- let renamedInGFX9 = GFX9Renamed in {
254
235
let SchedRW = [Write32Bit, WriteSALU] in {
255
236
let Uses = !if(useSGPRInput, [VCC, EXEC], [EXEC]), Defs = [VCC] in {
256
237
def _e32 : VOP2_Pseudo <opName, P, VOPPatOrNull<node,P>.ret>,
@@ -274,7 +255,6 @@ multiclass VOP2bInst <string opName,
274
255
def _e64_dpp : VOP3_DPP_Pseudo <opName, P>;
275
256
} // End SubtargetPredicate = isGFX11Plus
276
257
}
277
- }
278
258
}
279
259
280
260
class VOP2bInstAlias <VOP2_Pseudo ps, Instruction inst,
@@ -763,26 +743,24 @@ def V_MADAK_F32 : VOP2_Pseudo <"v_madak_f32", VOP_MADAK_F32, []>;
763
743
764
744
// No patterns so that the scalar instructions are always selected.
765
745
// The scalar versions will be replaced with vector when needed later.
746
+ defm V_SUB_CO_U32 : VOP2bInst <"v_sub_co_u32", VOP2b_I32_I1_I32_I32, null_frag, "v_sub_co_u32">;
747
+ defm V_SUBREV_CO_U32 : VOP2bInst <"v_subrev_co_u32", VOP2b_I32_I1_I32_I32, null_frag, "v_sub_co_u32">;
748
+ defm V_SUBB_U32 : VOP2bInst <"v_subb_u32", VOP2b_I32_I1_I32_I32_I1, null_frag, "v_subb_u32">;
749
+ defm V_SUBBREV_U32 : VOP2bInst <"v_subbrev_u32", VOP2b_I32_I1_I32_I32_I1, null_frag, "v_subb_u32">;
766
750
767
- let isAdd = 1 in {
768
- defm V_ADD_CO_U32 : VOP2bInst <"v_add_co_u32", VOP2b_I32_I1_I32_I32, null_frag, "v_add_co_u32", 1>;
769
- }
770
-
771
- defm V_SUB_CO_U32 : VOP2bInst <"v_sub_co_u32", VOP2b_I32_I1_I32_I32, null_frag, "v_sub_co_u32", 1>;
772
- defm V_SUBREV_CO_U32 : VOP2bInst <"v_subrev_co_u32", VOP2b_I32_I1_I32_I32, null_frag, "v_sub_co_u32", 1>;
773
- defm V_ADDC_U32 : VOP2bInst <"v_addc_u32", VOP2b_I32_I1_I32_I32_I1, null_frag, "v_addc_u32", 1>;
774
- defm V_SUBB_U32 : VOP2bInst <"v_subb_u32", VOP2b_I32_I1_I32_I32_I1, null_frag, "v_subb_u32", 1>;
775
- defm V_SUBBREV_U32 : VOP2bInst <"v_subbrev_u32", VOP2b_I32_I1_I32_I32_I1, null_frag, "v_subb_u32", 1>;
776
751
752
+ let SubtargetPredicate = HasAddNoCarryInsts, isReMaterializable = 1 in {
753
+ defm V_SUB_U32 : VOP2Inst <"v_sub_u32", VOP_I32_I32_I32_ARITH, null_frag, "v_sub_u32">;
754
+ defm V_SUBREV_U32 : VOP2Inst <"v_subrev_u32", VOP_I32_I32_I32_ARITH, null_frag, "v_sub_u32">;
755
+ }
777
756
778
- let SubtargetPredicate = HasAddNoCarryInsts, isReMaterializable = 1 in {
779
-
780
- let isAdd = 1 in {
781
- defm V_ADD_U32 : VOP2Inst_VOPD <"v_add_u32", VOP_I32_I32_I32_ARITH, 0x10, "v_add_nc_u32", null_frag, "v_add_u32", 1>;
757
+ let SubtargetPredicate = HasAddNoCarryInsts, isReMaterializable = 1, isAdd = 1 in {
758
+ defm V_ADD_U32 : VOP2Inst_VOPD <"v_add_u32", VOP_I32_I32_I32_ARITH, 0x10, "v_add_nc_u32", null_frag, "v_add_u32">;
782
759
}
783
760
784
- defm V_SUB_U32 : VOP2Inst <"v_sub_u32", VOP_I32_I32_I32_ARITH, null_frag, "v_sub_u32", 1>;
785
- defm V_SUBREV_U32 : VOP2Inst <"v_subrev_u32", VOP_I32_I32_I32_ARITH, null_frag, "v_sub_u32", 1>;
761
+ let isAdd = 1 in {
762
+ defm V_ADD_CO_U32 : VOP2bInst <"v_add_co_u32", VOP2b_I32_I1_I32_I32, null_frag, "v_add_co_u32">;
763
+ defm V_ADDC_U32 : VOP2bInst <"v_addc_u32", VOP2b_I32_I1_I32_I32_I1, null_frag, "v_addc_u32">;
786
764
}
787
765
788
766
} // End isCommutable = 1
0 commit comments