@@ -142,72 +142,59 @@ class getVOP2Pat64 <SDPatternOperator node, VOPProfile P> : LetDummies {
142142multiclass VOP2Inst_e32<string opName,
143143 VOPProfile P,
144144 SDPatternOperator node = null_frag,
145- string revOp = opName,
146- bit GFX9Renamed = 0> {
147- let renamedInGFX9 = GFX9Renamed in {
145+ string revOp = opName> {
148146 def _e32 : VOP2_Pseudo <opName, P, VOPPatOrNull<node,P>.ret>,
149147 Commutable_REV<revOp#"_e32", !eq(revOp, opName)>;
150- } // End renamedInGFX9 = GFX9Renamed
151148}
152149multiclass
153150 VOP2Inst_e32_VOPD<string opName, VOPProfile P, bits<5> VOPDOp,
154151 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>,
157154 VOPD_Component<VOPDOp, VOPDName>;
158155}
159156multiclass VOP2Inst_e64<string opName,
160157 VOPProfile P,
161158 SDPatternOperator node = null_frag,
162- string revOp = opName,
163- bit GFX9Renamed = 0> {
164- let renamedInGFX9 = GFX9Renamed in {
159+ string revOp = opName> {
165160 def _e64 : VOP3InstBase <opName, P, node, 1>,
166161 Commutable_REV<revOp#"_e64", !eq(revOp, opName)>;
167162
168163 let SubtargetPredicate = isGFX11Plus in {
169164 if P.HasExtVOP3DPP then
170165 def _e64_dpp : VOP3_DPP_Pseudo <opName, P>;
171166 } // End SubtargetPredicate = isGFX11Plus
172- } // End renamedInGFX9 = GFX9Renamed
173167}
174168
175169multiclass VOP2Inst_sdwa<string opName,
176- VOPProfile P,
177- bit GFX9Renamed = 0> {
178- let renamedInGFX9 = GFX9Renamed in {
170+ VOPProfile P> {
179171 if P.HasExtSDWA then
180172 def _sdwa : VOP2_SDWA_Pseudo <opName, P>;
181- } // End renamedInGFX9 = GFX9Renamed
182173}
183174
184175multiclass VOP2Inst<string opName,
185176 VOPProfile P,
186177 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> {
193182 if P.HasExtDPP then
194183 def _dpp : VOP2_DPP_Pseudo <opName, P>;
195- }
196184}
197185
198186multiclass VOP2Inst_t16<string opName,
199187 VOPProfile P,
200188 SDPatternOperator node = null_frag,
201- string revOp = opName,
202- bit GFX9Renamed = 0> {
189+ string revOp = opName> {
203190 let OtherPredicates = [Has16BitInsts], True16Predicate = NotHasTrue16BitInsts in {
204- defm NAME : VOP2Inst<opName, P, node, revOp, GFX9Renamed >;
191+ defm NAME : VOP2Inst<opName, P, node, revOp>;
205192 }
206193 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">;
208195 }
209196 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">;
211198 }
212199}
213200
@@ -218,13 +205,12 @@ multiclass VOP2Inst_t16<string opName,
218205multiclass VOP2Inst_e64_t16<string opName,
219206 VOPProfile P,
220207 SDPatternOperator node = null_frag,
221- string revOp = opName,
222- bit GFX9Renamed = 0> {
208+ string revOp = opName> {
223209 let OtherPredicates = [Has16BitInsts], True16Predicate = NotHasTrue16BitInsts in {
224- defm NAME : VOP2Inst<opName, P, node, revOp, GFX9Renamed >;
210+ defm NAME : VOP2Inst<opName, P, node, revOp>;
225211 }
226212 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">;
228214 }
229215}
230216
@@ -233,24 +219,19 @@ multiclass VOP2Inst_VOPD<string opName,
233219 bits<5> VOPDOp,
234220 string VOPDName,
235221 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> {
242226 if P.HasExtDPP then
243227 def _dpp : VOP2_DPP_Pseudo <opName, P>;
244- }
245228}
246229
247230multiclass VOP2bInst <string opName,
248231 VOPProfile P,
249232 SDPatternOperator node = null_frag,
250233 string revOp = opName,
251- bit GFX9Renamed = 0,
252234 bit useSGPRInput = !eq(P.NumSrcArgs, 3)> {
253- let renamedInGFX9 = GFX9Renamed in {
254235 let SchedRW = [Write32Bit, WriteSALU] in {
255236 let Uses = !if(useSGPRInput, [VCC, EXEC], [EXEC]), Defs = [VCC] in {
256237 def _e32 : VOP2_Pseudo <opName, P, VOPPatOrNull<node,P>.ret>,
@@ -274,7 +255,6 @@ multiclass VOP2bInst <string opName,
274255 def _e64_dpp : VOP3_DPP_Pseudo <opName, P>;
275256 } // End SubtargetPredicate = isGFX11Plus
276257 }
277- }
278258}
279259
280260class VOP2bInstAlias <VOP2_Pseudo ps, Instruction inst,
@@ -763,26 +743,24 @@ def V_MADAK_F32 : VOP2_Pseudo <"v_madak_f32", VOP_MADAK_F32, []>;
763743
764744// No patterns so that the scalar instructions are always selected.
765745// 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">;
766750
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>;
776751
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+ }
777756
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">;
782759}
783760
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">;
786764}
787765
788766} // End isCommutable = 1
0 commit comments