@@ -1234,6 +1234,23 @@ def : IntClampPat<V_MQSAD_PK_U16_U8_e64, int_amdgcn_mqsad_pk_u16_u8>;
1234
1234
def : IntClampPat<V_QSAD_PK_U16_U8_e64, int_amdgcn_qsad_pk_u16_u8>;
1235
1235
def : IntClampPat<V_MQSAD_U32_U8_e64, int_amdgcn_mqsad_u32_u8>;
1236
1236
1237
+ //===----------------------------------------------------------------------===//
1238
+ // Floating-point operation Patterns
1239
+ //===----------------------------------------------------------------------===//
1240
+
1241
+ // Implement fminimum(x, y) by using minimum3(x, y, y)
1242
+ class MinimumMaximumByMinimum3Maximum3<SDPatternOperator node, ValueType vt,
1243
+ Instruction inst> : GCNPat<
1244
+ (vt (node (VOP3Mods vt:$src0, i32:$src0_mods), (VOP3Mods vt:$src1, i32:$src1_mods))),
1245
+ (inst $src0_mods, $src0, $src1_mods, $src1, $src1_mods, $src1)
1246
+ >;
1247
+
1248
+ // Prefer the real 2 operand form if legal
1249
+ let SubtargetPredicate = HasMinimum3Maximum3F32, AddedComplexity = -1000 in {
1250
+ def : MinimumMaximumByMinimum3Maximum3<fminimum, f32, V_MINIMUM3_F32_e64>;
1251
+ def : MinimumMaximumByMinimum3Maximum3<fmaximum, f32, V_MAXIMUM3_F32_e64>;
1252
+ }
1253
+
1237
1254
//===----------------------------------------------------------------------===//
1238
1255
// Target-specific instruction encodings.
1239
1256
//===----------------------------------------------------------------------===//
0 commit comments