diff --git a/llvm/lib/Target/X86/X86InstrAVX512.td b/llvm/lib/Target/X86/X86InstrAVX512.td index ba5a999b8618..a8be5d81706c 100644 --- a/llvm/lib/Target/X86/X86InstrAVX512.td +++ b/llvm/lib/Target/X86/X86InstrAVX512.td @@ -7521,81 +7521,76 @@ defm VGETEXP : avx512_eri<0x42, "vgetexp", X86fgetexpRnd>, avx512_fp_unaryop_packed<0x42, "vgetexp", X86fgetexpRnd> , EVEX; multiclass avx512_sqrt_packed_round opc, string OpcodeStr, - SDNode OpNodeRnd, X86VectorVTInfo _>{ + X86VectorVTInfo _>{ let ExeDomain = _.ExeDomain in defm rb: AVX512_maskable, + (_.VT (X86fsqrtRnd _.RC:$src, (i32 imm:$rc)))>, EVEX, EVEX_B, EVEX_RC; } multiclass avx512_sqrt_packed opc, string OpcodeStr, - SDNode OpNode, X86VectorVTInfo _>{ + X86VectorVTInfo _>{ let ExeDomain = _.ExeDomain in { defm r: AVX512_maskable, EVEX; + (_.FloatVT (fsqrt _.RC:$src))>, EVEX; defm m: AVX512_maskable, EVEX; defm mb: AVX512_maskable, EVEX, EVEX_B; } } -multiclass avx512_sqrt_packed_all opc, string OpcodeStr, - SDNode OpNode> { - defm PSZ : avx512_sqrt_packed, +multiclass avx512_sqrt_packed_all opc, string OpcodeStr> { + defm PSZ : avx512_sqrt_packed, EVEX_V512, PS, EVEX_CD8<32, CD8VF>; - defm PDZ : avx512_sqrt_packed, + defm PDZ : avx512_sqrt_packed, EVEX_V512, VEX_W, PD, EVEX_CD8<64, CD8VF>; // Define only if AVX512VL feature is present. let Predicates = [HasVLX] in { defm PSZ128 : avx512_sqrt_packed, + v4f32x_info>, EVEX_V128, PS, EVEX_CD8<32, CD8VF>; defm PSZ256 : avx512_sqrt_packed, + v8f32x_info>, EVEX_V256, PS, EVEX_CD8<32, CD8VF>; defm PDZ128 : avx512_sqrt_packed, + v2f64x_info>, EVEX_V128, VEX_W, PD, EVEX_CD8<64, CD8VF>; defm PDZ256 : avx512_sqrt_packed, + v4f64x_info>, EVEX_V256, VEX_W, PD, EVEX_CD8<64, CD8VF>; } } -multiclass avx512_sqrt_packed_all_round opc, string OpcodeStr, - SDNode OpNodeRnd> { - defm PSZ : avx512_sqrt_packed_round opc, string OpcodeStr> { + defm PSZ : avx512_sqrt_packed_round, EVEX_V512, PS, EVEX_CD8<32, CD8VF>; - defm PDZ : avx512_sqrt_packed_round, EVEX_V512, VEX_W, PD, EVEX_CD8<64, CD8VF>; } multiclass avx512_sqrt_scalar opc, string OpcodeStr,X86VectorVTInfo _, - string SUFF, SDNode OpNode, SDNode OpNodeRnd, - Intrinsic Intr> { + string SUFF, Intrinsic Intr> { let ExeDomain = _.ExeDomain in { defm r_Int : AVX512_maskable_scalar; defm m_Int : AVX512_maskable_scalar; @@ -7603,7 +7598,7 @@ multiclass avx512_sqrt_scalar opc, string OpcodeStr,X86VectorVTInfo _, defm rb_Int : AVX512_maskable_scalar, EVEX_B, EVEX_RC; @@ -7621,7 +7616,7 @@ multiclass avx512_sqrt_scalar opc, string OpcodeStr,X86VectorVTInfo _, } let Predicates = [HasAVX512] in { - def : Pat<(_.EltVT (OpNode _.FRC:$src)), + def : Pat<(_.EltVT (fsqrt _.FRC:$src)), (!cast(NAME#SUFF#Zr) (_.EltVT (IMPLICIT_DEF)), _.FRC:$src)>; @@ -7631,7 +7626,7 @@ let Predicates = [HasAVX512] in { } let Predicates = [HasAVX512, OptForSize] in { - def : Pat<(_.EltVT (OpNode (load addr:$src))), + def : Pat<(_.EltVT (fsqrt (load addr:$src))), (!cast(NAME#SUFF#Zm) (_.EltVT (IMPLICIT_DEF)), addr:$src)>; @@ -7643,17 +7638,17 @@ let Predicates = [HasAVX512, OptForSize] in { } multiclass avx512_sqrt_scalar_all opc, string OpcodeStr> { - defm SSZ : avx512_sqrt_scalar, + defm SSZ : avx512_sqrt_scalar, EVEX_CD8<32, CD8VT1>, EVEX_4V, XS, NotMemoryFoldable; - defm SDZ : avx512_sqrt_scalar, + defm SDZ : avx512_sqrt_scalar, EVEX_CD8<64, CD8VT1>, EVEX_4V, XD, VEX_W, NotMemoryFoldable; } -defm VSQRT : avx512_sqrt_packed_all<0x51, "vsqrt", fsqrt>, - avx512_sqrt_packed_all_round<0x51, "vsqrt", X86fsqrtRnd>; +defm VSQRT : avx512_sqrt_packed_all<0x51, "vsqrt">, + avx512_sqrt_packed_all_round<0x51, "vsqrt">; defm VSQRT : avx512_sqrt_scalar_all<0x51, "vsqrt">, VEX_LIG;