Index: llvm/trunk/lib/Target/AMDGPU/SIInstructions.td =================================================================== --- llvm/trunk/lib/Target/AMDGPU/SIInstructions.td +++ llvm/trunk/lib/Target/AMDGPU/SIInstructions.td @@ -468,41 +468,36 @@ // VOP2 Patterns //===----------------------------------------------------------------------===// -multiclass SelectPat { +multiclass FMADPat { + def : Pat < + (vt (fmad (VOP3NoMods0 vt:$src0, i32:$src0_modifiers, i1:$clamp, i32:$omod), + (VOP3NoMods vt:$src1, i32:$src1_modifiers), + (VOP3NoMods vt:$src2, i32:$src2_modifiers))), + (inst $src0_modifiers, $src0, $src1_modifiers, $src1, + $src2_modifiers, $src2, $clamp, $omod) + >; +} + +defm : FMADPat ; +defm : FMADPat ; + +multiclass SelectPat { def : Pat < (vt (select i1:$src0, vt:$src1, vt:$src2)), (inst $src2, $src1, $src0) >; } -defm : SelectPat; -defm : SelectPat; -defm : SelectPat; -defm : SelectPat; +defm : SelectPat ; +defm : SelectPat ; +defm : SelectPat ; +defm : SelectPat ; def : Pat < (i32 (add (i32 (ctpop i32:$popcnt)), i32:$val)), (V_BCNT_U32_B32_e64 $popcnt, $val) >; -// Pattern for V_MAC_F16 -def : Pat < - (f16 (fmad (VOP3NoMods0 f16:$src0, i32:$src0_modifiers, i1:$clamp, i32:$omod), - (VOP3NoMods f16:$src1, i32:$src1_modifiers), - (VOP3NoMods f16:$src2, i32:$src2_modifiers))), - (V_MAC_F16_e64 $src0_modifiers, $src0, $src1_modifiers, $src1, - $src2_modifiers, $src2, $clamp, $omod) ->; - -// Pattern for V_MAC_F32 -def : Pat < - (f32 (fmad (VOP3NoMods0 f32:$src0, i32:$src0_modifiers, i1:$clamp, i32:$omod), - (VOP3NoMods f32:$src1, i32:$src1_modifiers), - (VOP3NoMods f32:$src2, i32:$src2_modifiers))), - (V_MAC_F32_e64 $src0_modifiers, $src0, $src1_modifiers, $src1, - $src2_modifiers, $src2, $clamp, $omod) ->; - /********** ============================================ **********/ /********** Extraction, Insertion, Building and Casting **********/ /********** ============================================ **********/