diff --git a/llvm/lib/Target/AMDGPU/SIInstructions.td b/llvm/lib/Target/AMDGPU/SIInstructions.td index 43603ab594b50b..723a38b2ecc69f 100644 --- a/llvm/lib/Target/AMDGPU/SIInstructions.td +++ b/llvm/lib/Target/AMDGPU/SIInstructions.td @@ -3228,9 +3228,10 @@ multiclass IntMed3Pat; defm : IntMed3Pat; -// This matches 16 permutations of max(min(x, y), min(max(x, y), z)) -class FPMed3Pat : GCNPat< +multiclass FPMed3Pat { + // This matches 16 permutations of max(min(x, y), min(max(x, y), z)) + def : GCNPat< (fmaxnum_like_nnan (fminnum_like (VOP3Mods vt:$src0, i32:$src0_mods), (VOP3Mods vt:$src1, i32:$src1_mods)), @@ -3240,6 +3241,19 @@ class FPMed3Pat; + + // This matches 16 permutations of min(max(x, y), max(min(x, y), z)) + def : GCNPat< + (fminnum_like_nnan + (fmaxnum_like (VOP3Mods vt:$src0, i32:$src0_mods), + (VOP3Mods vt:$src1, i32:$src1_mods)), + (fmaxnum_like (fminnum_like (VOP3Mods vt:$src0, i32:$src0_mods), + (VOP3Mods vt:$src1, i32:$src1_mods)), + (vt (VOP3Mods vt:$src2, i32:$src2_mods)))), + (med3Inst $src0_mods, $src0, $src1_mods, $src1, $src2_mods, $src2, + DSTCLAMP.NONE, DSTOMOD.NONE)>; +} + class FP16Med3Pat : GCNPat< (fmaxnum_like_nnan (fminnum_like (VOP3Mods vt:$src0, i32:$src0_mods), @@ -3270,7 +3284,7 @@ multiclass Int16Med3Pat; } -def : FPMed3Pat; +defm : FPMed3Pat; class IntMinMaxPat