@@ -1234,6 +1234,23 @@ def : IntClampPat<V_MQSAD_PK_U16_U8_e64, int_amdgcn_mqsad_pk_u16_u8>;
12341234def : IntClampPat<V_QSAD_PK_U16_U8_e64, int_amdgcn_qsad_pk_u16_u8>;
12351235def : IntClampPat<V_MQSAD_U32_U8_e64, int_amdgcn_mqsad_u32_u8>;
12361236
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+
12371254//===----------------------------------------------------------------------===//
12381255// Target-specific instruction encodings.
12391256//===----------------------------------------------------------------------===//
0 commit comments