[llvm] [GlobalISel][AMDGPU] Import patterns with multiple defs (PR #84171)
Pierre van Houtryve via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 8 00:35:45 PST 2024
================
@@ -728,25 +728,34 @@ def : OpSelBinOpClampPat<saddsat, V_ADD_I16_e64>;
def : OpSelBinOpClampPat<ssubsat, V_SUB_I16_e64>;
} // End SubtargetPredicate = isGFX9Plus
-// FIXME: GlobalISel in general does not handle instructions with 2 results,
-// so it cannot use these patterns.
multiclass IMAD32_Pats <VOP3_Pseudo inst> {
def : GCNPat <
(ThreeOpFrag<mul, add> i32:$src0, i32:$src1, i32:$src2),
- (EXTRACT_SUBREG (inst $src0, $src1,
+ (EXTRACT_SUBREG (inst i32:$src0, i32:$src1,
(REG_SEQUENCE SReg_64, // Use scalar and let it be legalized
$src2, sub0,
(i32 (IMPLICIT_DEF)), sub1),
0 /* clamp */),
sub0)
>;
+
+ // GISel-specific pattern that avoids creating a SGPR->VGPR copy if
+ // $src2 is a VGPR.
+ def : GCNPat <
+ (ThreeOpFrag<mul, add> i32:$src0, i32:$src1, VGPR_32:$src2),
+ (EXTRACT_SUBREG (inst i32:$src0, i32:$src1,
+ (REG_SEQUENCE VReg_64,
+ $src2, sub0,
+ (i32 (IMPLICIT_DEF)), sub1),
+ 0 /* clamp */),
+ sub0)
+ >;
----------------
Pierre-vh wrote:
I didn't find a worthwhile way to do it, we save 2 lines in each pattern but add like 3-4 lines to declare the fragment so it's more or less the same
https://github.com/llvm/llvm-project/pull/84171
More information about the llvm-commits
mailing list