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